Linux命令查找进程正在哪个端口运行?

Linux命令查找进程正在哪个端口运行?

有没有干净的检查Linux进程/服务正在运行/监听哪个端口的方法?

我知道fusernetcatlsof等都是找到该信息的方法,但它们会同时返回一堆其他信息。例如, netstat -ltnp | grep -w process_name"会成功,但它会返回

tcp        0      0 127.0.0.1:1234      0.0.0.0:*               LISTEN      4880/process
tcp6       0      0 ::1:                :::*                    LISTEN      4880/process

另外,我想要进程运行的端口,而不是给定端口上运行的进程,例如,

magic_command -abcd process_name 返回端口号,否则什么也不返回。

PS:我已经检查了明显的链接,例如https://ostechnix.com/how-to-find-which-service-is-listening-on-a-pspecial-port/

答案1

lsof可以用于此目的。 magic_command 可能如下所示:

sudo lsof -i -P -n | grep LISTEN | grep <your_process_name>

您可以将其包装为别名:

alias magic="sudo lsof -i -P -n | grep LISTEN | grep "

示例输出:

$ magic httpd
httpd      9438           apache    3u  IPv4 2087313137      0t0  TCP *:80 (LISTEN)
httpd      9438           apache    4u  IPv4 2087321333      0t0  TCP *:49383 (LISTEN)
httpd      9438           apache    5u  IPv4 2087321335      0t0  TCP *:49384 (LISTEN)
httpd      9438           apache    6u  IPv4 2087345343      0t0  TCP *:443 (LISTEN)
httpd     23940             root    3u  IPv4 2087313137      0t0  TCP *:80 (LISTEN)
httpd     23940             root    4u  IPv4 2087321333      0t0  TCP *:49383 (LISTEN)
httpd     23940             root    5u  IPv4 2087321335      0t0  TCP *:49384 (LISTEN)
httpd     23940             root    6u  IPv4 2087345343      0t0  TCP *:443 (LISTEN)

如果你真的不关心除了端口之外的任何东西,一些输出处理将切断不相关的信息

$ magic httpd | awk -F: '{print $2}' | cut -d\  -f1 | sort -un
80
443
49383
49384

答案2

在 Linux 上,当挂载 /proc 时,您可以从以下位置获取此信息

ls -l /proc/<pid>/fd/

(<pid>填入进程pid)

相关内容