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

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

1 ответ1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .