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

Ant*_*nAL 5 hardlink textedit macos

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

nano 1.txt
mkdir dir
ln 1.txt ./dir/
Run Code Online (Sandbox Code Playgroud)

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

less ./dir/1.txt
Run Code Online (Sandbox Code Playgroud)

我更改了初始文件...

nano 1.txt
Run Code Online (Sandbox Code Playgroud)

...你看,这些变化反映在硬链接中

less ./dir/1.txt
Run Code Online (Sandbox Code Playgroud)

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

nano ./dir/1.txt
Run Code Online (Sandbox Code Playgroud)

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

less 1.txt
Run Code Online (Sandbox Code Playgroud)

直到现在,一切顺利……

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

硬链接现在已断开。这是怎么回事?

Ale*_*lli 15

这不是关于 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
Run Code Online (Sandbox Code Playgroud)