是否有命令列出当前打开的所有抽象 UNIX 套接字?

是否有命令列出当前打开的所有抽象 UNIX 套接字?

是否有命令或系统调用用于列出当前打开的所有抽象 unix 套接字?

更新:有人建议我使用netstat -x,理论上可行,但不列出抽象套接字的名称,只列出那些带有路径的名称。

bash-5.0$ netstat -xeW
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node Path
unix  2      [ ]         STREAM     CONNECTED     3959158
unix  2      [ ]         STREAM     CONNECTED     3961068
unix  3      [ ]         STREAM     CONNECTED     3965008
unix  3      [ ]         STREAM     CONNECTED     3967192 /run/spire/writable/agent.sock

答案1

抽象套接字

它们的路径名以 NUL 字符开头,使其路径长度为 0。它们可以使用剩余的 107 个字符来定义唯一标识符,其他程序可以使用该标识符进行连接。它们不在文件系统中表示。

大多数 UNIX 都带有 lsof(打开文件列表)命令。如果没有,您可以轻松添加它。

lsof -U

upowerd   1604       root    5u  unix 0xffff88005af5f400      0t0 18631 type=STREAM
colord    1614     colord   10u  unix 0xffff880034d3f400      0t0 18170 type=STREAM
systemd   2009       root   13u  unix 0xffff88005a293000      0t0 21213 /run/user/0/systemd/notify type=DGRAM
systemd   2009       root   14u  unix 0xffff88005a293c00      0t0 21214 /run/user/0/systemd/private type=STREAM

在 Linux 上,显示抽象命名空间路径时,空字节将转换为 @。较旧的工具版本可能无法正确处理零字节

upstart   1525    lightdm    7u  unix 0xffff880034b99800      0t0 17301 @/com/ubuntu/upstart-session/111/1525 type=STREAM

您将能够列出系统上的所有 UNIX 域套接字。

“ss”命令还可以显示套接字和抽象套接字。同样,抽象套接字将以 @ 为前缀

祝你好运!

相关内容