如何计算出索引节点号的链接计数?如果我知道索引节点号是 592255 - 我可以做什么来找出链接计数?
我知道目录的链接数至少为 2,但不知道如何解决。
答案1
使用名称查找链接计数
您可以使用以下stat
命令获取给定文件/目录的链接计数:
$ stat lib/
File: ‘lib/’
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd02h/64770d Inode: 11666186 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 1000/ saml) Gid: ( 1000/ saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-03-21 18:16:10.521963381 -0400
Modify: 2014-01-13 17:16:49.438408973 -0500
Change: 2014-01-14 17:57:46.636255446 -0500
Birth: -
看一下手册页stat
:
%h number of hard links
%i inode number
因此,您可以使用或输出stat
功能直接获取该值:--printf
--format
$ stat --printf="%h\n" lib/
3
$ stat --format="%h" lib/
3
$ stat -c "%h" lib/
3
使用 inode 查找链接计数
另一方面,如果您只知道索引节点号,您可以像这样向后工作:
$ ls -id lib
11666186 lib
$ find -inum 11666186 -exec stat -c "%h" {} +
3
参考
答案2
将索引节点号提供给命令并告诉它在文件上find
运行该命令:stat
find . -inum #### -exec stat -c "%h" {} \;
答案3
例如
ls -l passwd
-rw-r--r-- 1 root root 1402 2008-03-30 17:49 passwd
当引用文件时,这个数字 (1) 实际上是文件的链接计数,或者当引用目录(包括 . 和 .. 条目)时包含的目录条目数。
又例如
ls -i /etc/passwd
8654127 /etc/passwd
这是 /etc/passwd 的 inode 号。现在您可以通过以下命令找到实际与该索引节点数 8654127 链接的链接数:
find /etc/ -inum 8654127
/etc/passwd
在我的示例中,它只是 /etc/passwd,因此您可以根据您的情况执行以下操作:
find / -inum 592255
答案4
从 inode 获取链接计数没有搜索完整的文件系统,在ext2
//ext3
文件系统上ext4
您可以使用debugfs
.这里的缺点是您需要了解设备并拥有 root 权限。当然,好处是它可以快得多。对于 inode 为5638454
on 的文件dev/sda2
:
sudo debugfs -R 'stat <5638454>' /dev/sda2
在 上btrfs
,给定安装点/mnt
而不是设备:
stat -c %h $(sudo btrfs inspect-internal inode-resolve 5638454 /mnt)