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?Ich habe gerade eine einfache Möglichkeit gefunden, harte Links in einem gängigen Szenario, der Softwareinstallation, zu verstehen.
Eines Tages habe ich eine Software in den Ordner Downloads
heruntergeladen, um sie zu installieren. Nachdem ich sudo make install
ausgeführt hatte, wurden einige ausführbare Dateien in den lokalen bin-Ordner cp
iert. Hier erstellt cp
einen harten Link. Ich war zufrieden mit der Software, erkannte aber bald, dass Downloads
auf lange Sicht kein guter Ort ist. Also habe ich den Softwareordner in das Verzeichnis source
verschoben. Nun kann ich die Software weiterhin wie zuvor ausführen, ohne mich um irgendwelche Zielverknüpfungen, wie in Windows, kümmern zu müssen. Das bedeutet, dass der harte Link die Inode direkt findet und andere Dateien darum herum.
In dieser Antwort, wenn ich von einer Datei spreche, meine ich den Speicherort im Speicher
Alle gespeicherten Daten werden im Speicher mithilfe einer Datenstruktur namens Inodes gespeichert. Jede Inode hat eine Inodenummer. Die Inodenummer wird verwendet, um auf die Inode zuzugreifen. Alle Hardlinks zu einer Datei können unterschiedliche Namen haben, teilen jedoch dieselbe Inodenummer. Da alle Hardlinks dieselbe Inodenummer haben (die wiederum auf dieselbe Inode zugreift), zeigen alle auf denselben physischen Speicher.
Ein symbolischer Link ist eine besondere Art von Datei. Da es auch eine Datei ist, hat sie einen Dateinamen und eine Inodenummer. Wie oben erwähnt, greift die Inodenummer auf eine Inode zu, die auf Daten verweist. Was einen symbolischen Link besonders macht, ist, dass die Inodenummern in symbolischen Links auf die Inodes zugreifen, die auf "einen Pfad" zu einer anderen Datei verweisen. Genauer gesagt greift die Inodenummer im symbolischen Link auf die Inodes zu, die auf einen anderen Hardlink verweisen.
Wenn wir eine Datei im GUI verschieben, kopieren oder löschen, arbeiten wir mit den Hardlinks der Datei und nicht dem physischen Speicher. Wenn wir eine Datei löschen, löschen wir den Hardlink der Datei. Wir löschen nicht den physischen Speicher. Wenn alle Hardlinks zur Datei gelöscht sind, ist es nicht möglich, auf die gespeicherten Daten zuzugreifen, obwohl sie möglicherweise noch im Speicher vorhanden sind.
Hard-Link ist wie Unix, es ist alt und wurde zuerst in Unix und dann in Linux verwendet, aber Symbolink-Link ist neu in Linux.
Hard-Link-Inode ist dasselbe wie die Originaldatei-Inode. Aber Symbolik-Link-Inode unterscheidet sich von der Originaldatei-Inode.
Die Größe einer Hard-Link-Datei in Byte ist dieselbe wie die Größe der Originaldatei in Byte. Aber die Größe einer Symbolik-Link-Datei in Byte entspricht nicht der Größe der Originaldatei in Byte. Die Größe einer symbolischen Link-Datei ist kleiner als die der Originaldatei.
Hard-Link ist eine Spiegelkopie der Originaldatei. Symbolik-Link oder Softlink ist wie eine Verknüpfung in Windows.
Wenn Sie die Originaldatei löschen, bleibt der Hard-Link erhalten und Sie können den Inhalt der Hard-Link-Datei sehen. Bei einem Symbolik-Link wird der symbolische Link jedoch gebrochen, wenn Sie die Originaldatei löschen, und der symbolische Link bleibt bestehen, kann aber den Inhalt des symbolischen Links nicht anzeigen.
Symbolik-Link ist neu und hat viele Funktionen, aber Hard-Link ist alt, deshalb hat es weniger Funktionen.
Lassen Sie uns einige Hard- und symbolische Links über das Terminal erstellen: echo "Warum so ernst" > datei.txt
Hard-Link: ln datei.txt datei_hard
Symbolik-Link: ln -s datei.txt datei_sym
Lassen Sie uns ihren Inhalt mit den Inodes sehen: ls -li
Ich habe gerade einen einfachen Weg gefunden, um harte Links in einem häufigen Szenario zu verstehen, der Software-Installation.
Eines Tages habe ich eine Software in den Ordner "Downloads" heruntergeladen, um sie zu installieren. Nachdem ich "sudo make install" ausgeführt hatte, wurden einige ausführbare Dateien in den lokalen "bin"-Ordner kopiert. Hier erstellt "cp" einen harten Link. Ich war zufrieden mit der Software, aber bald merkte ich, dass "Downloads" auf lange Sicht kein guter Ort ist. Also habe ich den Software-Ordner in das Quellverzeichnis verschoben. Nun kann ich die Software immer noch wie zuvor ausführen, ohne mich um irgendwelche Ziel-Link-Dinge kümmern zu müssen, wie in Windows. Das bedeutet, der harte Link findet den Inode direkt und andere Dateien drum herum.
Ein Link (Dateiname), der zu einer Datei führt, deren Inhalt ein Dateipfad ist, ist ein symbolischer Link, andernfalls ist es ein harter Link.
Ein Verzeichnis ist im Grunde eine Tabelle, in der ein Eintrag ein Dateiname (Link) und eine Inode-Nummer ist. Ein Link - hart oder symbolisch - führt zu einer Inode-Nummer im Verzeichnis, die Inode im Verzeichnis führt dann zu einem Inode-Eintrag (Informationen über eine Datei) in der Inode-Tabelle. Eine Information im Inode-Eintrag ist der Dateityp.
Von dem Inode-Eintrag aus kann das Dateisystem dann auf die Daten der Datei zugreifen, die von der Inode repräsentiert wird, da die Adresse der Datei Teil der Informationen ist, die den Eintrag ausmachen.
Wenn die Daten der Datei ein Link (Dateipfad) sind, dann ist die Datei ein symbolischer Link, andernfalls ist es ein harter Link. Mit anderen Worten, ein symbolischer Link ist eine Datei, deren Daten ein Dateipfad sind (Hardlink).
- See previous answers
- Weitere Antworten anzeigen
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