我试图弄清楚我的 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) 网络文件的列表。
我真的不明白这意味着什么,也绝对不明白它如何帮助我弄清楚正在使用的端口。
-i
选择 Internet 文件或套接字。它与可选的地址参数一起使用。如果没有该参数,它将选择所有套接字。您可以使用带有此选项的附加过滤器来按 IPv4/IPv6、TCP/UDP 等进行选择。手册页列出了几个示例:
-i 4
选择 IPv4 套接字,-i 6
选择 IPv6 套接字。-i TCP
或-i UDP
按协议选择。-i @hostname
或-i @ipaddress
通过套接字绑定到的接口的名称/IP 进行选择。-i :port
选择绑定到特定端口的套接字。为了说明其他两个选项,请考虑以下示例。此条目来自我的系统,显示两个 CUPS 端口:
您会注意到该端口被指定为
ipp
- Internet 打印协议。要将其转回数字,请-P
使用以下选项:主机名在此处显示为 localhost。在较大的网络中,
lsof
将努力通过查找来列出主机名。作为优化,您可以使用-n
. 使用-n
,显示 IP 地址而不是主机名:顺便说一句,我喜欢使用该
ss
命令来跟踪监听端口。我常用的语法是ss -ltnp
,它表示:1) 显示监听端口,2) 仅 TCP 端口,3) 不查找主机名,4) 显示进程 ID。结果如下所示(相同的 CUPS 端口):