删除硬链接会怎样?


Answers:


109

在Unix中,所有普通文件都是硬链接。Unix(和大多数(全部)文件系统)中的硬链接是对所谓的的引用inode。所述inode具有基准计数器,当你有一个“链接”到该文件(其是正常工作方式)对置为1。当你创建第二,第三,第四,等链路时,计数器递增(增加)的每个时间一分。当您删除(rm)链接时,计数器将减一(减少)。如果链接计数器达到0,则文件系统将删除inode并将该空间标记为可使用。

简而言之,只要不删除最后一个链接,该文件就会保留。

Edit:即使删除最后一个链接,该文件也将保留。这是确保文件中包含的数据安全性不可被任何其他进程访问的方法之一。仅当数据具有元数据中给定的0个链接并且未被任何进程使用时,才从文件系统中完全删除数据。

到目前为止,恕我直言是了解硬链接(及其与软链接的区别)的最简单方法。


7
此外,用于删除文件的系统调用为unlink()
mouviciel 2012年

1
这不包括在unlink编辑最后一个链接时打开文件的情况。
cjm 2012年

5
@OrangeDog,不完全是,因为硬链接不能跨文件系统,并且/proc是一个单独的(虚拟)文件系统。
cjm 2012年

2
/ proc还反映了内核的内部数据结构(这是Linux内核以合理定义的格式公开某些数据而又不让所有直接访问内核内存的方式)。因此,说内核跟踪文件已打开并通过procfs公开该信息这一事实更为准确。
CVn

1
是的,unlink()当我开始在1990年代上半年开始在MS-DOS上使用C编程时,调用删除文件一直困扰着我。:)
CVn 2012年

12

测试比我想象的要容易:我创建了一个文本文件,然后将其硬链接。删除硬链接并不会删除它是硬链接到文件,并且是有联系的遗体它是文件。


1
这是真的,但不是完整的图片
xenoterracide 2012年

3
关键是创建文本文件还会添加一个硬链接。在* NIX文件系统中,所有文件(节点)必须至少一次硬链接到目录结构中。
OrangeDog 2012年

0

磁盘中的所有文件实际上都是指向驱动器上实际数据的指针。 在此处输入图片说明

当您为该文件进行硬链接时,硬链接文件将指向原始文件所指向的相同数据。

在此处输入图片说明

如本例所示,a.txt指向驱动器中文件的数据(字节),当创建硬链接b.txt时,它将指向a.txt指向的内容。

因此删除其中一个不会影响彼此分离的另一个。

但是,同时删除它们时,系统将看到磁盘上的数据没有指向它的文件,因此系统会将其视为可用空间,并在需要时将其覆盖。


2
我认为重要的是要澄清与之FILE "A.txt"相同的地方LINK "B.txt",尤其是当您称一个a FILE为另一个a时LINK。链接实际上是黑色箭头。
roaima

是的,我认为尚不清楚b.txt是一个硬链接文件...
ZOLDIK
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.