Was ist / usr / local / bin?

85

Bis heute habe ich das Terminal nur in begrenztem Umfang zum Ein- und Aussteigen aus Verzeichnissen und zum Ändern der Dateidaten mit dem touchBefehl verwendet. Ich hatte den vollen Umfang des Terminals erkannt, nachdem ich ein unterhaltsames Skript auf dem Mac installiert und chmod 755die Datei benötigt hatte, um sie anschließend ausführbar zu machen.

Ich würde aber gerne wissen, was /usr/local/binist. /usr/Ich nehme an, ist der Benutzer des Computers. Ich bin mir allerdings nicht sicher, warum /local/es so ist. Es steht natürlich für den lokalen Computer, aber da es sich auf dem Computer (oder einem Server) befindet, wäre es wirklich notwendig? Wäre nicht /usr/bingut?

Und was ist /bin? Warum wird dieser Bereich normalerweise zum Installieren von Skripten auf dem Terminal verwendet?

JFW
quelle

Antworten:

77

/usr/local/bin ist für Programme, die ein normaler Benutzer ausführen kann.

  • Die /usr/localHierarchie wird vom Systemadministrator bei der lokalen Installation der Software verwendet.
  • Es muss sicher sein, dass es beim Aktualisieren der Systemsoftware nicht überschrieben wird.
  • Es kann für Programme und Daten verwendet werden, die von einer Gruppe von Hosts gemeinsam genutzt werden können, sich jedoch nicht in befinden /usr.
  • Lokal installierte Software muss in /usr/local/ usr abgelegt werden, es sei denn, sie wird installiert, um Software in zu ersetzen oder zu aktualisieren /usr.

Diese Quelle erläutert den Dateisystem-Hierarchiestandard auf einer tieferen Ebene.

Sie könnten diesen Artikel über den Gebrauch und Missbrauch von auch/usr/local/bin interessant finden.

iamsid
quelle
"" "es sei denn, es wird installiert, um Software in / usr" "zu ersetzen oder zu aktualisieren.
Pacerier
63

/ usr /, ich nehme an, ist der Benutzer des Computers.

Schließen.

Unix begann als Mehrbenutzer-Betriebssystem, es ist also nicht "der Benutzer", sondern "der Benutzer " im Plural.

Vor der Veröffentlichung von AT & T Unix System V Release 4 (SVR4) im Jahr 1988 mit seinen Benutzerverwaltungstools, in denen standardmäßig Benutzerverzeichnisse erstellt wurden /home, war der herkömmliche Speicherort /usr$HOMEMöglicherweise befand sich Ihr Verzeichnis /usr/jfwauf einer System III- Box.

/usrauch enthalten ist , damals wie heute /usr/bin, /usr/libusw. Die Erfahrung hat gezeigt , dass die Home - Verzeichnisse war gut System - Management - Praxis Absonderungs, so mit der /homeÄnderung der Politik in SVR4, es hinter sich gelassen alles denken wir jetzt , wie in angehören /usr.

/usrEs gab immer noch einen guten Grund, an dem Namen festzuhalten: Zurück blieben Dateien, die erst verfügbar sein mussten, wenn das System weit genug hochgefahren wurde, um die normale interaktive Nutzung zu unterstützen. Das heißt, was zurückblieb, waren die benutzerorientierten Teile des Betriebssystems. Dies bedeutete, dass es /usrsich um ein anderes physisches Volume handeln könnte, was zu Zeiten von 92-MB-Festplattenlaufwerken in der Größe von Waschmaschinen eine gute Sache war .

Frühe Unix-Systeme haben darauf geachtet, dass die Kernbetriebssystemdateien nicht vorhanden sind, /usrdamit Sie immer noch in den Einzelbenutzermodus² booten können, auch wenn das /usrVolume aus irgendeinem Grund nicht bereitgestellt werden konnte. Das Root-Volume enthielt genügend Tools, um das /usrVolume wieder online zu stellen.

Mehrere Unix - Varianten außer Acht lassen nun dieses alte Prinzip Design , da selbst kleine eingebettete Systeme für genügend Platz sowohl für die traditionellen Root - Volume - Dateien und alle /usrauf einem einzigen volume.³ Red Hat Enterprise Linux, Solaris und Cygwin Symlink /binauf /usr/binund /libzu , /usr/libso dass es keine länger keinen Unterschied zwischen diesen Verzeichnissen.

