Powiedzmy, że mam dwa pliki file1
i file2
:
$ echo aaa >file1
$ ln file1 file2
Następnie sprawdzam, czy i-węzły są takie same:
$ ls -i
18749779 file1 18749779 file2
co pokazuje, że dwa pliki są w rzeczywistości takie same. Teraz edytuję file1
w Emacsie i dodaję wiersz z na przykład tekstem bbb
, zapisuję go i wychodzę z Emacsa.
Teraz dostaję:
$ ls -i
18749781 file1 18749779 file2
$ cat file1
aaa
bbb
$ cat file2
aaa
Więc twardy link jest zepsuty. Pamiętaj, że tak się nie dzieje, gdy edytuję plik vim
lub po prostu robię echo bbb >>file1
...
Jak mogę zapobiec zerwaniu przez Emacsa twardych linków?
Aktualizacja:
Zauważ, że mam
(require 'backup-dir)
(setq bkup-backup-directory-info
'((t "~/.emacs-backups/" ok-create full-path )))
w moim ~/.emacs
pliku init. Jeśli zamiast tego file1
dokonam edycji emacs -Q file1
, otrzymam plik wywołany file1~
w bieżącym katalogu, który prowadzi do file2
(ma ten sam i-węzeł), ale file1~
nie został zmodyfikowany (więc jest identyczny ze starym file1
). Nie tego pragnę. Chciałbym zarówno file1
i file2
być tym samym plikiem, i obejmują zaktualizowaną zawartość plików ..
(setq backup-by-copying t)
do mojego~/.emacs
pliku init, to działa zgodnie z potrzebami.