Vor kurzem wurde ich während eines Vorstellungsgesprächs danach gefragt. Ich war ehrlich und sagte, dass ich wusste, wie sich ein symbolischer Link verhält und wie man einen erstellt, aber ich verstehe nicht den Einsatz eines Hardlinks und wie er sich von einem symbolischen unterscheidet.
Antworten
Zu viele Anzeigen?Soft-Link:
Soft oder symbolisch ist eher eine Verknüpfung zur Originaldatei....wenn du das Original löschst, schlägt die Verknüpfung fehl und wenn du nur die Verknüpfung löschst, passiert nichts mit dem Original.
Soft-Link-Syntax: ln -s Pfad_zur_Zieldatei Verknüpfung
Ausgabe: Verknüpfung -> ./Zieldatei
Beweis: readlink Verknüpfung
Auch in der Ausgabe von ls -l Verknüpfung
siehst du den ersten Buchstaben in lrwxrwxrwx
als l, was darauf hinweist, dass die Datei eine symbolische Verknüpfung ist.
Löschen der Verknüpfung: unlink Verknüpfung
Hinweis: Wenn du möchtest, dass deine symbolische Verknüpfung auch nach dem Verschieben funktioniert, gib unbedingt den absoluten Pfad an und nicht den relativen Pfad beim Erstellen einer symbolischen Verknüpfung. z.B. (beginnend von /root/benutzer/Zieldatei und nicht ./Zieldatei)
Hard-Link:
Hard-Link ist mehr eine Spiegelkopie oder mehrere Pfade zur selben Datei. Mach etwas mit Datei1 und es erscheint in Datei 2. Das Löschen einer Datei lässt die andere weiterhin bestehen.
Der Inode (oder die Datei) wird nur gelöscht, wenn alle (hard)Links oder alle Pfade zum (selben Datei)inode gelöscht wurden.
Wenn einmal ein Hard-Link erstellt wurde, hat die Verknüpfung den Inode der Originaldatei. Das Löschen, Umbenennen oder Verschieben der Originaldatei beeinträchtigt den Hard-Link nicht, da er mit dem zugrunde liegenden Inode verknüpft ist. Alle Änderungen an den Daten im Inode spiegeln sich in allen Dateien wider, die sich auf diesen Inode beziehen.
Hard-Link-Syntax: ln Zieldatei Verknüpfung
Ausgabe: Eine Datei mit dem Namen Verknüpfung wird erstellt, mit derselben Inode-Nummer wie die Zieldatei.
Beweis: ls -i Verknüpfung Zielfile
(überprüfe ihre Inodes)
Löschen der Verknüpfung: rm -f Verknüpfung
(Lösche die Verknüpfung wie eine normale Datei)
Hinweis: Symbolische Verknüpfungen können Dateisysteme überspannen, da sie einfach der Name einer anderen Datei sind. Während Hard-Links nur innerhalb desselben Dateisystems gültig sind.
Symbolische Verknüpfungen haben einige Funktionen, die Hard-Links fehlen:
-
Hard-Links verweisen auf den Dateiinhalt. Während Symbolische Verknüpfungen auf den Dateinamen verweisen.
-
Die Größe eines Hard-Links entspricht der Größe des Inhalts, während eine Symbolische Verknüpfung die Größe des Dateinamens hat.
-
Hard-Links teilen denselben Inode. Symbolische Verknüpfungen nicht.
-
Hard-Links können nicht über Dateisysteme hinweg verweisen. Symbolische Verknüpfungen schon.
-
Du weißt sofort, auf was eine symbolische Verknüpfung zeigt, während du bei Hard-Links das gesamte Dateisystem durchsuchen musst, um Dateien zu finden, die denselben Inode teilen.
# find / -inum 517333
/home/bobbin/sync.sh /root/synchro
-
Hard-Links können nicht auf Verzeichnisse verweisen.
Die Hard-Links haben zwei Einschränkungen:
- Verzeichnisse können nicht hard verknüpft werden. Linux erlaubt dies nicht, um die zyklische Baumstruktur von Verzeichnissen aufrechtzuerhalten.
- Ein Hard-Link kann nicht über Dateisysteme hinweg erstellt werden. Beide Dateien müssen sich auf demselben Dateisystem befinden, da verschiedene Dateisysteme unterschiedliche unabhängige Inode-Tabellen haben (zwei Dateien auf verschiedenen Dateisystemen, aber mit derselben Inode-Nummer, sind unterschiedlich).
Symbolische Links verweisen auf einen Pfadnamen. Dies kann sich überall im Dateisystem eines Systems befinden und muss nicht einmal existieren, wenn der Link erstellt wird. Der Ziel-Pfad kann relativ oder absolut sein.
Hard Links sind zusätzliche Zeiger auf einen Inode, was bedeutet, dass sie nur auf demselben Volume wie das Ziel existieren können. Zusätzliche Hard Links zu einer Datei sind nicht vom "ursprünglichen" Namen zu unterscheiden, der zum Referenzieren einer Datei verwendet wird.
Ich würde dich auf Wikipedia verweisen:
Ein paar Punkte:
- Symlinks können im Gegensatz zu Hardlinks Dateisysteme überschreiten (meistens).
- Symlinks können auf Verzeichnisse verweisen.
- Hardlinks verweisen auf eine Datei und ermöglichen es, auf dieselbe Datei mit mehr als einem Namen zu verweisen.
- Solange es mindestens einen Link gibt, sind die Daten weiterhin verfügbar.
Hardlinks sind sehr nützlich beim Durchführen inkrementeller Backups. Siehe rsnapshot, zum Beispiel. Die Idee ist, eine Kopie mit Hardlinks zu erstellen:
- Kopiere Backup Nummer n zu n + 1
- Kopiere Backup n - 1 zu n
- ...
- Kopiere Backup 0 zu Backup 1
- Aktualisiere Backup 0 mit allen geänderten Dateien.
Das neue Backup wird keinen zusätzlichen Speicherplatz einnehmen, abgesehen von den Änderungen, die Sie vorgenommen haben, da alle inkrementellen Backups auf den gleichen Inodes für Dateien verweisen, die sich nicht geändert haben.
4 Stimmen
Über 'do not understand the use of a hard link' kann es in Build-Systemen verwendet werden, die viele Binärdateien kopieren. Das Erstellen eines Hardlinks anstelle einer tatsächlichen Kopie beschleunigt die Dinge. MSBuild 4.0 unterstützt dies.
20 Stimmen
Ich finde diesen Link sehr nützlich, um es zu verstehen. askubuntu.com/questions/108771/…
3 Stimmen
unix.stackexchange hat eine gute Liste von Aufzählungspunkten... sehr hilfreich, da sie alle Einschränkungen sehr prägnant darstellt und leicht zu überfliegen ist. (viele dieser Aufzählungspunkte behandeln Randfälle/Haken, die nur in den Kommentaren zu dieser Frage erwähnt werden... oder überhaupt nicht erwähnt werden)
1 Stimmen
youtube.com/watch?v=lW_V8oFxQgA