Ubuntu

lsof 中的“i”標誌是什麼意思?

  • December 31, 2021

我試圖弄清楚我的 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))   

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