Ich verstehe den technischen Unterschied zwischen Symlinks und Hardlinks. Dies ist eine Frage zu ihrer Verwendung in der Praxis. Insbesondere bin ich gespannt, warum beide unter scheinbar ähnlichen Bedingungen verwendet werden: das /bin
Verzeichnis.
Hier ist ein Fragment seiner Auflistung auf meinem System:
~$ ls -lai /bin
total 10508
32770 drwxr-xr-x 2 root root 4096 Jun 14 11:47 .
2 drwxr-xr-x 28 root root 4096 Sep 6 13:15 ..
119 -rwxr-xr-x 1 root root 959120 Mar 28 22:02 bash
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bunzip2
127 -rwxr-xr-x 1 root root 1832016 Nov 16 2012 busybox
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzcat
6191 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzcmp -> bzdiff
5640 -rwxr-xr-x 1 root root 2140 Dec 15 2011 bzdiff
5872 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzegrep -> bzgrep
3520 -rwxr-xr-x 1 root root 4877 Dec 15 2011 bzexe
6184 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzfgrep -> bzgrep
5397 -rwxr-xr-x 1 root root 3642 Dec 15 2011 bzgrep
2820 -rwxr-xr-x 3 root root 31112 Dec 15 2011 bzip2
2851 -rwxr-xr-x 1 root root 10336 Dec 15 2011 bzip2recover
6189 lrwxrwxrwx 1 root root 6 Dec 15 2011 bzless -> bzmore
5606 -rwxr-xr-x 1 root root 1297 Dec 15 2011 bzmore
Ich habe die Hardlinks zur besseren Sichtbarkeit auf dieselbe Inode eingerückt. So werden verwendet Symlinks bei bzcmp
, bzegrep
, bzfgrep
, bzless
und Hardlinks bei bzip2
, bzcat
, bunzip2
?
Es sind alles reguläre Dateien (keine Verzeichnisse), die sich in einem Dateisystem befinden, Systemdienstprogramme sind und sogar für die Arbeit mit derselben Sache ausgelegt sind: bzip-Archive. Sind die Gründe für die Verwendung von Hardlinks / Symlinks in diesem speziellen Fall rein historisch oder fehlt mir etwas?
Klärung meiner Frage:
Ich frage nicht nach:
- Die technischen Unterschiede zwischen Symlinks und Hardlinks
- Die theoretischen Vor- und Nachteile von jedem von ihnen
Diese Fragen wurden in anderen Threads zu SO behandelt. Ich versuche zu verstehen, warum in einem bestimmten Fall unterschiedliche Entscheidungen getroffen wurden: für eine Gruppe verwandter Systemdienstprogramme. Technisch gesehen könnten sie alle Symlinks oder Hardlinks sein, beide Optionen würden funktionieren (und in beiden Fällen kann ein Programm immer noch herausfinden, wie es aufgerufen wurde argv[0]
). Ich möchte die Absicht hier verstehen, wenn es welche gibt.
Verbunden:
/bin
dritten Spalte vonls -lai
ist immer1
so, dass es nur Softlinks zu verwenden scheint. Welche Distribution benutzt du?Antworten:
Warum Hardlinks oder symbolische Links verwenden?
In diesem Szenario bietet die Verwendung von Hardlinks in erster Linie drei Vorteile gegenüber symbolischen Links.
Harte Links
Symbolische Links
Vorteile der Verknüpfung im Allgemeinen
Diese Links existieren, weil sich viele ausführbare Dateien je nach Aufruf unterschiedlich verhalten. Zum Beispiel die 2 Befehle
bzless
undbzmore
sind eigentlich eine einzelne ausführbare Datei ,bzmore
. Die ausführbare Datei verhält sich je nachdem, mit welchen Namen sie aufgerufen wurde, unterschiedlich.Dies geschieht aus verschiedenen Gründen. Hier sind einige der offensichtlicheren:
Warum werden beide verwendet?
Die Wahl von beidem in dieser speziellen Anwendung ist umstritten. Beides kann die Funktion des Alias erleichtern, sodass eine einzelne ausführbare Datei überladen werden kann. Das ist wirklich das Hauptmerkmal, das von den Entwicklern der verschiedenen Programme hier ausgenutzt wird.
Beim Betrachten des FHS (Filesystem Hierarchy Standard) wird es sogar so spezifiziert, dass es beides sein kann.
Auszug
Verweise
quelle
/bin/
Verzeichnis BEIDE Hardlinks und Symlinks angezeigt ? Warum haben sich die Entwickler dieser Dienstprogramme nicht an einen Link-Typ gehalten?Anscheinend versuchen Sie anhand der bestehenden Praxis herauszufinden, ob es eine nichttechnische Regel gibt, die Ihnen sagt, welche Art von Link Sie verwenden sollen. (Ich sage nichttechnisch, weil Sie bereits die technischen Gründe für die Verwendung übereinander kennen.)
Die Antwort lautet: Es gibt keine andere Regel. Dieses Beispiel, auf das Sie in Ubuntus
bzip2
Paket hingewiesen haben, zeigt nur, dass viele Entwickler sie ohne viel Voraussicht mischen. Dies liegt daran, dass es außer den technischen Unterschieden keine starken Leitlinien gibt und diese Unterschiede gering sind.Persönlich bevorzuge ich es immer, Symlinks zu verwenden, weil ich bereit bin, für ihren winzigen Overhead im Austausch für ihre selbstdokumentierende Natur zu bezahlen.
Andere Entwickler werden harte Links für die winzigen Effizienzvorteile wählen, die sie bieten.
Dieses Problem ähnelt stark Leerzeichen vs. Tabulatoren oder dynamisches vs. statisches Tippen oder Emacs vs. vi , außer dass es nicht interessant genug ist, um einen heiligen Krieg auszulösen . Wie bei den interessanteren Schlachten gibt es Gründe, sich für eine der beiden Optionen zu entscheiden. Wenn Ihnen jedoch nicht jemand sagt, welche Sie verwenden sollen, können Sie die für Sie sinnvollere auswählen.
quelle