Wie erstellt man einen funktionierenden Hard Link in OSX?

8

Ok, das hat mich dazu gebracht, meinen Kopf zu schlagen. Um in OS X einen festen Link in einem Terminalfenster zu erstellen, müssen Sie dies einfach eingeben können ...

ln a.txt b.txt

... und dies sollte eine harte Verbindung von a.txtzu schaffen b.txt. Einfach und unkompliziert.

Wenn ich diese Anweisung ausführe, wird sie im Finder b.txtangezeigt a.txt. a.txtHat aber auch nach der Bearbeitung mit TextEdit b.txtnoch die Originaldaten! Mit anderen Worten, es sieht so aus, als hätte es eine Kopie ausgeführt, keinen Link, weder hart noch auf andere Weise.

Macht für mich keinen verdammten Sinn! Kann mir jemand sagen, was ich hier falsch mache?

Mark A. Donohoe
quelle
Wie bearbeitest du es?
user151019
Ich öffne einfach die Datei in TextEdit und füge Text hinzu. Ich habe nur einen Block immer und immer wieder geschnitten und kopiert. Im Finder hat 'A.txt' jetzt eine andere Größe als 'b.txt', was bedeutet, dass sie tatsächlich auf zwei verschiedene (Daten-) Dateien auf der Festplatte verweisen.
Mark A. Donohoe
Neugierig. Ich habe es gerade mit vi versucht, um die Dateien zu bearbeiten, und der Link blieb bestehen. Mit TextEdit bricht es, wie Sie beobachten.
Borrible
2
Erwägen Sie, Ihre Frage zu bearbeiten, da Ihre Annahmen falsch waren.
Daniel Beck
Die Antworten zeigen deutlich, dass die Hardlinks tatsächlich funktionieren. der Titel schlägt etwas anderes vor. Es ist nur das Dateiersetzungsverhalten von OS X-Anwendungen, das Ihre Hardlinks beseitigt, was ein ganz anderes Problem ist.
Daniel Beck

Antworten:

14

Der Grund für dieses Verhalten ist recht einfach und hängt davon ab, wie Dateien in den meisten Mac OS X-Anwendungen gespeichert werden: Atomisch.

Was passiert ist, dass eine Kopie der Datei in einen temporären Staging-Bereich geschrieben und dann verschoben wird, um die Originaldatei zu ersetzen.

Dies unterbricht ganz natürlich harte Verbindungen.

Williham Totland
quelle
Ja ... scheint jede OS X-App zu sein, die den dokumentbasierten Ansatz von Cocoa verwendet. Das stinkt wirklich! Ich werde sehen, ob ich stattdessen Softlinks (Aliase) verwenden kann. Ich bin mir jedoch nicht sicher, da ich ein DefaultKeyBinding.dict bearbeite, das das System verwendet. Hoffentlich ist es klug genug, dem Link zu folgen. Wir werden sehen!
Mark A. Donohoe
So wahr. Dies ist auch der Grund, warum das Bearbeiten von Unix-y-Systemkonfigurationsdateien in OS X-GUI-Editoren schwierig und viel einfacher durchzuführen ist vi- es reicht nicht aus, Schreibberechtigungen für die Datei festzulegen, Sie benötigen auch den Ordner!
Daniel Beck
Übrigens, Softlinks funktionieren nicht, also bin ich nach dem Speichern an allen Stellen, an denen ich dies benötige, wieder mit dem Erstellen von Skripten für Dateikopien beschäftigt. Stinx!
Mark A. Donohoe
@MarqueIV: Symlinks könnten funktionieren.
Williham Totland
Das ist es was ich meinte. Verstanden den Begriff falsch. Speziell für die Tastenkombinationen von OS X. Es erwartet, dass sich die eigentliche Datei an einem bestimmten Speicherort befindet und funktioniert nicht mit Symlinks. Es funktioniert jedoch mit festen Links. Da der Editor jedoch auf Kakaodokumenten basiert, kann ich die Datei nicht bearbeiten, ohne die Links zu unterbrechen. Es sieht also so aus, als müsste ich manuell kopieren (oder neu einstellen) nach dem Bearbeiten des Dokuments. Nicht optimal, aber nichts, was ein schnelles Skript nicht reparieren kann.
Mark A. Donohoe
3

Wenn angezeigt wird, lesen Sie diesen Eintrag vom Superuser , dass dies eine Funktion von TextEdit ist. Die normale Methode zum Erstellen von Hardlinks ist also korrekt, aber TextEdit verhält sich so, dass dies nicht funktioniert. (Der Link besagt, dass eine neue Datei erstellt und nach dem Bearbeiten über die alte Datei verschoben wird.)

borribel
quelle
Ja ... habe das gerade auf SU gesehen, als du das gepostet hast. Es ist auch nicht nur TextEdit. Es scheinen alle dokumentbasierten Apps zu sein. Stinkt, weil dies bedeutet, dass ich keine dokumentbasierten Tools zum Bearbeiten von fest verknüpften Dateien verwenden kann.
Mark A. Donohoe
Es ist nicht nur TextEdit, sondern alle Cocoa-basierten Anwendungen, die die Dokumentarchitektur verwenden, was die meisten tun.
Mark A. Donohoe
2

Beachten Sie, dass Emacs standardmäßig (in allen Unixen) auch dieses (verblüffende!) Verhalten aufweist, obwohl die Ursache etwas anders ist (dies ist die "sichere" Vorgehensweise in Situationen mit sehr wenig Speicherplatz). Es kann jedoch auf verschiedene Arten konfiguriert werden.

Siehe die Dokumentation für make-backup-files(Verwendung C-h v make-backup-files) und für

  • backup-by-coping
  • backup-by-coping-when-linked
  • backup-by-coping-when-mismatch
  • backup-by-coping-when-privileged-mismatch
dmckee --- Ex-Moderator Kätzchen
quelle