/ usr / bin vs / usr / local / bin unter Linux

446

Warum gibt es in Linux so viele Orte, an denen man eine Binärdatei ablegen kann? Es gibt mindestens diese fünf:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

Und auf meiner Office-Box habe ich für einige von ihnen keine Schreibberechtigung.

Welche Art von Binärdatei wird in welche dieser bins geschrieben?

Laser
quelle
28
Du hast es vergessen /usr/sbin/.
Hallo71
15
Und ~/bin/für persönliche Sachen.
Calmarius
1
Es gibt heutzutage weniger Orte, da sie /binmit /usr/binund /sbinmit zusammengeführt wurden /usr/sbin- siehe Der Fall für die / usr-Zusammenführung .
Piotr Dobrogost
Verwandte Frage: askubuntu.com/questions/308045/…
Gabriel Staples
@Calmarius, was? sollten Sie nicht verwenden /usr/local/bin?
Pacerier

Antworten:

561
  1. /bin(und /sbin) waren für Programme gedacht, die sich auf einer kleinen /Partition befinden mussten, bevor die größeren /usrusw. Partitionen gemountet wurden. Heutzutage dient es hauptsächlich als Standardspeicherort für wichtige Programme /bin/sh, obwohl die ursprüngliche Absicht beispielsweise für Installationen auf kleinen eingebetteten Geräten immer noch relevant sein kann.

  2. /sbinIm /binGegensatz dazu wird es für Systemverwaltungsprogramme (die normalerweise nicht von normalen Benutzern verwendet werden) benötigt, bevor sie /usrbereitgestellt werden.

  3. /usr/bin ist für verteilungsverwaltete normale Benutzerprogramme.

  4. Es gibt eine /usr/sbinBeziehung mit der gleichen /usr/binwie /sbinmuss /bin.

  5. /usr/local/binist für normale Benutzerprogramme gedacht, die nicht vom Distributionspaket-Manager verwaltet werden, z. B. lokal kompilierte Pakete. Sie sollten sie nicht installieren, /usr/binda zukünftige Distributions-Upgrades sie möglicherweise ohne Vorwarnung ändern oder löschen.

  6. /usr/local/sbin, wie Sie wahrscheinlich an dieser Stelle erraten können, ist zu /usr/local/binwie /usr/sbinzu /usr/bin.

Darüber hinaus gibt es auch /optwelche für monolithische Nicht-Distributions-Pakete, obwohl vor deren ordnungsgemäßer Integration verschiedene Distributionen Gnome und KDE dort ablegen. Im Allgemeinen sollten Sie es für große, schlecht gestaltete Pakete von Drittanbietern wie Oracle reservieren.

Geekosaurier
quelle
37
Ich denke, diese Antwort klärt die gängigen Konventionen sehr gut, aber dieser Beitrag von Rob Landley ist eine wirklich gute Lektüre, wenn Sie einen Einblick in den Unsinn wollen ... lists.busybox.net/pipermail/busybox/2010-December /074114.html
Subfuzion
3
refspecs.linuxfoundation.org/fhs.shtml für die kanonische aktuelle Referenz. Der Link von @kojiro ist veraltet und hat nicht die neue Spezifikation.
Didier A.
2
Wo stelle ich einen aus dem Internet heruntergeladenen Papierkorb ab? Ihrer Beschreibung nach sollte es sich in / usr / local / bin oder / usr / bin befinden. Ist / usr / bin etwas, das ich niemals manuell anfassen sollte und mit dem nur der Paketmanager spielen darf?
Didier A.
3
@DidierA. lege es ein ~/binund füge dieses Verzeichnis als Benutzer zu deinem PFAD hinzu ... Danke für den Hinweis, ich habe meinen stark veralteten Kommentar gelöscht.
Kojiro
3
Die Antwort auf den ersten Teil meiner Frage habe ich hier gefunden: superuser.com/a/238993/425838 . Die Rangfolge basiert auf der Reihenfolge in der Systemvariablen PATH, und echo $PATHfür mich /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/gamesbedeutet dies, dass ausführbare Dateien /usr/local/binVorrang vor den Dateien haben , in /usr/bindenen Vorrang vor den Dateien in vorhanden ist /bin.
Gabriel Staples
65

Ich empfehle einen Blick auf die Manpage zur Dateisystemhierarchie:

man hier

Was auch online verfügbar ist, zum Beispiel: http://linux.die.net/man/7/hier

davitenio
quelle
1
Dies beantwortet nicht die Frage des Benutzers.
Billy ONeal
14
Die Manpage enthält einen Eintrag für jedes der bin-Verzeichnisse, in dem erklärt wird, was darin enthalten ist, was eine der Fragen war.
Davitenio
34

Der Standardeintrag für die Dateisystemhierarchie in Wikipedia hat mir geholfen, die gleiche Frage zu beantworten, als ich sie hatte. Außerdem enthält er eine sehr erklärende Tabelle.

Auszug aus dieser Seite 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Abgerufen am 19. Juni 2019; Permalink .

Humphrey Bogart
quelle
17

