Was ist der Grund für das Verzeichnis `/ usr`?

107

Was ist der Grund für die „Unix Systemressourcen“, oder /usrVerzeichnis, wie hier , die viele der Verzeichnisnamen unter dem Stammverzeichnis kopiert /?

Mein Ziel: Ich installiere Oracle JDK zum x-ten Mal und entschied /home/usermich diesmal, es einfach zu unterbinden. Ich lese nur ein bisschen herum, um zu sehen, ob es eine schlechte Idee für einen einzelnen Benutzer ist.

H2ONaCl
quelle
1
Ihr Home-Verzeichnis ist der perfekte Ort, um Software von Drittanbietern als Nicht-Root zu installieren.
Lekensteyn
9
... die traurige Erkenntnis, weil Sie dachten /usr, ein verstecktes "Benutzer" -Verzeichnis für so viele Jahre zu bedeuten ...
Govind Rai
6
Ich dachte ernsthaft, es sei die ganze Zeit "Benutzer". Gefällt mir user binaries
Tanner Babcock

Antworten:

168

Es gibt die kurze Version und die lange Version Ihrer Antwort ...

Kurzfassung:

Wie Ihr Link bereits sagte, /usrist dies ein Ort für systemweite , schreibgeschützte Dateien. Alle Ihre installierte Software geht also dorthin. Es werden keine Namen von /except /binund dupliziert /lib, sondern ursprünglich mit einem anderen Zweck: /bin, /libDies gilt nur für Binärdateien und Bibliotheken, die zum Booten erforderlich sind , während dies /usr/bin, /usr/libfür alle anderen ausführbaren Dateien und Bibliotheken gilt. (Jetzt sei ein guter Junge und frag nicht nach /sbin, das ist doch die Kurzversion)

Heutzutage hat sich die Unterscheidung zwischen "zum Booten erforderlich" und "nicht verringert", da die meisten modernen Distributionen, einschließlich Ubuntu, ohne mehrere Dateien von nicht richtig booten können /usr. Und aus diesem Grund gibt es eine starke Bewegung in Richtung Zusammenführung /usr/binund /binwird wahrscheinlich in naher Zukunft (Ubuntu 12.10 vielleicht?) /binEin Symlink zu sein /usr/bin.

Aber vielleicht sind Sie verwirrend /usrund /usr/local? Denn ja, es gibt (und sollte) viele doppelte Verzeichnisnamen. Mehr dazu später ...

Lange Version:

In den 70er Jahren, in Unix (ja, Unix, lange vor Linux), hatten Disketten nur wenig Speicherplatz (keine HD, erinnerst du dich?), Und zu einem bestimmten Zeitpunkt wuchsen die System-Binärdateien in Anzahl und Größe zu stark, als dass dies der Fall wäre Die Entwickler mussten sie auf mehrere Datenträger aufteilen und so neue Einhängepunkte für sie erstellen. /binDateisystem voll war, so dass sie installiert die neuen Binärdateien auf ... /usr/bin. Und /usrwar zu dieser Zeit ihr ... Benutzerverzeichnis !

Nachdem die (fast peinliche und oft als Scherz / Überlieferung erzählte) Trennung stattgefunden hatte, begannen sie, "künstliche" Begründungen (und Kriterien) zu erstellen, um zu entscheiden, was gehen würde /binund was gehen würde /usr/bin. Die informelle Regel lautete: "Wesentliche" Dinge gehen an /bin, "der Rest" geht an /usr/bin. Gleiche mit /lib. Es /usrdauerte nicht lange, bis es mit systembezogenen Verzeichnissen, gemischt mit Benutzerverzeichnissen, überfüllt wurde. So /homewurde geboren, um alle benutzerbezogenen Verzeichnisse /usrsauber zu halten und nur für System "Sachen".

Dies war lange bevor es FHS gab. Als es geschaffen wurde, übernahm es die gegenwärtige Tradition (und formalisierte sie) und behielt den Namen /usr, obwohl es zu diesem Zeitpunkt bereits nichts mehr mit "Benutzer" zu tun hatte. Also ja, die Phantasienamen „ U NIX s ource r epository“ oder „ U NIX s ystem r ESSOURCEN“ sind alle konfektionierten Namen, und es ist zu spät , es trotzdem zu benennen. (aber nicht zu spät, um /bines zu verschmelzen )

