Жесткая ссылка не работает под Mac OS X в режиме GUI

5

Я столкнулся с немного странным поведением при использовании жестких ссылок. Из терминала я создаю текстовый файл 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

До сих пор все идет хорошо ...

Теперь я закрываю терминал и начинаю играть с созданными файлами (1.txt и ./dir/1.txt) из Finder. Когда я изменяю эти два файла с помощью TextEdit, изменения не отражаются в другом файле.

Жесткая ссылка теперь не работает. В чем дело?

AntonAL
источник

Ответы:

14

Речь идет не о графическом интерфейсе, а о TextEditстратегии сохранения изменений: он не записывает на месте существующий файл, а сначала записывает новый, а после завершения удаляет старый и переименовывает новый. на старые имена. Многие редакторы (программы, которые концептуально изменяют файл «на месте»), с графическим интерфейсом или нет, используют эту стратегию в целях безопасности (вы не потеряете ни новую, ни старую версии, если произойдет сбой в очень неудачный момент, когда происходит запись имеет место), но, как вы заметили, он «ломает» жесткие ссылки.

Одним из примеров неинтерактивной, без графического интерфейса редактора программы с этим поведением 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
Алекс Мартелли
источник