Was ist der Unterschied zwischen / opt und / usr / local?


404

Nach dem Hierarchy Standard - Dateisystem , /optist für „die Installation von Add-On - Software - Paketen“. /usr/localist "für den Systemadministrator bei der lokalen Installation von Software". Diese Anwendungsfälle scheinen ziemlich ähnlich zu sein. Software, die nicht in den Distributionen enthalten ist, ist normalerweise standardmäßig so konfiguriert, dass sie entweder /usr/localoder /optohne einen bestimmten Reim oder Grund, den sie gewählt haben , installiert wird .

Gibt es einen Unterschied, den ich vermisse, oder tun beide dasselbe, existieren aber aus historischen Gründen?


3
Mein Verständnis ist, dass dies /usr/localeine lokale Version des /usrDateisystems ist, wohingegen /optPlatzhalter für verschiedene Dinge ist.
Yasouser

5
Ähnliche Frage in Ubuntu fragen , Superuser
Kenchew

Off-Topic aus historischen Gründen: Das Verständnis von bin, sbin, usr / bin, usr / sbin split .
Alexey

Antworten:


357

Während beide Dateien enthalten sollen, die nicht zum Betriebssystem gehören, /optund /usr/localnicht denselben Satz von Dateien enthalten sollen.

/usr/localist ein Ort zum Installieren von Dateien, die vom Administrator erstellt wurden, normalerweise mithilfe des makeBefehls (z ./configure; make; make install. B. ). Die Idee ist, Konflikte mit Dateien, die Teil des Betriebssystems sind, zu vermeiden, die entweder überschrieben oder die lokalen überschrieben würden (z. B. /usr/bin/fooTeil des Betriebssystems, während dies /usr/local/bin/fooeine lokale Alternative ist).

Alle Dateien unter /usrsind zwischen Betriebssysteminstanzen gemeinsam nutzbar, obwohl dies unter Linux selten der Fall ist. Dies ist ein Teil, in dem sich die FHS geringfügig widerspricht, da /usrsie als schreibgeschützt definiert ist, jedoch /usr/local/binLese- und Schreibzugriff benötigt, damit die lokale Installation der Software erfolgreich ist. Der SVR4-Dateisystemstandard, der die Hauptinspirationsquelle für FHS war, empfiehlt, dieses Problem zu vermeiden /usr/localund /opt/localstattdessen zu verwenden, um dieses Problem zu beheben.

/usr/localist ein Erbe aus dem ursprünglichen BSD. Zu dieser Zeit /usr/binbefanden sich der Quellcode der Betriebssystembefehle in /usr/src/binund /usr/src/usr.bin, während sich die Quelle der lokal entwickelten Befehle in /usr/local/srcbefand und deren Binärdateien in /usr/local/bin. Es gab keine Vorstellung von Verpackung (außerhalb von Tarballs).

Auf der anderen Seite /optbefindet sich ein Verzeichnis für die Installation entbündelter Pakete (dh Pakete, die nicht Teil der Betriebssystemdistribution sind, aber von einer unabhängigen Quelle bereitgestellt werden). Jedes Verzeichnis befindet sich in einem eigenen Unterverzeichnis. Sie bestehen bereits aus kompletten Paketen, die von einem unabhängigen Softwarehändler bereitgestellt werden. Im Gegensatz zu /usr/localDingen folgen diese Pakete den Verzeichniskonventionen (oder sollten es zumindest tun). Beispielsweise someappwürde installiert werden in /opt/someapp, wobei einer seiner Befehle lautet /opt/someapp/bin/foo, seine Konfigurationsdatei wäre in /etc/opt/someapp/foo.confund seine Protokolldateien wären in /var/opt/someapp/logs/foo.access.


53
/ usr / local, für selbst erstellte, kompilierte und gewartete Software. / opt ist für den externen, vorgefertigten Installationsbereich für Binärpakete / Anwendungspakete vorgesehen. Hmmm ... wir haben nicht für alles C: \ Programme ;-)
Nikhil Mulley

2
"Auf der anderen Seite ist / opt ein Verzeichnis, in dem entbündelte Pakete installiert werden." Was bedeutet "entbündelte" Pakete hier?
Kevin Wheeler

1
@ KevinWheeler Das wird im nächsten Satz erklärt. Unbundled bedeutet, dass Pakete nicht Teil der Betriebssystem-Distribution sind, sondern von einer unabhängigen Quelle bereitgestellt werden.
Juli

2
@jlliagre the centos docs * state "Wenn beispielsweise das Verzeichnis / usr / als schreibgeschützte NFS-Freigabe von einem Remote-Host bereitgestellt wird, ist es weiterhin möglich, ein Paket oder Programm im Verzeichnis / usr / local / zu installieren." Ich weiß nicht, wer Recht hat, aber dies scheint im Widerspruch zu Ihrer Behauptung zu einem Bereich zu stehen, in dem die FHS schwach ist. (* source centos.org/docs/5/html/5.1/Deployment_Guide/… )
Kevin Wheeler

