Жесткая ссылка не работает под 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

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

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

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

1 ответ

Решение

Речь идет не о графическом интерфейсе, а конкретно о 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
Другие вопросы по тегам