Verzeichnisse mit Binärdateien unter Linux

8

Ich habe festgestellt, dass es bei der Installation einer neuen Anwendung einige mögliche Verzeichnisse gibt, in denen die resultierende Binärdatei abgelegt wird.

Sie können mit Packaging Manager installieren, mit make, easy_installfür Python usw. kompilieren .

Mein $PATHAussehen sieht wie folgt aus:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Gibt es Konventionen oder Regeln, die festlegen, in welches Verzeichnis die resultierende Binärdatei (oder Bibliothek) gestellt werden soll?

Mir ist aufgefallen, dass beim Kompilieren des Quellcodes häufig das Ergebnis angezeigt wird /usr/local/bin/. Ist das die Regel?

Könnten Sie die Antwort schreiben, die die Unix-Philosophie (Entwurfs- und Konventionsentscheidungen) nach Binärdateien erklärt und warum dies so ist (warum nicht nur ein Verzeichnis für alle Binärdateien verwenden)?

xralf
quelle

Antworten:

9

Es gibt keine feste Regel, aber jede Distribution hat ihre eigene Logik, um Dinge dahin zu bringen, wo sie sind. Wird im Allgemeinen /binfür System-Binärdateien, /usr/binfür Standardanwendungen verwendet, die mit der Distribution geliefert werden, und /usr/local/binfür Dinge, die außerhalb der normalen Distribution installiert werden. Sie können eine X11zu jeder für X11-Binärdateien hinzufügen - /usr/X11/binund /usr/local/X11/binsind weit verbreitet. Einige Software wird ebenfalls installiert /opt.

Dieser Artikel enthält eine ausführlichere Erklärung für die Dinge in /. Und natürlich hat Wikipedia eine Seite.

Sardathrion - gegen SE-Missbrauch
quelle
6

Zusätzlich zur Antwort von @Sardathrion werden sbinVerzeichnisse im Allgemeinen für die Binärdateien für verschiedene Arten von Systemverwaltungstools, Systemanwendungen auf niedriger Ebene und häufig für Systemdämonen verschiedener Art verwendet.

Unter sbins finden Sie beispielsweise Dinge wie /sbin/init(die den Startvorgang steuern, sobald der Kernel seine interne Initialisierung abgeschlossen hat), /sbin/hdparm(Lesen und Festlegen der Festplattenbetriebsparameter), /usr/sbin/cupsd(Drucken des Dämons), /usr/sbin/smartctl(Lesen von SMART-Daten von Festplatten), und so weiter.

Die allgemeine Konvention ist auch, dass /usrsie vom Paketmanager verwaltet wird und /usr/localvom Benutzer oder Systemadministrator verwaltet wird (in Fällen, in denen die beiden nicht ein und dasselbe sind). Dies hat einen historischen Präzedenzfall: Als der Speicherplatz teuer war, konnte / usr schreibgeschützt über das Netzwerk bereitgestellt und von vielen Workstations gemeinsam genutzt werden, selbst mit Systemen, die kein direktes Booten des Netzwerks unterstützten. Jede Workstation könnte dann ein eigenes, vergleichsweise kleines / usr / local sowie möglicherweise ein (relativ leichtes) Root-Dateisystem ( /) haben. Diese Unterscheidung zwischen / usr und / usr / local ist höchstwahrscheinlich der Grund, warum die meisten Pakete standardmäßig in / usr / local installiert werden, wenn sie aus dem Quellcode erstellt werden.

ein CVn
quelle
2

Der Dateisystem-Hierarchiestandard gibt an, wo Linux-Distributionen Dateien ablegen sollen .

binVerzeichnisse enthalten ausführbare Dateien, die von jedem Benutzer verwendet werden sollen, während sbinVerzeichnisse ausführbare Dateien enthalten, die nur vom Systemadministrator verwendet werden sollen. sbinVerzeichnisse befinden sich normalerweise nur in Roots $PATH.

/bin(und /sbin) enthalten Programme, die zu Beginn des Startvorgangs benötigt werden, da /usrsie auf einer separaten Partition bereitgestellt werden können (obwohl dies heutzutage selten vorkommt).

/usr/bin(und /usr/sbin) Programme enthalten, die von der Distribution bereitgestellt werden und nicht in /binoder enthalten sind /sbin. Auf einem typischen System befindet sich eine große Mehrheit der ausführbaren Dateien in /usr/bin.

Die /usr/localHierarchie ist der Bereich des Administrators. Die Verzeichnisse /lib, /bin, /sbinund /usrwerden in der Regel auf die Verteilung vorbehalten, und in der Regel nur enthalten Dateien vom System Paket - Manager zur Verfügung gestellt. /usr/local(und insbesondere /usr/local/binund /usr/local/sbin) bleiben vom Paketmanager unberührt, daher kann der lokale Administrator hier manuell installierte ausführbare Dateien platzieren.

/usr/gameskann ausführbare Dateien enthalten, die von der Distribution bereitgestellt werden und als rein freizeitorientiert gelten. Es ist größtenteils ein historisches Überleben (vor langer Zeit war /usr/gameses zu bestimmten Tageszeiten möglicherweise verboten , aber diese Art von Praxis - die ohnehin leicht zu umgehen war - ist abgeklungen).

Andere häufig verwendete ausführbare Speicherorte auf dem Linux-System sind:

  • /usr/X11R6/binoder /usr/bin/X11für X-Programme. Die Praxis, X-Programme von Nicht-X-Programmen zu trennen, ist zum Erliegen gekommen. Heutzutage leben sie alle in /usr/bin.
  • /usr/bin/mhfür ausführbare Dateien des MH-E-Mail-Clients , der E-Mails über Shell-Befehle showfür einen bestimmten Zweck manipuliert ( um eine Nachricht anzuzeigen, forweine E-Mail weiterzuleiten, ...). Nur MH-Benutzer würden /usr/bin/mhihre eingeben $PATH.
  • /opt/bin, falls vorhanden, würde symbolische Links zu Anwendungen enthalten, die in installiert sind /opt.

Die Regeln für Linux sind von allgemeinen Richtlinien inspiriert, die von den meisten Unix-Systemen befolgt werden, aber jede Unix-Variante hat ihre eigenen Macken. Zum Beispiel:

  • Auf * BSD /und /usrenthalten nur den Kern der Distribution: Basisdienste und -anwendungen, die direkt von den Distributionsbetreuern verwaltet werden. Programme von Drittanbietern ("Pakete" oder "Ports") werden installiert /usr/local, auch wenn sie von einem Paketmanager verwaltet werden. Es gibt keinen allgemein akzeptierten separaten Speicherort für Programme, die vom Systemadministrator bereitgestellt werden.
  • Einige Unix-Systeme haben kein /binVerzeichnis, es ist eine symbolische Verknüpfung zu /sbinoder /usr/bin.
  • Einige Systeme verfügen möglicherweise über zusätzliche Verzeichnisse mit optionalem Paket, von denen jedes sein eigenes binVerzeichnis in das Verzeichnis einfügt $PATH.
  • Einige Systeme können zusätzliche Verzeichnisse haben , die auf den nicht platziert werden können oder $PATHje nachdem , was die Ausführungsumgebung sollte kompatibel sein, zum Beispiel /usr/bin/posixoder /usr/xpg4/binoder /usr/xpg6/binfür die Kompatibilität mit POSIX / Single Unix, oder /usr/ucbfür die Kompatibilität mit Legacy - BSD - Systemen.
Gilles 'SO - hör auf böse zu sein'
quelle
Ein Ausgangspunkt dafür ist man hier.
Monica wieder herstellen - M. Schröder