与えられたパスの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)?残念ながら、、にss依存することはできず、コンテナがソケットファイルを生成するとき、これらのソースlsof/proc/net/unix信頼できません(例:)。

  • ss、lsof、およびその他のツールは、これらのソケットをまったくリストしないことがよくあります(おそらくそのツールはソケットに依存する可能性があります/proc/net/unix)。
  • /proc/[pid]/net/unixホスト上のコンテナの他のパスにマップされたファイルを一致させることは不可能であるか、少なくとも難しい可能性があるため、信頼できません。また、/proc/net/unixこれらのソケット自体がリストされていない可能性があります。

関連情報