lsof 中的“i”标志是什么意思?

lsof 中的“i”标志是什么意思?

我试图找出我的 Linux Ubuntu 机器上正在使用哪些端口。我正在读这篇文章如何在 Linux 或 Unix 上检查端口是否正在使用看到他们的命令之一是:

sudo lsof -i -P -n | grep LISTEN

我仍然对很多 Linux 命令不太熟悉,但我最近才了解lsof用于列出所有打开的文件,所以我想了解这些标志的用途。

(-P 和 -n 标志是做什么用的?我已经看过手册,但它根本没有帮助。似乎 -i 标志是这里最重要的一个。)

我发现如果我在没有 -i 标志的情况下对“LISTEN”执行 grep,我得到的结果与使用时完全不同。

在手册中,它是这样说的:

-i [i] 该选项选择其 Internet 地址与 i 中指定的地址匹配的文件列表。如果未指定地址,则此选项将选择所有 Internet 和 x.25 (HP-UX) 网络文件的列表。

我真的不明白这意味着什么,并且绝对不明白它如何帮助我找出正在使用的端口。

答案1

-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))   

相关内容