... / local / ... steht offensichtlich für den lokalen Computer ...

Ja. Es bezieht sich auf die Tatsache, dass Dateien unter /usr/localfür dieses einzelne System spezifisch sein sollen. Dateien, die in irgendeiner Weise generisch sind, sollten woanders abgelegt werden.

Dies hat auch Wurzeln in der Art und Weise, wie Unix-Systeme vor Jahrzehnten verwendet wurden, als dies alles standardisiert wurde. Wiederum waren Festplatten der damaligen Zeit sperrig, sehr teuer und nach heutigen Maßstäben wenig gelagert. Um Geld und Platz auf den Festplatten zu sparen, wurde in einem Computerraum mit Unix-Boxen häufig der größte Teil von /usrNFS oder einem anderen Netzwerk-File-Sharing-Protokoll gemeinsam genutzt, sodass nicht für jede Box eine eigene redundante Kopie erforderlich war box würde untergehen /usr/local, das wäre ein separates volumen von /usr.

Dieses historische Erbe ist der Grund, warum die meisten Unix-Programme von Drittanbietern standardmäßig /usr/localvon Hand installiert werden. Mit den meisten derartigen Softwareprogrammen können Sie das Paket an einem anderen Ort installieren. Wenn Sie jedoch keine Auswahl treffen, erhalten Sie die sichere Standardeinstellung, die andere häufig verwendete Installationsorte für bestimmte Zwecke nicht beeinträchtigt.

Es gibt gute Gründe, die Software an einem anderen Ort installieren zu lassen. Das macOS-Team von Apple tut dies, wenn es beispielsweise bashaus dem GNU Bash-Quellcode erstellt . Sie werden /als Installationspräfix verwendet und überschreiben das /usr/localStandardpräfix, sodass Bash in landet /bin.

Ein weiteres Beispiel ist die Art und Weise, in der ältere Linux-Systeme ihre GUI-Software /usr/X11R6von der herkömmlichen Befehlszeile und curses-basierter Software getrennt haben. Dies wurde einfach durch Überschreiben des Standardpräfixes /usr/localmit /usr/X11R6.⁵ erreicht

Und was ist / bin?

Es ist die Abkürzung für "binär" und bedeutet in diesem Zusammenhang "eine Datei, die kein reiner Text ist". Die meisten dieser Dateien sind auf einer Unix-Box ausführbar , so dass diese beiden Begriffe in manchen Kreisen synonym sind. ("Bitte baue mir eine Binärdatei für RHEL 7, Fred.")

Text - Dateien auf einer Unix - Box anderswo leben: /etc, /usr/include, /usr/shareetc.

Es war einmal so, dass selbst Shell-Skripte - das sind reine Textdateien - aus binVerzeichnissen herausgehalten wurden, aber auch diese Zeile ist verschwommen. Heutzutage binenthalten Verzeichnisse normalerweise jede Art von ausführbarer Datei, ob rein "binär" oder nicht