"Ok, was ist mit /usr/sbin?" , du fragst. Verdammt, ich hatte gehofft, du hättest es vergessen. Ok ... /usr/sbinist für Befehle, die nur vom rootBenutzer ausgeführt werden können (oder nur sinnvoll sind) , wie mountund fdisk.

"Aber ist das nicht fast dasselbe wie /bin?" . Ja sicher, aber ...

"Warte, warum gibt es dann auch eine /sbin? Macht keinen Sinn!" . Nun, das liegt an ... ähm ... humm ...

Schau, ein dreiköpfiger Affe hinter dir!

Ok, hoffentlich hast du genug abgelenkt. Weitermachen ...

(Wenn Sie denken, ich betrüge, ja, Sie haben Recht. Aber so lautet die "offizielle" Antwort "wesentliche Befehle, die nur von root ausgeführt werden können und verfügbar sein müssen, bevor Sie überhaupt einsteigen /"). Die Wahrheit ist: Die Zeile ist in der Tat verschwommen, und es gibt viele alte Namen, die einfach "hängen geblieben" sind, und jetzt ist es ziemlich schwer, sie loszuwerden.

Weitere Informationen zum /usrZusammenschluss finden Sie in den systemdDokumenten:

Die historische Begründung für ein von / usr getrenntes / bin, / sbin und / lib gilt heute nicht mehr. Sie wurden aufgeteilt, um ausgewählte Tools auf einer schnelleren Festplatte zu haben (die klein war, weil sie teurer war) und um alle Tools zu enthalten, die zum Mounten der langsameren / usr-Partition erforderlich sind. Heutzutage muss eine separate / usr-Partition bereits während des frühen Bootens von den initramfs eingehängt werden, was die Rechtfertigung für einen Split-Off-Moot darstellt. Darüber hinaus haben viele Tools in / bin und / sbin im Status Quo bereits die Fähigkeit verloren, ohne ein vorinstalliertes / usr ausgeführt zu werden. Es gibt keinen gültigen Grund mehr, das Betriebssystem über mehrere Hierarchien zu verteilen, es hat seinen Zweck verloren.

Und eine erstaunliche Lektüre über die /usrSpaltung und ihre Gründe von Rob Landley:

Grundlegendes zum bin, sbin, usr / bin, usr / sbin split

Heutzutage

Bezüglich der Installationsverzeichnisse ist es derzeit am besten, wenn Sie wie folgt vorgehen:

  • /usr - Alle systemweiten schreibgeschützten Dateien, die vom Betriebssystem installiert (oder bereitgestellt) wurden

  • /usr/local- Systemweite, schreibgeschützte Dateien, die vom lokalen Administrator (normalerweise von Ihnen) installiert wurden. Und deshalb werden die meisten Verzeichnisnamen von /usrhier dupliziert.

  • /opt- eine Gräueltat für systemweite, schreibgeschützte und eigenständige Software. Das heißt, Software , die nicht ihre Dateien über nicht gespalten bin, lib, share, includewie gut erzogene Software sollte.

  • ~/.local- das Gegenstück pro Benutzer /usr/local, dh die von (und für) jeden Benutzer installierte Software

  • ~/.local/opt - das Gegenstück pro Benutzer von /opt

Wo also soll die Software installiert werden?

Die obige Liste ist bereits die halbe Antwort auf Ihre Oracle JDK-Frage, zumindest gibt es mehrere Hinweise. Die Checkliste zu "Wo soll ich Software X installieren?" verfliegt:

  • Handelt es sich um eine vollständig eigenständige Einzelverzeichnis-Software wie Eclipse IDE und andere heruntergeladene Java-Apps, die allen Benutzern zur Verfügung stehen soll? Dann installieren Sie in/opt

  • Wie oben, aber Sie interessieren sich nicht für andere Benutzer und ich möchte nur für Ihren Benutzer installieren? Dann installieren Sie in~/.local/opt

  • Die Dateien sind auf mehrere Verzeichnisse verteilt binund sharesollten wie herkömmliche Software, die mit kompiliert und installiert wurde ./configure && make && sudo make install, allen Benutzern zur Verfügung stehen. Dann installieren Sie in/usr/local

  • Wie oben, aber nur für Ihren Benutzer? Dann installieren Sie in~/.local

  • Software, die vom Betriebssystem oder über Paketmanager (z. B. Software Center) installiert wird, und vor allem, welche lokalen Änderungen werden möglicherweise überschrieben, wenn der Update Manager ein Upgrade auf eine neue Version durchführt ? Es geht um/usr

