查找目录所有硬链接的最佳方法

查找目录所有硬链接的最佳方法

我正在追踪可能存在错误的目录硬链接,因此我想找到目录的所有硬链接以手动验证它们。(fsck未发现错误,但在随意检查时链接计数似乎有误。)

检查文件硬链接的正常方法是使用find,或find -inumfind -samefile但这两者都不适用于目录:

user$ find . -links 3 -name '.*' -ls
user$ ls bar
l1/
user$ ls -iad bar
10541088 bar/
user$ ls -iad bar/.
10541088 bar/./
user$ ls -iad bar/l1/..
10541088 bar/l1/../
user$ find . -inum 10541088 -ls
10541088        0 drwxr-xr-x    3 user             admin                 102 Mar 17 11:36 ./bar
user$ find . -samefile bar -ls
10541088        0 drwxr-xr-x    3 user             admin                 102 Mar 17 11:36 ./bar

请注意,尽管barbar/.bar/l1/..都是指向同一 inode 的硬链接,find但仅列出其中一个。

我可以使用ls -aiR / | grep 10541088,这样至少可以找到点和点点链接,但我不能肯定不会错过其他类型的隐藏文件,而且ls会跨设备,而这是我不想要的。

有没有更好的方法找到全部目录的硬链接?

答案1

当您有一个子目录时,计数 3 是正确的。

如果一个目录有 5 个子目录,则计数必须为 7。

在这个例子中,我假设/usr/bin/没有子目录

如果你考虑/usr/bin参考文献数量为2。

  • 参考文献 1bin 在目录中/usr

  • 参考文献 2. 在目录中/usr/bin

如果你考虑/usr/参考文献数量为3。

  • 参考文献 1/usr 在目录中/

  • 参考文献 2. 在目录中/usr

  • 参考文献 3.. 在目录中/usr/bin

如果你考虑/var/缓存/手册/参考文献数量为26篇。

  • 参考文献 1man 在目录中/var/缓存

  • 参考文献 2. 在目录中/var/缓存/man

  • 参考文献 3.. 在目录中/var/缓存/man/cs

  • 参考文献 4.. 在目录中/var/缓存/man/da

  • 参考文献 5.. 在目录中/var/缓存/man/es

  • ../..

相关内容