Hard Links

  • Themenstarter Themenstarter Revenant
  • Beginndatum Beginndatum
R

Revenant

Guest
Hi,

wenn ich in Linux einen Hardlink erstelle und die Ursprungsdatei dann lösche, kann ich ja über den Link immer noch auf die Datei zugreifen - und das, obwohl doch beim Erstellen eines solchen Links keine weitere Datei erstellt wird(?). Ändert das System dann das Verzeichnis der Ursprungsdatei automatisch entsprechend des existierenden Links? Wenn ja, nach welchem System geschieht dies (es könnten ja auch mehrere Links existieren).

Wie kann ich in der Konsole Links von richtigen Dateien auseinanderhalten. Ich weiß is ne banale Frage eigentlich, aber bin nirgends fündig geworden.

Und zu letzt: wie kann ich in der Konsole alle Links einer Datei/ bzw. eines Links anzeigen lassen?
 
'ls -l' zeigt dir im Normalfall an wohin Links verweisen. Ich empfehle zur Speicherplatz-Ersparnis einfach Symlinks zu nutzen.
 
Ja, die beiden Dateien haben dann die gleiche I-Node. Das erklärt aber noch nicht, welche der beiden Dateien jetzt der Link und welche die eigentliche Datei ist.

Und die Frage was nach dem Löschen der Datei passiert ist ja auch noch offen.
 
eine Datei, viele Namen :-)

gelöscht wird die Datei erst, wenn alle links ("Namen".. ) auf die Datei gelöscht sind. oder so ähnlich.

lies die man pages zu ln und ls. Besser kann ich es auch nicht erklären.
 
Original von Revenant
Ja, die beiden Dateien haben dann die gleiche I-Node. Das erklärt aber noch nicht, welche der beiden Dateien jetzt der Link und welche die eigentliche Datei ist.
Muss es auch nicht. Hardlinks treffen keine Entscheidung zwischen Originaldatei und "Kopie".

Das Dateisystem ist zweigeteilt, es gibt den Datenteil und eine Verzeichnis mit Zuordnungen. Die eigentliche Datei (und deren ACLs und eine Handvoll Metadaten) liegt irgendwo in ein paar Inodes und dazu existiert ein Verzeichniseintrag. Erstellst du nun einen Hardlink, wird einfach ein weiterer Verzeichniseintrag auf den gleichen Inode gesetzt. Es gibt dann aber keinerlei Unterscheidung zwischen Original und Link.

Bei einem Symlink hingegen wird lediglich ein Pfad gespeichert. Der Link hat dann auch einen eigenen Dateityp (Symlink eben). Das hat einige Vorteile: Symlinks kannst du auch auf Verzeichnisse legen (das geht mit Hardlinks nicht, da man sich sonst unendliche Rekursionen ins Dateisystem bauen könnte), Symlinks funktionieren dateisystems- und partitionsübergreifend, zudem ist Original und Link eindeutig voneinander zu unterscheiden. Allerdings werden auch alle Links aktualisiert, wenn die Originaldatei z.B. bei einem Update überschrieben wird. Wird allerdings ein Hardlink mit einer anderen Datei überschrieben, wird ein neuer Inode angelegt. Die jeweilige Datei bekommt den Verweis auf die neue Datei, die übrigen Hardlinks zeigen aber noch auf die alte.

Doof isses dafür, dass alle Symlinks futsch sind, wenn die Originaldatei mal verschoben wird. Bei Hardlinks wäre das völlig egal, da die eben auf Einträgen im Verzeichnis beruhen und nicht nur auf einer Pfadangabe zu einem Original.

Wenn du nun das Original eines Symlinks löschst, sind natürlich auch die ganzen Links futsch. Bei Hardlinks hingegen wird nur der jeweilige Eintrag im Verzeichnis entfernt. Der Datenteil bleibt unangetastet - auch wenn alle Links gelöscht wurden. In letzterem Fall gäbe es nur keinen Verweis mehr auf den Inode, weswegen der früher oder später überschrieben werden könnte. Prinzipiell löscht rm aber nix, sondern entfernt lediglich Verzeichniseinträge. Genauso schaufelt mv keine Daten durch die Gegend, sondern schreibt einfach nur den Verzeichniseintrag um (solange es auf der gleichen Partition bleibt).
 
Original von LX
Das Dateisystem ist zweigeteilt, es gibt den Datenteil und eine Verzeichnis mit Zuordnungen. Die eigentliche Datei (und deren ACLs und eine Handvoll Metadaten) liegt irgendwo in ein paar Inodes und dazu existiert ein Verzeichniseintrag. Erstellst du nun einen Hardlink, wird einfach ein weiterer Verzeichniseintrag auf den gleichen Inode gesetzt. Es gibt dann aber keinerlei Unterscheidung zwischen Original und Link.

Okay, vielen Dank. Besonders der Satz da oben war wohl mein Verständnisproblem. Falls jemand mal noch ein ähnliches Problem hat: hab auch noch nen guten Link gefunden, in dem der Zusammenhang zwischen INodes/ Dateien / Verzeichnisen und Links erklärt wird: http://r-goetz.de/linux/bg/fs.html
 
Zurück
Oben