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

1747
AntonAL

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

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

5

1 ответ на вопрос

14
Alex Martelli

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