硬链接和复制的文件有什么区别?


22

我的理解是,硬链接包括原始文件的副本,并且我可以删除一个目录中的硬链接文件,而该文件仍将存在于另一个目录中。

如果是这样,我为什么要完全使用硬链接?为什么不只有两个单独的文件?

Answers:


29

如果复制文件,它将复制内容。因此,如果您修改单个文件的内容,则对另一个文件没有影响。

如果进行硬链接,则将创建一个指向相同内容的文件。因此,如果您更改了两个文件中的任何一个的内容,则将在两个文件上看到更改。


3
对于很大的文件,创建硬链接总是比复制原始文件快吗?
Jorge Bucaran

14

硬链接基本上是同一文件的第二个文件名。因此,如果您对文件进行硬链接,则该文件在文件系统上将只有一次,因此仅占用空间一次。因此,如果您想节省磁盘空间,则想使用它


4
感谢您的及时答复。那为什么我要使用硬链接而不是软链接?
Mike B

5
软链接基本上是指向另一个文件的指针。因此,如果删除原始文件,则软链接将仍然存在,但会断开。硬链接是同一文件的2个名称,因此可以单独删除。
彼得

19
彼得的解释很好,但是他没有列出“链接数”。在文件的索引节点(磁盘元数据上)中有一个链接计数。硬链接会增加链接数,而软链接则不会。如果链接数降至零,则允许内核删除文件的内容。
Bruce Ediger

4
我认为Alan对此的回答很重要:更改文件会更改其所有硬链接,而复制后它们的内容也会有所不同。
donothingsuccessly 2013年

6

在UNIX文件系统上,每个文件名实际上都是到磁盘上数据位置的硬链接,称为索引节点。如果创建到现有文件的新硬链接,则磁盘上不会再占用额外的空间,因为它只是指向相同数据的另一个指针。如果通过一个或其他链接编辑数据(或直接编辑inode),则两个文件都会更改。

系统会统计每个索引节点有多少个硬链接。当链接计数为0时,将无法再访问该文件,并且该数据被标记为可以覆盖的安全。因此,给定一个具有2个硬链接的文件,如果删除其中一个链接,则不会删除数据。只有同时删除两者,数据才会消失。

您可以使用-i切换到ls命令的方式查看文件的inode数量。

另一方面,软链接通过文件名指向另一个文件。如果移动或删除原始文件,则链接将断开。


0

关于问题的一部分,“为什么我要完全使用硬链接?”:

硬链接文件(或与此相关的软(符号)链接文件)提供了一种有用的方式,使单个可执行文件可以伪装成不同的用途。

即,可以检查调用代码的名称,以确定哪些选项可用于执行。这样就可以开发和打包一大段代码,并具有略有不同的目的所需的所有共享功能。从用户的角度来看,要运行的“名称”(按名称)的说明将选择和表示形式限制为更易于管理的选项子集。

一个典型的例子是LVM。有一段时间的HP-UX用于各种可执行文件的硬链接的文件(如vgdisplayvgcreatevgextend,等。如今,像Linux一样,这些命令实际上是象征性的(软)链接到lvm可执行文件。


这与问题无关。
rjmunro

1
@rjmunro,我希望与众不同。OP问:“我为什么要使用硬链接?”
JRFerguson

我不明白最后一个例子。曾经有很多可执行文件的硬链接,而现在有一个可执行文件的软链接。这些软链接如何区分?
伊曼纽尔·伯格

@EmanuelBerg我的观点是,无论使用硬链接还是软链接,都是通过调用可执行文件的名称来确定有效执行的选项和参数。
JRFerguson

1
@EmanuelBerg TMTOWTDI
JRFerguson
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.