计算出inode数量的链接计数?

计算出inode数量的链接计数?

如何计算出索引节点号的链接计数?如果我知道索引节点号是 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 为5638454on 的文件dev/sda2

sudo debugfs -R 'stat <5638454>' /dev/sda2

在 上btrfs,给定安装点/mnt而不是设备:

stat -c %h $(sudo btrfs inspect-internal inode-resolve 5638454 /mnt)

相关内容