我了解Linux中硬链接和软链接的区别,但我不太理解一个问题:硬链接是否可以指向已删除的文件?为什么?我认为它是可以的,但不确定。希望能给出解释。谢谢!
考虑一个例子,
$ 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
编辑:
stat
可以显示文件的硬链接数。您可以使用 -c '%h'
选项查看:
# after the hardlink to 2File.txt
$ stat -c '%h' aFile.txt
2
stat aFile.txt
和stat -c 2File.txt
以显示更多与文件存储相关的信息(尤其是“链接:2”),或者使用stat -c%h aFile.txt
来计算它的硬链接数。这样回答就会更加完美! - Allaninode
的重要性/功能。 - iamauser硬链接指向文件系统中相同的inode。我把它看作是一个镜像,如果你在其中一个硬链接中写入,另一个链接将显示相同的信息,在一天结束时,你实际上是在写入相同的inode。软链接类似于Windows中的快捷方式,如果原始文件被删除,则软链接丢失并且不可用。您已经有了包含示例的主答案,希望现在你理解了。
硬链接永远不会指向已删除的文件。硬链接就像指向实际文件数据的指针。这个指针在文件系统术语中称为“inode”。换句话说,创建一个硬链接就是创建另一个inode或文件的指针。
拥有指向空的指针至少是没用的,令人困惑的。我的意思是,当你使用ls
命令查看文件时,你会在那里看到文件。但如果你打开它时被告知“没有这样的文件”,你的反应可能是"$#%*!@?"
没有指针的数据也是无用的。因为你没有办法打开文件。你失去了对它的控制,但它确实存在。当您的硬盘/固态硬盘崩溃并且文件系统损坏时,就会发生这种情况。恢复工具可能会找到引用计数为零的文件数据,并将它们放置在EXT2、3、4的lost+found
目录中。
因此,在任一情况下,Linux内核都不允许您创建这样的链接/ inodes /指针。
unlink
。 - Ben Voigt