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?Ein Verzeichniseintrag ist wie eine Struktur:
struct dentry{
ino_t ino;
char name[256];
}
Das ino ist die Inode-Nummer, der Name ist der Dateiname, die Inode-Struktur könnte sein:
struct inode{
link_t nlink;
...
}
Zum Beispiel erstellen Sie eine Datei /1, der Verzeichniseintrag könnte sein:
struct dentry{
ino_t ino; /* z.B. 15 */
char name[256]; /* "1" */
}
Die Inode-Struktur könnte sein:
struct inode{ /* Inode-Nummer 15 */
link_t nlink; /* nlink = 1 */
...
}
Dann erstellen Sie einen Hard-Link (vielleicht /100), der Verzeichniseintrag könnte sein:
struct dentry{
ino_t ino; /* 15 */
char name[256]; /* 100 */
}
Die Inode-Struktur könnte sein:
struct inode{ /* Inode-Nummer 15 */
link_t nlink; /* nlink = 2 */
...
}
Dann erstellen Sie einen symbolischen Link (vielleicht /200) zur Datei 1, der Verzeichniseintrag könnte sein:
struct dentry{
ino_t ino; /* z.B. 16 */
char name[256]; /* "200" */
}
Die Inode-Struktur könnte sein:
struct inode{ /* Inode-Nummer 15 */
link_t nlink; /* nlink = 2 */
...
}
struct inode{ /* Inode-Nummer 16 */
link_t nlink; /* nlink = 1 */
...
} /* die Daten von Inode 16 könnten /1 oder 1 sein */
Meine Meinung zur Verwendung:
Soft Links können verwendet werden, um lange Dateipfade zu verkürzen, z. B.:
ln -s /langer/ordner/name/auf/langem/pfad/datei.txt /kurze/datei.txt
Änderungen an /kurze/datei.txt
werden auf die Originaldatei angewendet.
Hard Links können verwendet werden, um große Dateien zu verschieben:
$ ls -lh /meineapp/dev/
total 10G
-rw-r--r-- 2 root root 10G 22. Mai 12:09 anwendung.bin
ln /meineapp/dev/anwendung.bin /meineapp/prd/anwendung.bin
Sofortige Kopie in einen anderen Ordner, und die Originaldatei (auf /meineapp/dev
) kann verschoben oder gelöscht werden, ohne die Datei auf /meineapp/prd
zu berühren
Außerdem:
- Die Leseleistung von Hardlinks ist besser als bei symbolischen Links (Mikro-Performance)
- Symbolische Links können kopiert, versioniert, usw. werden. Mit anderen Worten, sie sind eine tatsächliche Datei. Auf der anderen Seite ist ein Hardlink etwas auf einer etwas niedrigeren Ebene und man wird feststellen, dass im Vergleich zu symbolischen Links weniger Tools vorhanden sind, die Mittel für die Arbeit mit den Hardlinks als Hardlinks und nicht als normale Dateien bieten.
Zusätzlich zu allen oben genannten Antworten kann der Unterschied bei der Suche nach der Hardlink- und Softlink-Datei wie folgt verstanden werden:
Ich habe eine Datei f6
in meinem aktuellen Verzeichnis sowie ein Verzeichnis namens t2
.
Datei mit dem Namen f1
und ./t2/f2
sind symbolische Links zu f6
.
Datei mit dem Namen f7
und ./t2/f8
sind Hardlinks von f6
.
Um sowohl den Softlink als auch den Hardlink zu finden, können wir Folgendes verwenden:
$ find -L . -samefile f6
> ./f1
> ./f6
> ./f7
> ./t2/f2
> ./t2/f8
Um nur den Hardlink zu finden, können wir Folgendes verwenden:
$ find . -xdev -samefile f6
> ./f6
> ./f7
> ./t2/f8
Da Hardlinks auf dem selben Dateisystem erstellt werden können, können wir alle Hardlinks ohne die Verwendung der -L
-Option suchen (mit der -xdev
-Option) im selben Dateisystem/Mountpoint. Dies spart die unnötige Suche in unterschiedlichen Mountpoints.
Daher ist die Suche nach Hardlinks etwas schneller als die Suche nach Softlinks (Bitte korrigieren Sie mich, wenn ich falsch liege oder nicht klar bin).
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