Anmerkungen:

  • Dies erklärt, warum das Standard-Installationspräfix für kompilierte Software lautet /usr/localund warum Sie es ändern sollten, ./configure --prefix=$HOME/.localwenn Sie Software nur für Ihren eigenen Benutzer installieren

  • Möglicherweise haben Sie bemerkt, dass alle oben genannten Verzeichnisse schreibgeschützt sind (außer natürlich, wenn Sie Software installieren / entfernen). Die beschreibbaren Dateien (wie auch die Konfigurationsdateien) gehen normalerweise zu /etc(für systemweite Software) und ~/.config(für Benutzereinstellungen). Obwohl viele ältere Softwareprodukte (und leider auch einige moderne) verwendet werden ~/.<software-name>, ist Ihr privater Ordner mit Milliarden von Verzeichnissen und Dateien überfüllt.

  • ~/.localund ~/.configsind nicht Teil der FHS-Spezifikation. FHS befasst sich nicht mit dem Home-Ordner des Benutzers. Sie sind ein Versuch von XDG, einer anderen Standardorganisation, die sich an Desktop-Umgebungen (wie Gnome, KDE und Unity) orientiert, um zu versuchen, einige Konventionen hinsichtlich der Struktur des Benutzerhauses festzulegen. Nicht alle Softwareprodukte halten sich daran (z. B. ~/.local/binnicht an die Standardeinstellungen des Benutzers $PATH, obwohl dies logischerweise der Fall sein sollte) , und kein Benutzer ist gezwungen, sich daran zu halten. In diesem Fall profitieren jedoch beide von zahlreichen Vorteilen für die Interoperabilität.

Ich hoffe, das hilft, die Dinge ein bisschen zu klären. Fühlen Sie sich frei, etwas zu fragen, damit ich die Antwort verbessern kann!

(und ich hoffe auch, dass Puristen mich nicht für solch eine äußerst informelle Sprache und Erklärung umbringen. Es war beabsichtigt und hat sicherlich viele Ungenauigkeiten, aber ich glaube, es ist eine gute Möglichkeit, einem Neuling einen kurzen Überblick über die Installation zu verschaffen Verzeichnisse rationales)

MestreLion
quelle
1
Sie haben es sehr kurz zusammengefasst und ja, es ist wahr - die vollständige Antwort ist eine viel längere Geschichte als die obige!
Papashou
Warum nicht? Die gleiche Logik gilt: Ein Angreifer kann eine ausführbare Datei unter dem Namen eines Systembefehls oder unter dessen Unterverzeichnis erstellen.
Ignis
3
@ignis: wenn ein Angreifer Zugang hat zum Erstellen und Ändern von Dateien unter einem Heim des Benutzers, dann wird der Benutzer bereits vollständig kompromittiert, und $PATHist irrelevant. Der Angreifer kann sogar ändern , dass über ~/.profile, so dass Ihr Punkt strittig ist. ~/.local/binist so sicher (oder unsicher, wenn Sie wollen) wie ~/bines in den meisten Distributionen üblich ist. Die Idee, dass ein Benutzer kein Verzeichnis haben sollte , in dem er persönliche Skripte aufbewahren und ausführen kann, $PATHist absurd.
MestreLion
Somit ~/binist es so sicher wie ~/.profileund $PATHschützt mich nicht vor Malware, die von mir ausgeführt wird (die die Berechtigung hat, in meinem eigenen Haus zu schreiben). Ich kannte diese Datei nicht, es tut mir leid. Vielen Dank für die Klarstellung, sorry für meinen vorherigen Kommentar.
Ignis
Je länger die Geschichte ist, desto mehr Verbesserung / Chaos gibt es.
Smwikipedia