Linux中的硬链接是什么?


9

我四处搜寻,并试图了解硬链接和符号链接(软链接)之间的区别。

我发现此链接非常有用。但是我还是不太清楚。我知道软链接不是原始文件的副本,但是硬链接是不是副本?

Answers:


15

要使用邮件传递的类比,符号链接类似于转发地址...当某人尝试打开符号链接时,它会打开存储在其中的“文件”(虽然不是字面的文件),然后看到它而是应查看具有不同名称的文件,因此它将打开另一个文件。

硬链接更像是在同一个地方有两个地址。(当然,这在物理世界中实际上是不可能的)。当某些东西试图读取文件名(地址)时,它们将获得相同的物理文件(位置)。

因此,硬链接不是副本,因为文件仅存储一次(但具有多个名称)。但是它的行为非常像副本,因为您可以从两个文件名访问相同的信息。


+1是一个非常不错的类比,当我尝试着解决这个问题时,这对于我来说可以简化事情。
John Gardeniers

1
+1,但有两个小细节:1)现实世界中同一地点可能有多个地址,只是不常见。2)硬链接和副本之间最重要的区别可能是,如果有/foo/bar,则更改/foo也是硬链接/bar(因为它们是同一文件的两个名称)也会改变,但如果它们是硬链接,则更改也不会改变副本(因为它们是两个完全独立的文件)。
Dave Sherohman 2011年


3

进行硬链接时,意味着同一文件显示在两个不同的位置。文件实际上只是对磁盘上一组数据块的引用,因此硬链接会添加另一个引用。文件很少真正被删除;引用仅被删除,因此无法访问数据。因此,当您删除作为硬链接创建的文件时,其他原始文件将保留,反之亦然。

另一方面,符号链接是访问具有特定名称的文件的方向。它告诉所有程序“如果要使用此文件,它就在那儿”。这就是为什么如果删除符号链接的目标,符号链接会中断的原因。并且,如果删除链接,则目标不受影响。


2

* nix系统中的文件有两个部分。一个是数据部分,另一个是inode。索引节点存储元信息(与数据相关的信息,例如存储在HDD中的位置)。硬链接将创建此inode的精确副本。而sym链接会创建一个指向实际inode的inode的inode。因此,硬链接中的inode数据与目标相同,但符号链接中的数据不同。因此,总而言之,符号链接和硬链接的区别在于索引节点数据而不是文件数据的内容。这是我对符号链接和硬链接之间区别的理解。我一开始很难理解这一点,因为这更多的是开发人员的事情,而我不是开发人员。知识渊博的人,如果我错了,请纠正我。


3
* nix中的“目录”是文件名和索引节点编号的列表。硬链接是两个具有相同inode编号的目录条目,因此是指完全相同的inode,而不是inode的副本。符号链接是一个目录条目,它指向另一个目录条目(按名称),而不指向任何特定的inode。(好吧,它实际上有一个
索引
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.