Linux

Linux命令查找程序正在執行的埠?

  • October 24, 2020

有沒有一種干淨的方法來檢查 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-particular-port/

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

引用自:https://unix.stackexchange.com/questions/616125