我正在追踪可能存在错误的目录硬链接,因此我想找到目录的所有硬链接以手动验证它们。(fsck
未发现错误,但在随意检查时链接计数似乎有误。)
检查文件硬链接的正常方法是使用find
,或find -inum
,find -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
请注意,尽管bar
、bar/.
和bar/l1/..
都是指向同一 inode 的硬链接,find
但仅列出其中一个。
我可以使用ls -aiR / | grep 10541088
,这样至少可以找到点和点点链接,但我不能肯定不会错过其他类型的隐藏文件,而且ls
会跨设备,而这是我不想要的。
有没有更好的方法找到全部目录的硬链接?
答案1
当您有一个子目录时,计数 3 是正确的。
如果一个目录有 5 个子目录,则计数必须为 7。
在这个例子中,我假设/usr/bin/没有子目录
如果你考虑/usr/bin参考文献数量为2。
参考文献 1
bin
在目录中/usr参考文献 2
.
在目录中/usr/bin
如果你考虑/usr/参考文献数量为3。
参考文献 1
/usr
在目录中/参考文献 2
.
在目录中/usr参考文献 3
..
在目录中/usr/bin
如果你考虑/var/缓存/手册/参考文献数量为26篇。
参考文献 1
man
在目录中/var/缓存参考文献 2
.
在目录中/var/缓存/man参考文献 3
..
在目录中/var/缓存/man/cs参考文献 4
..
在目录中/var/缓存/man/da参考文献 5
..
在目录中/var/缓存/man/es../..