硬 link 能否指向已删除的文件?

Can a hard link ever point to a deleted file?

我了解 Linux 中硬 link 和软 link 的区别,但我无法理解这个问题:Can a hard link曾经指向已删除的文件吗?为什么或者为什么不?我认为可以,但我不确定。一个解释会很好。谢谢!

考虑一个例子,

 $ touch aFile.txt
 $ ls -i aFile.txt  # -i is the option to look at the inode of a file
 2621520 aFile.txt

 $ ln aFile.txt 2File.txt # Hardlink the file to another one
 $ ls -i 2File.txt
 2621520 2File.txt  # inode is pointing to the same location

 $ rm aFile.txt  # Original file gets deleted
 $ ls 2File.txt
 2File.txt

 $ ls -i 2File.txt # inode survives and still pointing to the same location
 2621520 2File.txt

阅读 here 更多关于 inodes 的内容。

编辑: stat 可以显示文件的硬链接数。您可以使用 -c '%h' 选项来查看:

# after the hardlink to 2File.txt
$ stat -c '%h' aFile.txt 
2

Hard links 指向文件系统中的同一个 inode。我把它看作是一面镜子,如果你写入其中一个硬 links,另一个将显示相同的信息,最终你在同一个 inode 中写入。软link就像在Windows快捷方式中一样,如果删除原文件,软link就会丢失,无法使用。您已经有了包含示例的主要答案,希望您知道。 亲切的问候

硬 link 永远不会指向已删除的文件。硬 link 就像指向实际文件数据的指针。该指针在文件系统术语中称为 "inode"。因此,换句话说,创建硬 link 就是创建另一个索引节点或指向文件的指针。

有一个指向任何东西的指针至少是无用的,令人困惑。我的意思是,当您 ls 时,您会看到那里的文件。但是,如果您在打开它时被告知 "There is no such file",您的反应将是“$#%*!@?”

拥有没有指针的数据也是无用的。因为您无法打开该文件。你失去了对它的控制,但它就在那里。当您的 HDD/SSD 崩溃并且您的文件系统已损坏时,就会发生这种情况。恢复工具可能会找到引用计数为零的文件数据,并在 EXT2、3、4 的情况下将它们放置在 lost+found 目录中。

因此,无论哪种情况,Linux 内核都不允许您创建这样的 links / inode / 指针。