有没有干净的检查Linux进程/服务正在运行/监听哪个端口的方法?
我知道fuser
、netcat
、lsof
等都是找到该信息的方法,但它们会同时返回一堆其他信息。例如, 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)