Warum gibt es in / bin eine Mischung aus Symlinks und Hardlinks?


10

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 /binVerzeichnis.

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, bzlessund 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:


Ich denke, das liegt an den Paketbetreuern. zB ich laufe Gentoo, und in meiner /bindritten Spalte von ls -laiist immer 1so, dass es nur Softlinks zu verwenden scheint. Welche Distribution benutzt du?
Wiederholung

Ich benutze Ubuntu 12.04
Dmitry Pashkevich

1
Auf den ersten Blick scheint es sich um eine Typregel zu handeln : "Hardlinks für Binärdateien, Symlinks für Skripte / Wrapper" .
Peterph

Antworten:


5

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

  1. Bei einer festen Verbindung zeigt die Verbindung direkt auf den Inode.
  2. Harte Links sind so, als hätten Sie mehrere Kopien der ausführbaren Datei, verwenden jedoch nur den Speicherplatz einer.
  3. Sie können jeden Zweig des Hardlinks umbenennen, ohne etwas zu beschädigen.

Symbolische Links

  1. Die Verknüpfung zeigt auf das Objekt (das dann wiederum auf die Inode zeigt).
  2. Sie können sich über Dateisysteme erstrecken, Hardlinks jedoch nicht.

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 bzlessund bzmoresind 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:

  1. Es ist einfacher, eine einzelne ausführbare Datei zu entwickeln, als viele
  2. Spart Speicherplatz
  3. Einfacher bereitzustellen

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

Wenn / bin / sh keine echte Bourne-Shell ist, muss es sich um eine feste oder symbolische Verknüpfung zum realen Shell-Befehl handeln.

Das Grundprinzip dahinter ist, dass sich sh und bash möglicherweise nicht unbedingt gleich verhalten. Durch die Verwendung eines symbolischen Links können Benutzer auch leicht erkennen, dass / bin / sh keine echte Bourne-Shell ist.

...

...

Wenn die Programme gunzip und zcat vorhanden sind, müssen sie symbolische oder feste Links zu gzip sein. / bin / csh kann eine symbolische Verknüpfung zu / bin / tcsh oder / usr / bin / tcsh sein.

Verweise


Ja, ich verstehe das, danke, aber warum werden manchmal Symlinks und manchmal Hardlinks verwendet? Was Sie beschrieben haben, würde in beiden Fällen
genauso funktionieren

@DmitryPashkevich - OK, ich habe meine Antwort überarbeitet. Lassen Sie mich wissen, ob das besser ist.
slm

Vielleicht stelle ich eine dumme Frage, aber ich habe das Gefühl, dass sie immer noch unbeantwortet ist :) Ja, ich kenne die technischen Unterschiede und Vor- / Nachteile der beiden Arten von Links. Ich versuche, einen bestimmten Fall zu verstehen: Warum werden in meinem /bin/Verzeichnis BEIDE Hardlinks und Symlinks angezeigt ? Warum haben sich die Entwickler dieser Dienstprogramme nicht an einen Link-Typ gehalten?
Dmitry Pashkevich

Ich habe meine ursprüngliche Frage bearbeitet, um sie (hoffentlich) zu klären
Dmitry Pashkevich,

@DmitryPashkevich - zusätzliche Inhalte hinzugefügt. Lassen Sie mich wissen, ob es hilft.
slm

5

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 bzip2Paket 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.


1
Vielen Dank für Ihre Perspektive! Ich denke, die "
selbstdokumentierende
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.