Was ist eine harte Verbindung unter Linux?

9

Ich habe mich umgesehen und versuche den Unterschied zwischen einem harten Link und einem symbolischen Link (Soft Link) zu verstehen.

Ich fand diesen Link sehr nützlich. Aber ich bin immer noch nicht sehr klar. Ich verstehe, dass Softlink keine Kopie der Originaldatei ist, aber ist ein Hardlink eine Kopie oder nicht?

icn
quelle

Antworten:

15

Um eine Analogie aus der E-Mail-Zustellung zu verwenden, ist ein symbolischer Link so etwas wie eine Weiterleitungsadresse. Wenn etwas versucht, einen symbolischen Link zu öffnen, öffnet es die dort gespeicherte "Datei" (jedoch nicht wörtlich eine Datei) und sieht dies sollte stattdessen eine Datei mit einem anderen Namen betrachten, damit stattdessen die andere Datei geöffnet wird.

Ein fester Link ist eher so, als hätten Sie zwei Adressen für denselben Ort. (Natürlich ist dies in der physischen Welt nicht wirklich möglich). Wenn etwas versucht, einen der Dateinamen (Adressen) zu lesen, erhalten sie dieselbe physische Datei (Speicherort).

Ein fester Link ist also keine Kopie, da die Datei nur einmal gespeichert wird (jedoch mit mehreren Namen). Es verhält sich jedoch sehr ähnlich wie eine Kopie, da Sie über zwei Dateinamen auf dieselben Informationen zugreifen können.

Schwach
quelle
+1 für eine sehr schöne Analogie, die die Dinge für mich vereinfacht hätte, als ich versucht habe, mich darum zu kümmern.
John Gardeniers
1
+1, aber zwei kleine Details: 1) Es ist möglich, mehrere Adressen für denselben Ort in der realen Welt zu haben, nur nicht üblich. 2) Der vielleicht wichtigste Unterschied zwischen einem Hardlink und einer Kopie besteht darin, dass sich das Ändern , wenn Sie /foound haben /bar, /fooauch ändert, /barwenn es sich um Hardlinks handelt (weil es sich um zwei Namen für dieselbe Datei handelt), aber nicht, wenn dies der Fall ist Kopien (weil es sich um zwei völlig unabhängige Dateien handelt).
Dave Sherohman
3

Nein. Ein (zweiter und alle nachfolgenden) Hardlink zu einer Datei ist ein Zeiger auf dieselben Inodes auf der Festplatte.

Ignacio Vazquez-Abrams
quelle
3

Wenn Sie einen festen Link erstellen, bedeutet dies, dass dieselbe Datei an zwei verschiedenen Stellen angezeigt wird. Eine Datei ist eigentlich nur eine Referenz auf eine Reihe von Datenblöcken auf Datenträgern, daher fügt ein fester Link eine weitere Referenz hinzu. Dateien werden selten wirklich gelöscht. Die Referenzen werden nur entfernt, sodass kein Zugriff auf die Daten möglich ist. Wenn Sie eine Datei löschen, die Sie als Hardlink erstellt haben, bleibt die andere Originaldatei erhalten und umgekehrt.

Andererseits ist ein Symlink eine Anweisung, auf eine Datei mit einem bestimmten Namen zuzugreifen. Es sagt allen Programmen: "Wenn Sie diese Datei verwenden möchten, ist sie dort drüben." Aus diesem Grund wird der Symlink unterbrochen, wenn Sie das Ziel des Symlinks löschen. Und wenn Sie den Link löschen, ist das Ziel nicht betroffen.

Michael Lowman
quelle
2

Eine Datei im * nix-System besteht aus zwei Teilen. Zum einen ist der Datenteil und zum anderen inode. Inode speichert Metainformationen (Informationen, die für die Daten relevant sind, z. B. den Ort, an dem sie auf der Festplatte gespeichert sind). Durch den Hardlink wird eine exakte Kopie dieses Inodes erstellt. Während sym link einen Inode erstellt, der auf den Inode des tatsächlichen Inodes verweist. Inode-Daten in Hardlink sind also dieselben wie Zieldaten, jedoch unterschiedliche Daten in Sym-Links. Um es kurz zu machen: Sym-Links und Hard-Links unterscheiden sich durch den Inhalt der Inode-Daten, nicht durch die Dateidaten. Dies ist mein Verständnis des Unterschieds zwischen sym link und hard link. Ich hatte es anfangs schwer, das zu verstehen, da dies etwas mehr Entwicklersache ist und ich kein Entwickler bin. Oh sachkundige, bitte korrigieren Sie mich, wenn ich falsch liege.

Bagavadhar
quelle
3
Ein "Verzeichnis" in * nix ist eine Liste von Dateinamen und Inode-Nummern. Hardlinks sind zwei Verzeichniseinträge, die dieselbe Inode-Nummer haben und sich daher auf genau denselben Inode beziehen, nicht auf Kopien des Inodes. Ein Symlink ist ein Verzeichniseintrag, der auf einen anderen Verzeichniseintrag (nach Namen) verweist, nicht auf einen bestimmten Inode. (Ok, es hat tatsächlich einen Inode, aber dieser Inode bezieht sich auf den Verzeichniseintrag, nicht auf
Dateidaten