删除硬链接会发生什么?

tru*_*ktr 80 filesystems hard-link files

如果你做rm myFilewheremyFile是硬链接,会发生什么?

xen*_*ide 138

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

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

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

这个恕我直言是迄今为止理解硬链接(以及它与软链接的区别)的最简单方法。

  • 此外,删除文件的系统调用是`unlink()`。 (9认同)
  • @OrangeDog,不完全是,因为硬链接不能跨文件系统,而`/proc` 是一个单独的(虚拟)文件系统。 (5认同)
  • /proc 还反映了内核的内部数据结构(这是 Linux 内核以合理定义的格式公开某些数据的一种方式,而无需让所有和杂项直接访问内核内存)。因此,更准确地说,内核会跟踪文件已打开的事实,并通过 procfs 公开该信息。 (2认同)

tru*_*ktr 16

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

  • 关键是创建文本文件还添加了硬链接。在 *NIX 文件系统中,所有文件(inode)必须至少硬链接一次到目录结构中。 (4认同)
  • 这是真的,但不是完整的图片 (2认同)

小智 5

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

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

在此处输入图片说明

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

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

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

  • 我认为重要的是要澄清 `FILE "A.txt"` 与 `LINK "B.txt"` 相同,特别是因为你将一个称为 `FILE` 而另一个称为 `LINK`。链接实际上是黑色箭头。 (4认同)