是否有命令或系统调用用于列出当前打开的所有抽象 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”命令还可以显示套接字和抽象套接字。同样,抽象套接字将以 @ 为前缀
祝你好运!