1
@ KevinWheeler Das ist genau die Schwäche, auf die ich mich beziehe. Das Installieren eines Pakets oder eines Programms in einem schreibgeschützten Remote-Verzeichnis ist einfach nicht möglich. Die Problemumgehung besteht darin, ein lokales Dateisystem unter / usr / local bereitzustellen, dies sieht jedoch eher nach einem Behelfsjob aus als nach einem ordnungsgemäß gestalteten.
Juli

84

Der grundlegende Unterschied besteht darin, dass /usr/localfür Software, die nicht vom System Packager verwaltet wird, die standardmäßigen Unix-Bereitstellungsregeln eingehalten werden.

Deshalb haben Sie /usr/local/bin, /usr/local/sbin /usr/local/includeetc ...

/optAuf der anderen Seite handelt es sich um Software, die nicht darauf folgt und monolithisch eingesetzt wird. Dies schließt normalerweise kommerzielle und / oder plattformübergreifende Software ein, die im "Windows" -Stil gepackt ist.


12
Ich bin nicht einverstanden mit Ihrem monolithischen Standpunkt. Der FHS-Standard besagt, dass Pakete, die in / opt-Unterverzeichnissen installiert sind, ihre hostspezifischen Dateien außerhalb von / opt bzw. unter / etc / opt / package für Konfigurationsdateien und / var / opt / package für Protokolle, Spools und ähnliches installieren müssen. / opt ist eigentlich näher an den Unix-Bereitstellungsregeln als / usr / local, wodurch alles in einem Verzeichnis abgelegt wird, das schreibgeschützt sein sollte, aber aus offensichtlichen Gründen nicht sein kann.
Jlliagre

5
Klar, wenn ich ein Opt-Package machen würde und FHS-Konformität fordern möchte. Ansonsten ist der Standard mehr, was Sie "Richtlinien" nennen würden. Nur weil NetBeans / etc / opt / netbeans nicht verwendet, kann ich es nicht in / opt für das gesamte System oder in $ HOME / .local / opt für einen einzelnen Benutzer ablegen.
14.

1
@jla Ich gehe davon aus, dass Ihr letzter Kommentar an mich gerichtet war. Verwenden Sie also bitte @ xxx, wenn Sie jemand anderem antworten, dass das OP oder der Antwortautor. In Bezug auf / etc / opt gibt das FHS nicht an, dass es sich um einen empfohlenen Speicherort handelt (als Richtlinie), sondern um einen obligatorischen Speicherort. Es steht Ihnen oder Netbeans-Entwicklern frei, gegen diesen Standard zu verstoßen, da es keine Autorität gibt, diesen durchzusetzen. Es ist nur ein bedauerliches Missverständnis oder eine vorsätzliche Verletzung.
Juli

8
@jlliagre Als Administrator meines Systems besteht die FHS aus einer Reihe von Richtlinien. Das Verzeichnis / opt ist der gängige Ort, an dem monolithische / opt / <package> - oder / opt / <provider> -Software abgelegt wird. Wenn ich ein Paket installiere, das <package | provider> / all / data / required / to / support verwenden möchte, wird opt / aktiviert, auch wenn der Anbieter nicht alle Details der neuesten FHS befolgt. Möglicherweise sende ich eine E-Mail oder melde einen Fehler, aber ich werde dieses monolithische Paket nicht an einer anderen Stelle ablegen, um mich in Bezug auf FHS auf meinem System besser zu fühlen.
27.

1
@jlliagre Ich habe viele Dinge in / opt installiert und in / etc / opt wird keine Datei erstellt. Sollte?
erm3nda

18

Sie sind in der Tat sehr ähnlich, und die Verwendung des einen oder anderen ist eher eine Ansichtssache. Das Linux-Journal hatte diesen Punkt / Kontrapunkt zu diesem genauen Thema hier .


9
Ach je. Ich wollte mich nicht in einen "heiligen Krieg" hineinziehen.
Patches

13

Für mich persönlich ist es das, was Bill in @ philfrs Link gesagt hat:

Auf einem Entwicklungssystem oder einer Sandbox ist es sehr sinnvoll, ein / opt-Verzeichnis zu haben, in dem Sie einfach Dinge werfen und prüfen können, ob sie funktionieren. Ich weiß, dass ich nicht die Mühe machen werde, Dinge selbst zu verpacken, um sie auszuprobieren. Wenn die App nicht funktioniert, können Sie einfach das Verzeichnis / opt / mytestapp abrufen und die Anwendung ist Geschichte. Das Packen mag sinnvoll sein, wenn Sie eine große Bereitstellung ausführen (manchmal mache ich Pack-Apps), aber oft ist es schön, Dinge in / opt zu werfen.

Leider pushen die meisten make installSkripte Dateien, /usr/localanstatt nur einen Symlink zu erstellen : - /


2
Was wäre der Punkt? Wenn Sie den Symlink trotzdem erstellen möchten, platzieren Sie die Originaldatei dort an erster Stelle.
Let_Me_Be

