![如何查找给定文件的所有硬链接?](https://linux22.com/image/64544/%E5%A6%82%E4%BD%95%E6%9F%A5%E6%89%BE%E7%BB%99%E5%AE%9A%E6%96%87%E4%BB%B6%E7%9A%84%E6%89%80%E6%9C%89%E7%A1%AC%E9%93%BE%E6%8E%A5%EF%BC%9F%20.png)
我们如何找到给定文件的所有硬链接?即,在给定硬链接的情况下,找到同一文件的所有其他硬链接?
文件系统是否跟踪文件的硬链接?
文件的inode只存储该文件的硬链接数量,而不存储硬链接,对吗?
答案1
如果调用给定文件/path/to/file
并且您想要查找当前目录下存在的所有硬链接,请使用:
find . -samefile /path/to/file
以上是在 GNU find 上测试的。虽然-samefile
是不是 POSIX,它还支持Mac OSX 查找和FreeBSD 查找。
文档
来自 GNU man find
:
-samefile name
文件引用与 name 相同的 inode。当 -L 有效时,这可以包括符号链接。
find 和 ls 之间的区别
ls -l
列出文件或目录的硬链接数。对于目录,此数字大于 所显示的结果数find . -samefile
。其原因在GNU 查找手册:
目录通常至少有两个硬链接:其父目录中指定的条目和
.
目录内部的条目。如果一个目录有子目录,那么每个子目录都有一个指向..
其父目录的硬链接。除非在 find 命令行中提及,否则通常不会搜索
.
和目录条目。..
总之,ls -l
将.
和..
目录计为单独的硬链接,但find . -samefile
事实并非如此。