Mac OS X 中 GUI 模式下硬链接不起作用

Mac OS X 中 GUI 模式下硬链接不起作用

使用硬链接时,我遇到了一些奇怪的行为。从终端,我创建了一个文本文件 1.txt 和一个“到此文件”的硬链接

nano 1.txt
mkdir dir
ln 1.txt ./dir/

我检查生成的硬链接,发现其内容与原始文件相同。

less ./dir/1.txt

我改变了初始文件...

nano 1.txt

...并且看到,变化反映在硬链接中

less ./dir/1.txt

我更改了硬链接的内容(当然更正确 - 文件,通过硬链接引用)...

nano ./dir/1.txt

...并看到更改反映在初始文件中

less 1.txt

到目前为止,一切进展顺利......

现在,我关闭终端并开始从 Finder 中播放创建的文件(1.txt 和 ./dir/1.txt)。当我使用 TextEdit 更改这两个文件时,更改不会反映在另一个文件中。

硬链接现已断开。发生了什么事?

答案1

这与 GUI 无关,而是与 的TextEdit保存更改策略有关:它不会在现有文件上就地写入,而是先写入一个新文件,完成后删除旧文件并将新文件重命名为旧文件的名称。许多编辑器(概念上“就地”更改文件的程序),无论是否使用 GUI,都出于安全目的使用此策略(如果在写入过程中发生非常不幸的崩溃,您不会同时丢失新版本和旧版本),但正如您所注意到的,它会“破坏”硬链接。

具有此行为的非交互式、非 GUI 编辑器程序的一个例子是perl使用-i(“就地编辑”)命令行选项开关...:

$ touch za.txt
$ ln za.txt zo.txt
$ echo ciao >za.txt
$ cat zo.txt 
ciao
$ perl -i -p -e 's/a/b/' zo.txt
$ cat zo.txt
cibo
$ cat za.txt
ciao

相关内容