8
Nur um das make installZiel zu kommentieren, in das Dateien verschoben werden /usr/local. Diese Funktionalität ist leicht veränderbar durch einen vorübergehenden --prefix=Kommandozeilenparameter an das ./configureSkript, oder wenn es keine ./configureSkript können Sie einen Parameter in dem Pass makeZiel wie folgt: make --prefix=/usr install.
Sean C.

3
Ist / opt ein Standardverzeichnis in $ PATH? Ich weiß, dass / usr / local ist.
LawrenceC

5
@Let_Me_Be der Vorteil wäre, dass es sehr einfach ist, ältere Versionen zu behalten. Nehmen wir an, ich habe 2 Versionen von 'foo', die sich in /opt/foo-1.1und befinden /opt/foo-1.2. Wenn ich aktualisiere, fooverweise ich in /usr/local/binPunkten auf foo-1.2. Wenn ich aus irgendeinem Grund ein Rollback durchführen muss, ersetze ich einfach den Symlink durch einen, der stattdessen auf foo-1.1 verweist. Wenn 1.2 nach einigen Wochen in Ordnung ist, entfernt a quick rm -rf /opt/foo-1.1die ältere Version schnell und sauber.
Pepoluan

7
@ultrasawblade nein ist es nicht. und sollte es niemals sein. Immerhin muss / opt laut FHS in Unterverzeichnisse unterteilt werden, die den Namen des Pakets tragen. Alles in PATH zu stopfen ist ein todsicherer Weg zur Katastrophe. Apps sollten sich stattdessen unter / opt installieren und ihre vom Benutzer aufgerufenen Programme mit / usr / local / bin (oder sbin) verknüpfen.
Pepoluan

11

Erstens glaube ich nicht, dass es eine strenge Antwort gibt. Verschiedene Administratoren haben je nach Hintergrund unterschiedliche Meinungen. Historisch gesehen war /usr/locales das erste Mal. Es war die Tagung in Berkley, IIRC. Zu einem Zeitpunkt während der Entwicklung von System V gab es, wenn ich mich nicht irre (das ist alles schon lange her und ich habe mir keine Notizen gemacht), eine Entscheidung oder den Wunsch, nur /usrLesezugriff aktivieren zu können. was bedeutete, dass Sie keine neue Software hinzufügen konnten; Das mag der Grund gewesen sein, warum /opt es erfunden wurde. Zufällig gab es so viel Software, die geschrieben hat, /usrdass diese Idee nie wirklich auf den Weg gebracht wurde.

Meine persönliche Präferenz ist /opt, mit einem separaten Unterverzeichnis für jedes Produkt; Dies macht das Entfernen eines Produkts zu einem einfachen Fall von rm -fr. Wenn Ihre gesamte Software jedoch über einen guten Paket-Manager installiert wird, spielt es keine Rolle, und wenn die von Ihnen installierte Software diese Konventionen nicht strikt einhält und Konfigurationen und ähnliches irgendwo darunter schreibt /usr, spielt dies auch keine Rolle aus den entgegengesetzten Gründen.


1
msgstr "" "Ihre gesamte Software wird über einen guten Paketmanager installiert," "das ist nur möglich, wenn Sie häufig verwendete Software verwenden.
Pacerier

1
@ Pacerier es ist möglich, es hängt davon ab, welche Distribution Sie verwenden. Was auch immer die Software ist, sie befindet sich wahrscheinlich im Arch User Repository, und wenn nicht, ist ein PKGBUILD relativ einfach zu schreiben.
StarlitGhost

9

Ich habe eine etwas andere Einstellung zu diesem Thema.
Während alles in der Antwort von jlliagre richtig ist, läuft die praktische Anwendung für mich beim Bereitstellen von Software in einem Cluster auf Standardumgebungsvariablen und die Standardwiederverwendung von Bibliotheken hinaus.

Einfach ausgedrückt - /usr/localund alle untergeordneten Verzeichnisse befinden sich in den entsprechenden Umgebungsvariablen wie PATHund MANPATHund /usr/local/lib{,64}in ldconfigs ( /etc/ld.so.conf.d/).

/opt/OTOH ist nicht - was sowohl vorteilhaft ist, wenn mehrere Versionen oder widersprüchliche Pakete im System nebeneinander vorhanden sein müssen, als auch eine Art von Umgebungsverwaltung (z. B. Umgebungsmodule oder Softwaresammlungen ) erfordert und insofern nachteilig ist, als es möglicherweise "verschwendet" "Speicherplatz durch Duplizieren von gemeinsam genutzten Bibliotheken, da jede Installation /optvollständig eigenständig sein kann.

Damit die gemeinsame /usr/localArbeitsweise funktioniert, wird angenommen, dass z. B. Binärdateien direkt auf /usr/local/bin(und Manpages auf geeignete /usr/local/share/man/...) installiert werden und nicht auf /usr/local/app/{bin,share/man,...}usw.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.