如何获取指向同一数据的所有硬链接?

如何获取指向同一数据的所有硬链接?

有多个指向同一文件的硬链接。
例如,如何通过一个文件(硬链接)让其他文件指向同一数据?
没有真正的任务。只是有趣。可能有用。

答案1

大多数文件系统不维护文件(或更准确地说,索引节点)硬链接所在的目录。

因此,您必须扫描整个文件系统才能找到所有硬链接。您可以使用 来执行此操作find -inum <inode number>

例子:

创建带链接的文件:

$ ~> mkdir linktest
$ ~> cd linktest/
$ ~/linktest> touch file1
$ ~/linktest> ln file1 file2

检查 inode:

$ ~/linktest> stat file*
  File: file1
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d      Inode: 37          Links: 2
[...]
  File: file2
  Size: 0               Blocks: 0          IO Block: 4096   regular empty file
Device: 805h/2053d      Inode: 37          Links: 2
[...]

如您所见,两个文件条目具有相同的 inode(37) - 因为它们是指向相同数据的硬链接。

按 inode 编号查找:

$ ~/linktest> find -inum 37
./file1
./file2

这是在 Linux 上,但它在 *BSD 上应该也能同样工作。

答案2

find有一个选项-samefile

find / -xdev -samefile /myfile

/用当前文件系统的根目录替换myfile– 例如,如果您使用/home/sergey/myfile并且您有/home一个单独的文件系统,那么使用find /home

相关内容