如何获取给定路径的unix套接字inode?

如何获取给定路径的unix套接字inode?

让我们/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/unix4517115):

# grep mysqld.sock /proc/net/unix
ffff9efa85f1bc00: 00000002 00000000 00010000 0001 01 4517115 /var/run/mysqld/mysqld.sock

问题是,给定文件系统套接字 inode (1200),如何检索操作系统套接字 inode(4517115)?不幸的是,我不能依赖 、sslsof,甚至/proc/net/unix当容器创建套接字文件(例如)时这些源是不可靠的:

  • ss、lsof 和其他工具通常根本不列出这些套接字(也许这些工具依赖于/proc/net/unix?),
  • /proc/[pid]/net/unix不可靠,因为可能不可能(或至少很难)匹配从主机映射到容器中不同路径的文件。此外,/proc/net/unix它本身可能不会列出这些套接字。

相关内容