让我们/var/run/mysqld/mysqld.sock/
成为一个开放的套接字。我可以stat
得到的索引节点文件(这里1200)
# stat /var/run/mysqld/mysqld.sock
File: /var/run/mysqld/mysqld.sock
Size: 0 Blocks: 0 IO Block: 4096 socket
Device: 17h/23d Inode: 1200 Links: 1
Access: (0777/srwxrwxrwx) Uid: ( 109/ mysql) Gid: ( 121/ mysql)
Access: 2020-08-24 07:06:50.716419994 +0200
Modify: 2020-07-20 14:51:30.892060665 +0200
Change: 2020-07-20 14:51:30.892060665 +0200
但是,我想要的不是磁盘文件系统 inode(ext4 或类似的),而是操作系统套接字 inode(如/proc/net/unix
(4517115):
# grep mysqld.sock /proc/net/unix
ffff9efa85f1bc00: 00000002 00000000 00010000 0001 01 4517115 /var/run/mysqld/mysqld.sock
问题是,给定文件系统套接字 inode (1200),如何检索操作系统套接字 inode(4517115)?不幸的是,我不能依赖 、ss
、lsof
,甚至/proc/net/unix
当容器创建套接字文件(例如)时这些源是不可靠的:
- ss、lsof 和其他工具通常根本不列出这些套接字(也许这些工具依赖于
/proc/net/unix
?), /proc/[pid]/net/unix
不可靠,因为可能不可能(或至少很难)匹配从主机映射到容器中不同路径的文件。此外,/proc/net/unix
它本身可能不会列出这些套接字。