Das sbinVerzeichnis enthält Programme, die in der Regel nur der Systemadministration dienen. Programme für normale Benutzer sollten nie in sie gehen.

Einige Programme werden während des Startvorgangs benötigt und enden in /bin/oder /sbin/. Diese müssen verfügbar sein, bevor Dateisysteme eingehängt werden. Dinge wie mountund fsckdie zum Überprüfen und Mounten von Dateisystemen benötigt werden, müssen vorhanden sein.

Die meisten Pakete landen in /usr/bin/und /usr/sbin/. Diese befinden sich möglicherweise in einem anderen Dateisystem als dem Root-Dateisystem. In einigen Fällen befinden sie sich möglicherweise auf einem Netzwerklaufwerk.

Lokale Programme und Skripte gehören in /usr/local/bin/und /usr/local/sbin/. Dies kennzeichnet sie eindeutig als nicht standardisiert und möglicherweise nur vor Ort verfügbar.

Führen Sie zur weiteren Erläuterung den Befehl aus, man hierder eine Beschreibung der empfohlenen Dateisystemhierarchie für Ihre Distribution enthalten sollte. Vielleicht möchten Sie auch etwas über die Dateisystemhierarchie auf Wikipedia lesen

BillThor
quelle
1
+1 Eine wirklich knappe Erklärung, wenn top etwas zu viel ist.
CppLearner
"Lokale Programme und Skripte gehören in / usr / local / bin / und / usr / local / sbin /" - Sie meinen lokale Programme wie in "überhaupt nicht zum Betriebssystem, aber ich habe mich entschieden, sie zu installieren und zu verwenden "?
Jim Aho
11

In den 1970er Jahren UNIXbefanden sich alle offiziellen ausführbaren Dateien in /binund /usr/binbefanden sich unter den Benutzerverzeichnissen (z. B. /usr/dmr), in denen jeder Benutzer eigene Binärdateien speichern konnte, die möglicherweise auch für andere von Interesse waren.

Das Ergebnis dieser Öffnung /usr/binwar ein Schrottplatz von undokumentierter Software, und so wurde Stephen Bourneeine geschrieben cron script, die jede Nacht nach neuen Binärdateien suchte und alle Binärdateien entfernte, die keine Dokumentation hatten oder die aktualisiert wurden, ohne ihre Dokumentation ebenfalls zu aktualisieren.

In den späten 1970er Jahren /usr/binwurde in die OS-Basisdistribution integriert und mit der Nutzung /usr/local/binfür den Zweck des vorherigen Open begonnen /usr/bin.

Nach einer Weile wurde in sysadmins Software /usr/local/bingespeichert non-local, die aus dem Netzwerk importiert wurde (z. B. USENET), und da UNIX-Unternehmen nicht den gleichen Fehler wie mit wiederholen wollten /usr/bin, fand um 1987 eine Konferenz zur Dateisystemhierarchie statt, auf der sich alle UNIX-Unternehmen einigten aufgeben /usr/local/binund /opt/<vendor>/binstattdessen benutzen .

Leider ist Linux Distributionen dieser Entscheidung nicht gefolgt ....

schily
quelle
Obwohl dies sehr interessant ist, versucht keines davon, die gestellte Frage zu beantworten, die sich /optnicht mit UNIX, sondern mit Linux befasste. Dies ist wie die Antwort "Warum haben Autos 4 Räder?" mit "Fahrräder haben 2! Autos leider nicht." was dem OP nicht hilft zu verstehen, warum Autos 4.
terdon
2
Wenn Sie die angegebene Erklärung nicht als Erklärung für den Hintergrund von Linux und die Tatsache, dass Linux gerne UNIX nachahmt, verwenden können, fehlt möglicherweise der erforderliche Hintergrund.
Schily
1
Interessant, aber etwas, das mich verwirrt und das vielleicht auch nur historisch ist. Heutzutage ist das Herunterladen eines Abfalleimers online und eines Unternehmensabfalleimers nicht sehr unterschiedlich. Wenn Joe Blow ein Programm erstellt und ich es herunterlade, warum sollte ich es nicht in / opt / JowBlow / bin anstelle von / usr / local / bin ablegen? Ist es eine Frage des vertrauenswürdigen Anbieters oder des nicht vertrauenswürdigen Anbieters? Es scheint mir keinen Sinn zu machen.
Didier A.
1
Ich wünschte, ich hätte diese „genaue“ Geschichte vor ein paar Jahren gekannt. a) Ich fragte mich, warum AIX / usr / local vermieden hat, / opt / IBM und / opt / ibm verwendet und Bullfreeware / opt / freeware verwendet - und warum ich einen anderen Pfad verwenden SOLLTE (nicht nur / opt / * sbin). Was die Semirelevanz unter Linux betrifft - bessere GNU-Tools - ist / usr / local das Standard-Präfix in Auto-Tools. Schade, dass Autotools (automake, autoconf usw. nicht folgen ... Aber wir alle überleben und erfahren, wo die Distributoren ihre Programme ablegen.
Michael Felt
Könnten wir noch eine dieser Konferenzen haben? Nur dieses Mal, alle zuhören!
MemphiZ