Fußnoten und Exkursionen :

  1. Der primitive Charakter der Benutzerverwaltungstools vor SVR4 bedeutete, dass das HOME=/usr/$NAMESchema lediglich als Konvention dokumentiert und nicht standardmäßig von Softwaretools erzwungen wurde.

    Sie finden dies auf Seite 4-8 des " AT & T Unix System V Release 3.2-Systemverwalterhandbuchs" : Hier sieht man, wie AT & T das alte /usr/$NAMESchema in der letzten Hauptversion von Unix vor dem Erscheinen von SVR4 empfiehlt .

    In älteren Unix-Systemen war es üblich, dass die Systemadministratoren ein anderes Schema auswählten, das für sie sinnvoller war. Menschen, die Menschen sind, das bedeutete, dass viele verschiedene Schemata erfunden wurden.

    Ein Schema, auf das ich stieß, /home/$NAMEwurde zum Standard /u/$NAME.

    Ein anderes System habe ich in den frühen 1990er Jahren hatte so viele Nutzer , dass sie nicht alle Home - Verzeichnisse auf einem einzigen physischen Volumen passen könnte, so verwendet sie ein System wie /u1/$NAME, /u2/$NAMEund so weiter, wie ich mich erinnere. Auf welcher Festplatte sich Ihr Home-Verzeichnis befand, war einfach eine Frage des Speicherplatzes, der sich zum Zeitpunkt der Erstellung Ihres Kontos darauf befand.

  2. Sie können eine macOS-Box im Einzelbenutzermodus booten, indem Sie sie beim Booten gedrückt halten Cmd-S. Lassen Sie los, sobald der Bildschirm schwarz wird und Sie hellgrauen Text sehen. Es ist, als würde man unter dem Terminal laufen, aber es nimmt den gesamten Bildschirm ein, da die GUI noch nicht gestartet wurde.

    Sei vorsichtig, du rennst als root.

    Geben Sie an der Single-User-Root-Eingabeaufforderung "exit" ein, um den Single-User-Modus zu verlassen und mit dem Booten im Multi-User-GUI-Modus fortzufahren.

  3. Unixy OSes , die noch erscheinen kritische Einbenutzermodus Dateien aus halten zu /usrdürfen, in der Tat zu tun in diesen Tagen so. Ich habe einmal eine FreeBSD 9-Box durch Verschieben /usrauf ein ZFS-Volume nicht mehr bootfähig gemacht . Ich habe vergessen, dass die ZFS-on-Root-Funktionen erst mit FreeBSD 10 gelandet sind und einen Catch 22 erstellt haben : Das Betriebssystem benötigte Dateien, /usrum zu mounten /usr!

    Das war schon schlimm genug, aber wenn FreeBSD 9 immer noch seine Single-User-Boot-Sachen raushielt /usr, hätte ich das Problem beheben können. Da es nicht einmal im Einzelbenutzermodus booten würde, wenn es nicht /usreinbindbar wäre, wurde diese Tradition offensichtlich irgendwie verletzt. Ich musste von einer Rettungs-CD booten, um das System wieder hochzufahren.

  4. Hier bekommen wir auch /usr/share: Es trennt Dateien, die sogar von Unix-Boxen mit verschiedenen Prozessortypen gemeinsam genutzt werden können. In der Regel Textdateien: Manpages, das Wörterbuch usw.

  5. "X11R6" bezog sich auf die Version des X Window-Systems, die Linux-GUIs zu der Zeit untermauerte, als diese Konvention vorherrschte. Linux-Systeme hörten im Allgemeinen auf, die GUI-Software zu trennen, als X11R6 durch X.Org ersetzt wurde .

  6. Die ursprünglichen Unix-Systeme behielten ihre Kern-Shell-Skripte bei, /etcum zu vermeiden, dass sie mit den echten Binärdateien in verwechselt werden /bin.

Warren Young
quelle
3
Liebte das Bild der Waschmaschine!
Asgs
@Warren, Was sind die bemerkenswerten Betriebssysteme vor System III?
Pacerier
@Pacerier: UNIX-Versionen 1 bis 7, UNIX / 32V, 1BSD bis 4BSD ohne die Dot-Releases von 4BSD (4.1BSD war ungefähr zeitgleich mit AT & T Unix System III) und PWB Unix. Quelle . Warum fragst du und was hat das mit dieser Frage zu tun?
Warren Young
@Warren, Nun, sie könnten das defacto "Directory Naming System" irgendwie beeinflusst haben
Pacerier
@ Pacerier: Ich stehe zu meiner Behauptung: Vor System V gab es keinen "Standard", nur Konventionen und lokale Praktiken.
Warren Young
9

Ich würde empfehlen, bei Fragen zur Struktur allgemein auf Wikipedia zurückzugreifen. Dort werden die Grundlagen behandelt.

Um Ihre Frage jedoch direkt zu beantworten:

  • / usr ist locker eine unkritische Systembibliothek und ausführbare Datei
  • / usr / local ist wieder locker für Nicht-Systembibliotheken und ausführbare Dateien

Aus diesem Grund tendieren Sie dazu, eine ähnliche Struktur zwischen den beiden zu finden. / usr / {, local /} {bin, sbin, lib}. Da die Shell neu ist, handelt es sich bei dem Bit mit den {} 's um eine Shell-Erweiterung. Versuchen Sie die Ausführung

ls -ld /usr/{,local/}{bin,sbin,lib}

von Ihrer lokalen Shell, um zu sehen, wie es funktioniert.

Tok
quelle
9

