如何找到TCP套接字的索引节点?

Eri*_*ami 4 sockets linux tcp proc

如何将“ inode”列中的值绑定/proc/net/tcp到中的文件/proc/<pid>/fd/

我的印象是,inodeTCP 中的列具有套接字的inode的十进制表示形式,但事实并非如此。

例如,如果我运行,则会telnet localhost 80看到以下内容(telnet为pid 9021)。

/proc/net/tcp 包含

sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
23: 0100007F:CE2A 0100007F:0050 01 00000000:00000000 00:00000000 00000000  1000        0 361556 1 00000000 20 0 0 10 -1
Run Code Online (Sandbox Code Playgroud)

这让我认为连接到127.0.0.1:80的套接字的inode是361556。但是如果我运行ls --inode -alh /proc/9021/fd,我会看到

349886 lrwx------ 1 me me 64 Dec 26 10:51 3 -> socket:[361556]
Run Code Online (Sandbox Code Playgroud)

索引节点为349886,与tcp表的索引节点列中的值不同:361556。但是链接目标似乎具有正确的名称。同样,stat /proc/9021/3显示:

File: ‘/proc/9021/fd/3’ -> ‘socket:[361556]’
Size: 64            Blocks: 0          IO Block: 1024   symbolic link
Device: 3h/3d   Inode: 349886      Links: 1
Run Code Online (Sandbox Code Playgroud)

tcp表的inode列中的数字是多少?为什么它不与ls或报告的inode对齐stat

(如果有的话,我正在运行Ubuntu 14.10)

Eri*_*ami 5

ls和所示的索引节点stat用于指向与套接字关联的索引节点的符号链接。运行ls -iLalh显示正确的索引节点。同上stat -L

赫尔帕·德尔普 我只是在撰写问题时才知道这一点。; _;