Hard Link funktioniert nicht unter Mac OS X im GUI-Modus

1815
AntonAL

Ich sah mich etwas komisch an, während ich harte Links benutzte. Von Terminal aus erstelle ich eine Textdatei 1.txt und eine feste Verknüpfung "zu dieser Datei".

nano 1.txt mkdir dir ln 1.txt ./dir/ 

Ich überprüfe den resultierenden festen Link und stelle fest, dass sein Inhalt mit dem der Originaldatei übereinstimmt.

less ./dir/1.txt 

Ich ändere die Ausgangsdatei ...

nano 1.txt 

... und sehen Sie, dass sich Änderungen in Hardlink widerspiegelten

less ./dir/1.txt 

Ich ändere den Inhalt von Hardlink (natürlich korrekter - Datei, die mit Hardlink referenziert wird) ...

nano ./dir/1.txt 

... und sehen Sie, dass die Änderungen in der ursprünglichen Datei wiedergegeben werden

less 1.txt 

Bis jetzt läuft alles gut ...

Jetzt schließe ich das Terminal und beginne mit der Wiedergabe der erstellten Dateien (1.txt und ./dir/1.txt) aus dem Finder. Wenn ich diese beiden Dateien mit TextEdit ändere, spiegeln sich die Änderungen nicht in einer anderen Datei wider.

Die harte Verbindung ist jetzt defekt. Was ist los?

5

1 Antwort auf die Frage

14
Alex Martelli

Es geht nicht um die GUI, sondern um TextEditdie Strategie zum Speichern von Änderungen: Sie schreibt nicht in die vorhandene Datei, sondern schreibt zuerst eine neue, und wenn sie fertig ist, entfernt sie die alte und benennt die neue um zu den alten Namen Viele Editoren (Programme, die eine Datei konzeptionell "in Place" ändern), GUI oder nicht, verwenden diese Strategie aus Sicherheitsgründen (Sie verlieren sowohl die neue als auch die alte Version nicht, wenn zu einem sehr unglücklichen Zeitpunkt gerade beim Schreiben ein Absturz auftritt findet statt), aber wie Sie bemerkt haben, "bricht" es harte Links.

Ein Beispiel für ein nicht interaktives, nicht GUI-Editorprogramm mit diesem Verhalten ist perlder -iBefehlszeilenoptionsschalter ("In-Place Edits") ...:

$ 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