/usr/local/bin zeigt die UNIX-ähnlichen Wurzeln des neuesten Mac OS (dessen BSD darunter basiert).

  • "usr" steht für UNIX System Resources. Dies ist der Ort, an dem Systemprogramme und Bibliotheken gespeichert werden.
  • "lokal" steht für Ressourcen, die nicht mit der Standarddistribution ausgeliefert wurden und normalerweise auf Standortbasis kompiliert und verwaltet werden.
  • "bin" steht für binär kompilierte ausführbare Dateien.

Dies hat sich seit den frühen Implementierungen von UNIX auf Linux und BSD geändert, aber die Konvention ist geblieben. Nun, /usr/binwäre für "Haupt" oder Kernprogramme und Bibliotheken, wo /usr/local/binfür Add-On und unkritische Programme und Bibliotheken wäre.

nzwulfin
quelle
12
Ich verwende Unix seit dem Fall der Berliner Mauer und habe bis heute noch nie die Erweiterung "Unix System Resources" für "usr" gehört. Es ist ein Backronym. "usr" erhielt seinen Namen, weil sich dort ursprünglich die Benutzer-Home-Verzeichnisse befanden. Wenn Sie sich also bei einer alten System III-Box angemeldet hätten, wäre Ihr anfängliches Arbeitsverzeichnis /usr/nzwulfinstandardmäßig. Ein weiteres gängiges Schema. bevor das SVR4- /homeSchema übernahm, war /u. Ein System, das ich früher verwendet habe, hatte so viele Benutzer, dass sie mehrere physische Festplatten für die Speicherung von Benutzerdateien benötigten, also hatten sie Dinge wie /u/d5/tangent.
Warren Young
3
@Warren Ich hatte es auch nicht gehört und stöberte eine Weile in Google herum. es hört sich so an, als gäbe es eine ganze Reihe von Backronyms
Michael Mrozek
4

/usr/local/bin ist der beliebteste Standardspeicherort für ausführbare Dateien, insbesondere für Open Source-Dateien.

Dies ist jedoch wahrscheinlich eine schlechte Wahl, da es auf Unix-Systemen /usrAnfang der neunziger Jahre standardisiert wurde, um eine Hierarchie von Dateien zu enthalten, die zum Betriebssystem gehören und daher von mehreren Systemen unter Verwendung dieses Betriebssystems gemeinsam genutzt werden können.

Da diese Dateien statisch sind, kann das /usrDateisystem schreibgeschützt bereitgestellt werden. /usr/localbesiegt diesen Standard, da er vom Design her lokal ist und daher nicht gemeinsam genutzt wird. Er muss daher Lese- und Schreibzugriff haben, um eine lokale Kompilierung zu ermöglichen, und ist nicht Teil des Betriebssystems. Schade, dass /opt/localnicht stattdessen so etwas gewählt wurde ...

jlliagre
quelle
1

Ich empfehle die Verwendung /usr/localfür kommerzielle Programme, die Sie möglicherweise installieren, z. B. Mathematica. Platzieren Sie es beim Einrichten in einer eigenen Partition. Wenn Sie Ihr Betriebssystem aktualisieren, wird diese Partition nicht gestört und Sie müssen den Inhalt nicht erneut installieren. Verwenden Sie es also für Dinge, die Sie zwischen Betriebssystem-Upgrades aufbewahren möchten.

Stellen Sie auch /homeaus diesem Grund sicher, dass Sie eine eigene Partition angeben.

ncmathsadist
quelle
0

Diese Antwort könnte ebenfalls hilfreich sein.

/ usr / local

Die ursprüngliche Idee dahinter /usr/localwar, auf jeder Maschine ein separates ('lokales') '/ usr'-Verzeichnis zu haben /usr, das möglicherweise nur von einer anderen Stelle aus schreibgeschützt eingehängt werden kann. Es kopiert die Struktur von /usr.

Heutzutage wird /usr/locales allgemein als ein guter Ort angesehen, um selbst kompilierte Programme oder Programme von Drittanbietern aufzubewahren. Die /usr/localHierarchie wird vom Systemadministrator bei der lokalen Installation der Software verwendet. Es muss sicher sein, dass es beim Aktualisieren der Systemsoftware nicht überschrieben wird.

Es kann für Programme und Daten verwendet werden, die von einer Gruppe von Hosts gemeinsam genutzt, jedoch nicht in gefunden werden /usr. Lokal installierte Software muss innerhalb platziert werden , /usr/localals vielmehr , /usrwenn es installiert wird, ersetzen oder aktualisieren Software /usr.

Vishwanath gowda k
quelle