Was ist der Unterschied zwischen einem weichen (symbolischen) Link und einem harten Link?

59

Ich habe gehört, dass Sie jetzt auch in Vista Softlinks erstellen können . Was ist also der Unterschied zwischen einer weichen (symbolischen) und einer harten Verbindung unter UNIX / Linux / Vista?

Gibt es Vorteile, wenn man eins gegenüber dem anderen verwendet? Oder dienen sie nur zwei unterschiedlichen Zwecken?

Aaron K
quelle
In der Praxis lautet die Antwort, dass Sie fast immer einen symbolischen Link verwenden möchten. Ich verstehe, dass harte Verknüpfungen hauptsächlich dazu dienen, Speicherplatz zu sparen, insbesondere bei Snapshots und inkrementellen Sicherungen, bei denen aufeinanderfolgende Snapshots viele identische Dateien enthalten, die sich in Zukunft wahrscheinlich nicht mehr ändern werden.
Ryan Thompson
Sollte dies auf Unix & Linux migriert werden? Siehe unix.stackexchange.com/questions/9575/…
ripper234
2
Nein, es sollte nicht migriert werden. Da die ursprüngliche Frage nicht nur für Unix bestimmt ist, unterstützt Windows Hard- und Softlinks.
Richard West
1
Einige Anwendungen brechen (und manchmal auch schlecht), wenn Sie einen Softlink verwenden - insbesondere für Verzeichnisse: Der Softlink wird dereferenziert, und wenn er und die Anwendung verglichen werden, sagen wir /var/opt/log/appname(seine Konfiguration) mit dem dereferenzierten Wert, /apps/appname/logswird er sich beschweren Das ist kein Spiel. Das Update für dieses mount --bindProblem besteht darin, a (unter Linux) zu verwenden, um das ursprüngliche Verzeichnis am neuen Speicherort erneut bereitzustellen.
Warren
1
Nur um ein paar Punkte zu klären, die in anderen Antworten enthalten sind ... Windows kann Hardlinks erstellen (obwohl ich glaube, dass sie sich etwas anders verhalten als in Unix). Schauen Sie sich den Befehl mklink und das Argument h an. (Wenn Sie mklink in die Befehlszeile eingeben, wird die Hilfedatei mit der grundlegenden Syntax

Antworten:

68

Ein fester Link hat traditionell die gleichen Dateisystemstrukturen (inode in unixspeak), während ein weicher Link eine Pfadnamenumleitung ist.

  • Hardlinks müssen sich im selben Dateisystem befinden, Softlinks können Dateisysteme überqueren.
  • Fest verknüpfte Dateien bleiben verknüpft, auch wenn Sie eine dieser Dateien verschieben (es sei denn, Sie verschieben eine Datei in ein anderes Dateisystem, wodurch der Mechanismus zum Kopieren und Löschen ausgelöst wird). Softlink-Dateien brechen ab, wenn Sie das Ziel (Original) verschieben, und manchmal, wenn Sie den Link verschieben (Haben Sie einen absoluten oder relativen Pfad verwendet? Ist dieser noch gültig?).
  • Hardlinked-Dateien sind gleich, während das Original speziell für Softlinks ist und das Löschen des Originals die Daten löscht. Die Daten werden erst gelöscht, wenn alle Hardlinks gelöscht wurden.
  • Softlinks können auf jedes Ziel verweisen , aber die meisten Betriebssysteme / Dateisysteme verbieten das Verknüpfen von Verzeichnissen, um Zyklen im Dateisystemdiagramm zu verhindern (mit Ausnahme der Einträge .und ..in Unix-Verzeichnissen, bei denen es sich um Hardlinks handelt).
  • Softlinks erfordern möglicherweise spezielle Unterstützung von Tools für das Dateisystem-Walking. Lesen Sie auf Readlink (2) .

(Einige Details von mat1t . Danke.)

dmckee
quelle
Schöne Zusammenfassung. Jeder Linux-Benutzer sollte dies wissen (obwohl harte Links sehr selten sind).
Artem Russakovskii
Die Antwort von dmckee enthält ziemlich genaue Angaben zur Semantik. Das einzige Detail, das ich hinzufügen möchte, ist eine Erklärung dessen, was auf einer höheren Ebene geschieht: Ein Softlink ist eine Datei für sich, während ein Hardlink ein Verzeichniseintrag ist, der auf vorhandene Daten verweist. Wikipedia hat mehr Details über harte und weiche Links.
Mr. Shiny und New 安 安
schöne Zusammenfassung, sehr nützlich
Razique
9
Es sollte auch beachtet werden, dass Hardlinks Berechtigungen sowie Eigentumsinformationen gemeinsam nutzen.
Corey S.
6
Bitte fügen Sie hinzu, dass automatisch 2 Hardlinks mit dem Namen erstellt werden. und jedes Mal, wenn Sie einen Ordner erstellen. Unter Linux sind dies die einzigen gültigen Hardlinks zu einem Ordner.
Mircea Vutcovici
10

Die Zusammenfassung ist, dass ein symbolischer / kurzer Link als Verknüpfung zum Speicherort der ersten Datei fungiert, wohingegen ein fester Link eine Verknüpfung zu der Datei auf der Festplatte ist.

Wenn Sie das Ziel eines Softlinks löschen, funktioniert der Softlink nicht mehr. Wenn Sie jedoch eine Kopie eines Hardlinks löschen, bleibt die Datei auf der Festplatte, bis alle Hardlinks entfernt wurden. Tatsächlich sind alle Dateinamen Hardlinks zu der Datei auf der Festplatte.

Es gibt auch bestimmte Einschränkungen, z. B. glaube ich nicht, dass Sie feste Verknüpfungen von Ordnern erstellen können, aber Sie können weiche Verknüpfungen von Ordnern erstellen. Softlinks können auch auf Dateien / Ordner auf verschiedenen Laufwerken und Partitionen verweisen, Hardlinks jedoch nicht.

Matthew Steeples
quelle
-1

Das MS Windows-System verwendet immer Softlinks (Verknüpfungen). Das heißt, der Link fungiert einfach als Verknüpfung, die auf den Speicherort der Datei verweist. Wenn der Speicherort des Originals verschoben wird, wird die Verknüpfung unterbrochen. Darüber hinaus hat das, was Sie mit der Verknüpfung tun (z. B. Berechtigungen ändern oder den Namen der Verknüpfung ändern), keine Auswirkungen auf die eigentliche Datei.

Die Frage begann also mit einer falschen Annahme. Ja, Vista verwendet Softlinks, aber es ist nicht neu, was eine MS-Verknüpfung ist.

Reginald Kincaid
quelle
3
Nein, NTFS unterstützt Hardlinks und hat seit NTFS 3.1 (die aktuelle Version seit XP / 2003).
Chris S