Warum gibt es unter Linux so viele Stellen, an denen eine Binärdatei abgelegt werden kann? Es gibt mindestens diese fünf:
-
/bin/
-
/sbin/
-
/usr/bin/
-
/usr/local/bin/
-
/usr/local/sbin/
Und auf meiner Office-Box habe ich keine Schreibberechtigungen für einige von diesen.
Welche Art von Binärdatei geht in welche dieser bin
s?
Kommentare
- Sie haben
/usr/sbin/
vergessen . - Und
~/bin/
für persönliche Dinge. - Es gibt heutzutage weniger Orte, da
/bin
wurde mit/usr/bin
zusammengeführt und/sbin
wurde mit/usr/sbin
zusammengeführt – siehe Der Fall für die / usr-Zusammenführung . - @Calmarius, was? Sollte ‚ nicht
/usr/local/bin
verwendet werden? - @Pacerier ~ / bin ist nur für den aktuellen Benutzer. Zum Beispiel auf Mehrbenutzer-Linux-Servern, auf denen Sie kein Administrator sind und ‚ die einzige Möglichkeit ist, “ Sachen für sich.
Antwort
-
/bin
(und/sbin
) waren für Programme gedacht, die sich auf einer kleinen/
-Partition vor der größeren befinden mussten/usr
usw. Partitionen wurden bereitgestellt. Heutzutage dient es hauptsächlich als Standardspeicherort für Schlüsselprogramme wie/bin/sh
, obwohl die ursprüngliche Absicht z. Installationen auf kleinen eingebetteten Geräten. -
/sbin
im Unterschied zu/bin
ist für Systemverwaltungsprogramme (normalerweise nicht von normalen Benutzern verwendet), die benötigt werden, bevor/usr
bereitgestellt wird. -
/usr/bin
ist für verteilungsverwaltete normale Benutzerprogramme vorgesehen. -
Es gibt eine
/usr/sbin
mit derselben Beziehung zu/usr/bin
als/sbin
muss/bin
. -
/usr/local/bin
ist für normale Benutzerprogramme nicht , die vom Distributionspaket-Manager verwaltet werden, z lokal kompilierte Pakete. Sie sollten sie nicht in/usr/bin
installieren, da zukünftige Distributions-Upgrades sie ohne Vorwarnung ändern oder löschen können. -
/usr/local/sbin
ist, wie Sie an dieser Stelle wahrscheinlich erraten können,/usr/local/bin
als/usr/sbin
bis/usr/bin
.
Zusätzlich gibt es auch /opt
, was jedoch für monolithische Nichtverteilungspakete gilt Bevor sie richtig integriert wurden, haben verschiedene Distributionen Gnome und KDE dort platziert. Im Allgemeinen sollten Sie es für große, schlecht benommene Pakete von Drittanbietern wie Oracle reservieren.
Kommentare
- Ich denke, diese Antwort leistet einen großartigen Beitrag zur Klärung eine gängige Reihe von Konventionen, aber dieser Beitrag von Rob Landley ist eine wirklich gute Lektüre, wenn Sie einen Einblick in den Unsinn erhalten möchten … lists.busybox.net/pipermail/busybox/2010 -Dezember / 074114.html
- refspecs.linuxfoundation.org/fhs.shtml für die kanonische aktuelle Referenz. Der Link von @kojiro ist veraltet und ‚ hat nicht die neue Spezifikation.
- Wo lege ich einen Behälter ab, den ich aus dem Internet heruntergeladen habe? Aus Ihrer Beschreibung geht hervor, dass es in / usr / local / bin oder / usr / bin abgelegt werden sollte. Ist / usr / bin etwas, das ich niemals manuell berühren und nur den Paketmanager spielen lassen sollte?
- @DidierA. Fügen Sie es in
~/bin
ein und fügen Sie dieses Verzeichnis Ihrem PATH als Benutzer hinzu … Vielen Dank für den Hinweis, ich habe meinen ernsthaft veralteten Kommentar gelöscht. - Ich habe das gefunden Antwort auf den ersten Teil meiner Frage hier: superuser.com/a/238993/425838 . Die Priorität basiert auf der Reihenfolge in der Systemvariablen
PATH
, undecho $PATH
zeigt für mich/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
an Dies bedeutet, dass ausführbare Dateien in/usr/local/bin
Vorrang vor denen in/usr/bin
haben, die Vorrang vor denen in .
Antwort
Ich empfehle einen Blick auf die Manpage zur Dateisystemhierarchie:
man hier
, das auch online verfügbar ist, zum Beispiel: http://linux.die.net/man/7/hier . Relevante Teile wurden unten kopiert. Abhängig von Ihrem System kann es etwas anderes sagen.
Name
hier – Beschreibung der Dateisystemhierarchie
Beschreibung
Ein typisches Linux-System verfügt unter anderem über die folgenden Verzeichnisse:
/bin
Dieses Verzeichnis enthält ausführbare Programme, die für einzelne Benutzer benötigt werden Modus und um das System aufzurufen oder zu reparieren.
/sbin
Wie
/bin
dieses Verzeichnis Enthält Befehle, die zum Starten des Systems erforderlich sind, aber normalerweise nicht von normalen Benutzern ausgeführt werden.
/usr/bin
Dies ist das primäre Verzeichnis für ausführbare Programme. Die meisten von normalen Benutzern ausgeführten Programme, die zum Booten oder Reparieren des Systems nicht benötigt werden und die nicht lokal installiert sind, sollten in diesem Verzeichnis abgelegt werden.
/usr/local/bin
Binärdateien für lokale Programme.
/usr/local/sbin
Lokal installierte Programme für die Systemadministration.
/usr/sbin
Dieses Verzeichnis enthält Programm-Binärdateien für die Systemadministration, die für den Startvorgang, für das Mounten von
/usr
oder für die Systemreparatur nicht unbedingt erforderlich sind .
Kommentare
- Dies ist nicht ‚ Beantworten Sie die Frage des Benutzers ‚ nicht.
- Die Manpage enthält einen Eintrag für jedes der bin-Verzeichnisse, in dem erläutert wird, was geht auf sie ein, was eine der Fragen war.
Antwort
Die Dateisystemhierarchie Der Eintrag chy Standard in Wikipedia hat mir geholfen, die gleiche Frage zu beantworten, als ich sie hatte, und sie enthält 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 .
Antwort
Die sbin
-Verzeichnisse enthalten Programme, die im Allgemeinen nur der Systemadministration dienen. Programme für normale Benutzer sollten niemals in sie aufgenommen werden.
Einige Programme werden während des Startvorgangs benötigt und landen in /bin/
oder /sbin/
. Diese müssen verfügbar sein, bevor Dateisysteme bereitgestellt werden. Dinge wie mount
und fsck
, die zum Überprüfen und Mounten von Dateisystemen erforderlich sind, müssen vorhanden sein.
Die meisten Pakete Programme landen in /usr/bin/
und /usr/sbin/
. Diese können sich in einem anderen Dateisystem als dem Root-Dateisystem befinden. In einigen Fällen befinden sie sich möglicherweise auf einem im Netzwerk bereitgestellten Laufwerk.
Lokale Programme und Skripte gehören zu /usr/local/bin/
und /usr/local/sbin/
. Dies identifiziert sie als eindeutig nicht standardisiert und möglicherweise nur vor Ort verfügbar.
Zur weiteren Erläuterung führen Sie den Befehl man hier
aus, der eine Beschreibung der empfohlenen Dateisystemhierarchie für Ihre Distribution enthalten sollte. Vielleicht möchten Sie auch über die Dateisystemhierarchie auf Wikipedia
Kommentare
- “ Lokale Programme und Skripte gehören in / usr / local / bin / und / usr / local / sbin / “ – Sie meinen lokale Programme wie in „, die überhaupt nicht Teil des Betriebssystems sind, aber ich habe mich für die Installation entschieden sie und möchten sie verwenden „?
Antwort
In den 1970er Jahren hatte UNIX alle offiziellen ausführbaren Dateien in /bin
und /usr/bin
befand sich unter den Home-Verzeichnissen der Benutzer (z. B. /usr/dmr
), die jedem Benutzer zum Speichern eigener Binärdateien zur Verfügung stand, die möglicherweise auch für andere von Interesse waren.
Das Ergebnis dieser offenen /usr/bin
war ein Schrottplatz für undokumentierte Software und so wurde Stephen Bourne wro te ein cron-Skript, das jede Nacht nach neuen Binärdateien suchte und alle Binärdateien entfernte, die keine Dokumentation hatten oder die aktualisiert wurden, ohne auch ihre Dokumentation zu aktualisieren.
In den späten 1970er Jahren war /usr/bin
wurde in die Basisverteilung des Betriebssystems integriert, und die Benutzer verwendeten /usr/local/bin
für den Zweck des vorherigen offenen /usr/bin
Nach einer Weile verwendeten Sysadmins /usr/local/bin
, um nicht lokale Software zu speichern, die aus dem Netzwerk importiert wurde (z USENET) und da UNIX-Unternehmen nicht den gleichen Fehler wie bei /usr/bin
wiederholen wollten, gab es um 1987 eine Konferenz zur Dateisystemhierarchie, bei der sich alle UNIX-Unternehmen bereit erklärten, /usr/local/bin
und stattdessen /opt/<vendor>/bin
verwenden.
Leider sind Linux-Distributionen dieser Entscheidung nicht gefolgt …
Kommentare
- Obwohl sehr interessant, nichts davon versucht sogar, die gestellte Frage zu beantworten, bei der es nicht um
/opt
und nicht um UNIX, sondern um Linux ging. Dies ist wie das Beantworten von “ Warum haben Autos 4 Räder? “ mit “ Fahrräder haben 2! Leider helfen Autos nicht ‚ t. „, was ‚ dem OP nicht hilft, zu verstehen, warum Autos haben 4. - Wenn Sie die angegebene Erklärung nicht als Erklärung für den Hintergrund von Linux und die Tatsache, dass Linux gerne UNIX imitiert, verwenden können, fehlt Ihnen möglicherweise der erforderliche Hintergrund.
- Interessant, aber etwas, bei dem ich verwirrt bin 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 nicht in / opt / JowBlow / bin anstelle von / usr / local / bin. Handelt es sich um einen vertrauenswürdigen Anbieter oder um einen nicht vertrauenswürdigen? ‚ scheint mir keinen Sinn zu ergeben.
- Ich wünschte, ich hätte diese ‚ genau ‚ Geschichte vor einigen Jahren. a) Ich habe mich gefragt, warum AIX / usr / local vermieden hat, / opt / IBM und / opt / ibm verwendet und bullfreeware / opt / freeware verwendet – und warum ich einen anderen Pfad hätte verwenden sollen (nicht nur / opt / * sbin). In Bezug auf die Semi-Relevanz unter Linux – bessere GNU-Tools – lautet das Standardpräfix in Auto-Tools / usr / local. Schade, dass Autotools (Automake, Autoconf usw. nicht folgen … Aber wir alle überleben und lernen, wo die Distrub. || Anbieter ihre Programme platzieren.
- Könnten wir noch eine dieser Konferenzen abhalten? Nur dieses Mal, JEDER HÖRT!