Wann würden Sie eins übereinander verwenden?
Wann würden Sie eins übereinander verwenden?
Antworten:
Die unterschiedliche Semantik zwischen harten und weichen Links macht sie für verschiedene Dinge geeignet.
Harte Links:
Symbolische Links (Softlinks)
ls -l
zeigt, auf welchen Pfad ein Symlink verweist)unlink(2)
. "normale" Dateien (mit einer Linkanzahl von 1) sind nur ein Sonderfall. Wenn es hilft, können Sie sich Inodes als Objekte und Namen als ref-counted Zeiger vorstellen (die Linkanzahl des Inodes ist die Referenzanzahl).
..
und .
.
Der Sinn beider Arten von Links ist es, eine Möglichkeit zu bieten, eine Datei gleichzeitig an zwei Orten anzuzeigen. Dies hat viele Verwendungszwecke. 9 Mal von 10 möchten Sie symbolische Links verwenden.
Symbolische Links oder "Symlinks" funktionieren ähnlich wie Windows-Verknüpfungen. Der Inhalt eines Symlinks ist ein Zeiger auf den tatsächlichen Speicherort der Datei / des Verzeichnisses. Wenn Sie die echte Datei löschen, wird der Symlink "baumeln" und funktioniert nicht mehr. Durch das Löschen des Symlinks wird die eigentliche Datei nicht gelöscht. Sie können so viele Symlinks zu einer einzelnen Datei (oder sogar zu anderen Symlinks) haben, wie Sie möchten.
Im Gegensatz zu Windows funktionieren sie jedoch auf Dateisystemebene, nicht auf Shell- oder Anwendungsebene, sodass so ziemlich jede Anwendung den Symlinks erwartungsgemäß "folgt". ls -al
kann verwendet werden, um schnell zu sehen, wohin Symlinks verweisen.
Hardlinks funktionieren auch auf einer niedrigeren Ebene. Ein Hardlink ist ein tatsächlicher physischer Verzeichniseintrag der Datei auf Dateisystemebene. Technisch gesehen handelt es sich bei einem Verzeichniseintrag um einen Hardlink. Daher enthält jede Datei mindestens einen Hardlink in einem Verzeichnis. Hardlinks sind nicht von der Datei getrennt, auf die sie verweisen. Wenn eine Datei mehrere Hardlinks in verschiedenen Verzeichnissen enthält, rm
wird die Datei durch Löschen des Hardlinks mit Hilfsprogrammen wie nicht wirklich gelöscht, bis alle Hardlinks verschwunden sind.
Ich kann mir keine Situation vorstellen, in der die Verwendung von Hardlinks üblich ist oder sogar erforderlich ist, es sei denn, Sie möchten absichtlich verhindern, dass Dateien gelöscht werden, oder Sie führen eine seltsame Arbeit auf niedriger Ebene mit Partitionen oder anderen Dingen im Zusammenhang mit dem Dateisystem aus. BEARBEITEN: Es gibt gute Ideen in den anderen Antworten auf diese Frage!
ls -l
ist genug um zu sehen was durch einen symlink verlinkt wird, der a
steht für --all
, siehe manpage. Und selbst wenn Symlinks im Dateisystem funktionieren, gibt es alternative Funktionen, um symbolische Links als Dateien zu verwenden, anstatt zu folgen.
ln -s /home 1; ls -l 1
zeigt dies, dass der Symlink 1 5 Bytes lang ist, während ln -s /usr/share/ 2; ls -l 2
2 11 Bytes lang ist.
Feste Verknüpfungen sind sehr nützlich für festplattenbasierte Sicherungsmechanismen, da Sie für jede Sicherung einen vollständigen Verzeichnisbaum erstellen können, während Sie den Speicherplatz für Dateien freigeben, die sich nicht geändert haben Eine bestimmte Version verschwindet, weil das Backup aus Platzgründen abgelaufen / entfernt wurde. Der verwendete Platz wird automatisch zurückgefordert. Einige E-Mail-Clients verwenden es aus demselben Grund auch für Nachrichten, die in mehreren Ordnern abgelegt werden.
Hardlinks sind lediglich Verweise auf denselben Speicherplatz, dh, Sie können keine Hardlinks in einem anderen Dateisystem erstellen.
Symlinks sind Dateien, die andere Dateien verknüpfen (als Windows-Verknüpfungen), möglicherweise im selben Dateisystem, möglicherweise jedoch nicht.
EDIT: Ich werde noch etwas erklären. Jede Datei, die existiert, hat mindestens 1 festen Link. Hardlinks sind der Weg, um auf den Inhalt eines Inodes des Dateisystems zuzugreifen. Sie können die Inode-Nummer einer Datei mit ls -i
und die Anzahl der Hardlinks mit stat
wie folgt in diesem Beispiel erhalten:
$ stat plantilla-disenos.odt
File: «plantilla-disenos.odt»
Size: 12367 Blocks: 32 IO Block: 4096 fichero regular
Device: 803h/2051d Inode: 319875 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1000/ d4rio) Gid: ( 1000/ d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300
Vielen Dank an @geekosaur für diesen Hinweis:
Der Kernel muss die Übersetzung von Pfadname zu Inode (über den Verzeichnisbaum) neu starten, um Symlinks zu erweitern, während harte Links alle denselben Inode verwenden. (Dies wird häufig als namei bezeichnet, wie aus dem Namen der Kernelfunktion hervorgeht, die dies in traditionellem Unix durchgeführt hat.)
und dies (bearbeitet):
Feste Verknüpfungen sind sehr nützlich für festplattenbasierte inkrementelle Sicherungsmechanismen wie z. B. Time Machine von Apple , da Sie für jede Sicherung einen vollständigen Verzeichnisbaum erstellen können, während Sie den Speicherplatz für Dateien freigeben, die sich nicht geändert haben Wenn der letzte Verweis auf eine bestimmte Version verschwindet, weil das Backup aus Platzgründen abgelaufen / entfernt wurde, wird der verwendete Platz automatisch zurückgefordert. Einige E-Mail-Clients verwenden es aus demselben Grund auch für Nachrichten, die in mehreren Ordnern abgelegt werden.
Prost
namei
stat
fehlschlagen.
Ein Softlink verweist auf einen anderen Pfadnamen. Dieser Pfadname kann tatsächlich existieren oder auch nicht. Der Pfad wird erst gesucht, wenn Sie auf den Symlink zugreifen. Wenn der Pfad beim Versuch, darauf zuzugreifen, nicht existiert, ist der Symlink defekt.
Mit einem festen Link haben Sie eine Datei mit mehreren Namen. Man kann nicht sagen, dass eine davon die "echte" Datei ist und die anderen nur ein Link dazu sind. Sie sind alle gleich. Es gibt keine kaputten harten Links wie kaputte Symlinks.
Feste Links funktionieren nur innerhalb eines einzelnen Dateisystems. Wenn Sie eine Verknüpfung zu einer Datei in einem anderen Dateisystem (z. B. einer anderen Partition oder einer Netzwerkfreigabe) herstellen möchten, müssen Sie eine weiche Verknüpfung verwenden.
Ein weiterer großer Unterschied ist, was passiert, wenn Sie eine verknüpfte Datei löschen. Wenn Sie eine von zwei fest verknüpften Dateien löschen und dann eine neue Datei mit demselben Namen erstellen, haben Sie zwei separate Dateien (die Verknüpfung ist nicht mehr vorhanden). Wenn Sie das Ziel eines Symlinks löschen und eine neue Datei mit demselben Namen erstellen, verweist der Link auf die neue Datei.
"harte" Links teilen sich den gleichen Inode
$ touch foo
$ ln foo foolink # Creates a hard link
$ ls -li foo foolink
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foo
54996 -rw-r--r-- 2 bsd users 0 2011-12-11 09:06 foolink
Wenn ich entweder foo oder foolink bearbeite, gibt es nur eine Datei und diese wird aktualisiert. Wenn ich nur einen der Dateinamen entferne, bleiben der Inode und die Daten erhalten, und der Foolink überlebt.
$ rm foo
$ ls -li foo foolink
ls: cannot access foo: No such file or directory
54996 -rw-r--r-- 1 bsd users 0 2011-12-11 09:06 foolink
Wenn ich dasselbe erstellen würde, jedoch mit einem "weichen" oder symbolischen Link, dann gäbe es eine Datei, einen Inode und eine neue Datei mit einem eigenen Inode, der auf den ersten verweist.
$ touch foo
$ ln -s foo foolink # Create symlink
$ ls -li foo foolink
55029 -rw-r--r-- 1 bsd users 0 2011-12-11 09:11 foo
55033 lrwxrwxrwx 1 bsd users 3 2011-12-11 09:11 foolink -> foo
Wenn ich entweder foo oder foolink bearbeite, gibt es immer noch nur eine Datei und sie wird aktualisiert.
Wenn ich nur den Symlink entferne, bleiben der Inode und die Daten erhalten. Wenn ich foo entferne, gehen die Daten verloren, der Symlink bleibt bestehen, verweist aber auf eine nicht vorhandene Datei.
$ rm foo
removed `foo'
$ ls -l foo foolink
ls: cannot access foo: No such file or directory
lrwxrwxrwx 1 bsd bsd 3 2011-12-11 09:11 foolink -> foo
Hardlinks sind zusätzliche Verzeichniseinträge für dieselbe Datei. Das bedeutet
Viele Editoren schreiben den neuen Inhalt beim Speichern nicht in dieselbe Datei, sondern gehen wie folgt vor:
Dieses Schema bedeutet, dass alle anderen festen Links zu derselben Datei nicht mehr auf die aktuelle Datei verweisen, sondern auf die vorherige Version (dies gilt auch für den Fall, dass der Editor die alte Datei löscht, da unter Unix eine Datei "gelöscht" wird bedeutet nur das Löschen seines Links; nur wenn der gelöschte Link der einzige Link ist, wird die eigentliche Datei gelöscht).
Da der feste Link direkt auf die Datei verweist, können Sie auf diese Datei zugreifen, auch wenn Sie keinen Zugriff auf den ursprünglichen Speicherort dieser Datei haben (z. B. weil Sie keine Berechtigungen für das Verzeichnis haben, in dem sich der ursprüngliche Eintrag befindet). . Die einzigen Rechte, die Ihren Zugriff bestimmen, sind die Zugriffsrechte der Datei selbst (die mit der Datei verknüpft sind, nicht mit dem Link; Sie können keine festen Links mit unterschiedlichen Berechtigungen für dieselbe Datei erstellen) und die Zugriffsrechte für den Pfad des festen Links ist enthalten in (im Grunde genommen die Ausführungsrechte des Verzeichnisses, in dem sich der Link befindet, sowie alle direkten und indirekten übergeordneten Verzeichnisse).
Symbolische Verknüpfungen dagegen speichern den Pfadnamen (den Namen der Datei - oder vielmehr ihren Verzeichniseintrag - möglicherweise einschließlich ihres Pfades, wie /bin/sh
oder subdir/foo.bar
) - einer anderen Datei. Wenn der Pfadname relativ ist, wird er immer relativ zu dem Verzeichnis interpretiert, in dem sich der Link befindet. Das bedeutet:
Eine symbolische Verknüpfung kann auf Dateien in einem anderen Dateisystem verweisen (auch auf ein Dateisystem, das selbst keine festen oder weichen Verknüpfungen wie FAT unterstützt).
Wenn die Originaldatei gelöscht wird, behält der symbolische Link den Dateiinhalt nicht bei. Sofern keine anderen festen Links zu derselben Datei vorhanden sind, wird der Dateiinhalt gelöscht. Der symbolische Link bleibt dann hängen (dh er verweist auf einen Pfadnamen, der keinem Verzeichniseintrag entspricht). Das Löschen des symbolischen Links wirkt sich hingegen nicht auf die Originaldatei aus, da nur auf den Pfadnamen verwiesen wird.
Wenn die Originaldatei verschoben oder umbenannt wird, wird der symbolische Link nicht aktualisiert, sondern bleibt hängen. Wenn Sie die symbolische Verknüpfung verschieben, wird sie nur dann unterbrochen, wenn sie einen relativen Pfad enthält und der Pfad ab der neuen Position nicht mehr gültig ist.
Wenn die ursprüngliche Datei durch eine neue Datei mit demselben Namen ersetzt wird (wie im oben beschriebenen Editor-Szenario), verweist der Link auf die neue Datei.
Bei den meisten Verwendungen von festen Links handelt es sich um eine Möglichkeit, eine Kopie einer Datei zu erstellen, ohne den Dateiinhalt zweimal speichern zu müssen. Dies funktioniert am besten, wenn die Dateien nie wieder geändert werden, da ansonsten die Verknüpfung leicht versehentlich unterbrochen werden kann (siehe das obige Editor-Szenario). Es gibt natürlich Fälle , in denen Sie mögen die Verbindung unterbrochen werden, wie im Fall von mehreren Sicherungen zu halten: Bei Dateien , die in neueren Backups geändert haben, müssen Sie die Kopie nicht wollen in älteren Backups als auch ändern.
Wenn Sie einen Link wünschen, verwenden Sie normalerweise einen symbolischen Link. Wenn Sie beispielsweise ein Verzeichnis auf eine andere Partition verschieben (weil die Partition, auf der es sich befindet, voll ist), können Sie eine weiche Verknüpfung von der alten zur neuen Position einrichten, sodass alle Programme, die versuchen, auf das Verzeichnis an der alten Stelle zuzugreifen, dies tun greifen Sie stattdessen auf den neuen Ort zu. Dies wäre mit harten Links nicht möglich. Beachten Sie jedoch, dass symbolische Links im verschobenen Verzeichnis beschädigt werden können, wenn sie relative Pfade enthalten, die aus dem verschobenen Verzeichnis herausführen.
HARD LINK (nur Dateien) vs SOFT LINK (Dateien oder Verzeichnisse) vs BIND (HARD LINK für Verzeichnisse)
(Quelle: freesoftwareservers.com )
Während die Antwort von daxelrod die Frage gut erklärt, dachte ich, dass das Bild in diesem Fall einen großen Unterschied machte, besonders für Anfänger, die noch keine Inodes und komplizierten Linux-Jargon verstehen.
Denken Sie daran, wenn Sie alles von Ihrem Laufwerk "gelöscht" haben, können Sie Software ausführen, um die Daten wiederherzustellen, da die Einsen und Nullen noch vorhanden sind und Sie einfach alle festen Links gelöscht haben. Der Zweck von Recovery Software ist es, die Hard Links neu zu erstellen, um die Nullen und Einsen zu verstehen
Ich habe einen tollen "One Liner" gelesen, der alles sinnvoll machte und den ich teilen wollte!
Alle Dateien unter Linux sind "Hard Links" zu den Nullen und Einsen auf der Festplatte. Wenn Sie Daten (0 & 1) erstellen, erstellt das Betriebssystem einen Hard Link im Dateibaum, um auf diesen Punkt auf der Festplatte zu verweisen.
Sie können einen weiteren festen Link erstellen und die ursprüngliche Datei löschen. Sie haben weiterhin Zugriff auf den neu erstellten festen Link.
Wenn Sie den HARD LINK 1 gelöscht haben, würde der SOFT LINK funktionieren? Nein, das Betriebssystem meldet, dass der HARD LINK 1 nicht vorhanden ist.
Wenn Sie umgekehrt den SOFT LINK löschen, funktioniert dann entweder HARD LINK? Ja. Solange das Betriebssystem über eine HARD LINK- Datei verfügt , wird gemeldet, dass die Füllung nicht gelöscht wurde.
- Ebenfalls einen Blick wert ist BIND, eine Möglichkeit, zwei Verzeichnisse wie das Verknüpfen zweier Verzeichnisse zu binden, die aber für das Betriebssystem transparent ist (Betriebssysteme können erkennen, wann Sie Symlink verwenden, und einige haben Regeln bezüglich des Wetters, denen sie Symlinks folgen können). Es verwendet Mount, nicht LS und kann über FSTAB konfiguriert werden.
Ein fester Link speichert eine Datei auf der Festplatte, bis alle festen Links, auch der erste (ein "Dateiname" ist technisch gesehen ein fester Link), gelöscht wurden. Ein Softlink kann so lange "hängen" bleiben, bis die Datei, auf die er zeigt (s / ed), ersetzt wird.
Dies ist eine sehr alte Frage, aber ich habe einen Anwendungsfall, bei dem ich harte Links verwenden muss.
Ich bin Musiker und habe daher sehr viele, sehr viele Audiodateien verschiedener Art auf mehreren Festplatten, die an meinen Mac angeschlossen sind. Terabyte wert. Ich habe sie größtenteils sehr gut mit Symlink-Verzeichnissen organisiert, damit ich sie nach Inhaltsherausgeber, Stil / Sound und anderen Kriterien finden kann, basierend auf meiner damaligen Denkweise. Leider kann ein von mir verwendetes Programm, Ableton Live, keine Aliase oder Symlinks in seinem Dateibrowser anzeigen. Die einzige Lösung, die ich gefunden habe, besteht darin, feste Verknüpfungen der Verzeichnisse zu erstellen, in die ich sie sehen möchte, und dann funktioniert alles hervorragend.
Dies ist also ein weiterer Fall, in dem Sie möglicherweise feste Links verwenden müssen, die anderen möglicherweise nicht bekannt sind.