lsof 中的“i”標誌是什麼意思?
我試圖弄清楚我的 Linux Ubuntu 機器上正在使用哪些埠。我正在閱讀文章*如何檢查埠是否在 Linux 或 Unix 上使用,*並看到他們的命令之一是:
sudo lsof -i -P -n | grep LISTEN
我仍然對很多 Linux 命令感到困惑,但我最近才知道
lsof
列出所有打開的文件,所以我想了解這些標誌的用途。(-P 和 -n 標誌是做什麼用的?我看過手冊,但它根本沒有幫助。似乎 -i 標誌是這裡最重要的標誌。)
我發現如果我在沒有 -i 標誌的情況下對“LISTEN”進行 grep,我得到的結果與使用完全不同。
在手冊中,它是這樣說的:
-一世
$$ i $$ 此選項選擇任何 Internet 地址與 i 中指定的地址匹配的文件列表。如果未指定地址,此選項將選擇所有 Internet 和 x.25 (HP-UX) 網路文件的列表。
我真的不明白這意味著什麼,也絕對不明白它如何幫助我弄清楚正在使用的埠。
-i
選擇 Internet 文件或套接字。它與可選的地址參數一起使用。如果沒有該參數,它將選擇所有套接字。您可以使用帶有此選項的附加過濾器來按 IPv4/IPv6、TCP/UDP 等進行選擇。手冊頁列出了幾個範例:
-i 4
選擇 IPv4 套接字,-i 6
選擇 IPv6 套接字。-i TCP
或-i UDP
按協議選擇。-i @hostname
或-i @ipaddress
通過套接字綁定到的介面的名稱/IP 進行選擇。-i :port
選擇綁定到特定埠的套接字。為了說明其他兩個選項,請考慮以下範例。此條目來自我的系統,顯示兩個 CUPS 埠:
cupsd 855 root 9u IPv6 25870 0t0 TCP localhost:ipp (LISTEN) cupsd 855 root 10u IPv4 25871 0t0 TCP localhost:ipp (LISTEN)
您會注意到該埠被指定為
ipp
- Internet 列印協議。要將其轉回數字,請-P
使用以下選項:cupsd 855 root 9u IPv6 25870 0t0 TCP localhost:631 (LISTEN) cupsd 855 root 10u IPv4 25871 0t0 TCP localhost:631 (LISTEN)
主機名在此處顯示為 localhost。在較大的網路中,
lsof
將努力通過查找來列出主機名。作為優化,您可以使用-n
. 使用-n
,顯示 IP 地址而不是主機名:cupsd 855 root 9u IPv6 25870 0t0 TCP [::1]:631 (LISTEN) cupsd 855 root 10u IPv4 25871 0t0 TCP 127.0.0.1:631 (LISTEN)
順便說一句,我喜歡使用該
ss
命令來跟踪監聽埠。我常用的語法是ss -ltnp
,它表示:1) 顯示監聽埠,2) 僅 TCP 埠,3) 不查找主機名,4) 顯示程序 ID。結果如下所示(相同的 CUPS 埠):LISTEN 0 5 127.0.0.1:631 0.0.0.0:* users:(("cupsd",pid=855,fd=10)) LISTEN 0 5 [::1]:631 [::]:* users:(("cupsd",pid=855,fd=9))