在 OS X 上,保存会破坏硬链接

在 OS X 上,保存会破坏硬链接

我使用的是 OS X 10.10.5,我发现硬链接文件存在一个奇怪的问题。当我更新其中一个链接文件并保存更改时,另一个链接文件变为空白——一个零字节文件。当更新任一链接文件时都会发生这种情况。经调查,保存文件的 inode 似乎发生了变化,即在保存之前,两个文件的 inode 都是 1777192,保存后更新的文件的 inode 为 1777268,而链接文件仍为 1777192。

这是 OS X 的正常行为吗?更新文件时我该怎么做才能保持链接?我使用硬链接将某些文件保存在 rsync 到外部服务器的文件夹中,因此我需要能够更新这些文件并保持链接。符号链接在被覆盖时会中断,因此我无法将它们用于此目的。

如果相关的话,这台计算机在校园网络上有一个联网帐户。

编辑:有问题的文件是 .bib 文件,当我使用 TeXShop 编辑并保存它时,就会出现此行为。我使用 vim 进行了测试,发现这不会重现失败。但是,使用内置的 TextEdit 应用程序会重现此错误。

答案1

我刚刚开始学习 Linux 命令,遇到了同样的错误。以下是我所做的

  1. 创建了一个文件test.rtf
  2. ln test.rtf hardLinkedTest.rtf
  3. ln -s test.rtf softLinkedTest.rtf

当我编辑时,hardLinkedTest.rtf没有影响,test.rtf但更改在我编辑时有所反映softLinkedTest.rtf

我发现,硬链接文件被写入临时暂存区,该区域会替换原始文件。因此,为这两个文件创建的链接已损坏。这很明显,因为两个文件inode的数字不同。看来 MacOS 以ln某种方式破坏了该命令。

这方面仍然存在灰色地带,我正在寻找更多细节。

相关内容