Nach dem Hierarchy Standard - Dateisystem , /opt
ist für „die Installation von Add-On - Software - Paketen“. /usr/local
ist "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/local
oder /opt
ohne 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?
directory-structure
fhs
Aufnäher
quelle
quelle
/usr/local
eine lokale Version des/usr
Dateisystems ist, wohingegen/opt
Platzhalter für verschiedene Dinge ist.Antworten:
Während beide Dateien enthalten sollen, die nicht zum Betriebssystem gehören,
/opt
und/usr/local
nicht denselben Satz von Dateien enthalten sollen./usr/local
ist ein Ort zum Installieren von Dateien, die vom Administrator erstellt wurden, normalerweise mithilfe desmake
Befehls (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/foo
Teil des Betriebssystems, während dies/usr/local/bin/foo
eine lokale Alternative ist).Alle Dateien unter
/usr
sind 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/usr
sie als schreibgeschützt definiert ist, jedoch/usr/local/bin
Lese- 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/local
und/opt/local
stattdessen zu verwenden, um dieses Problem zu beheben./usr/local
ist ein Erbe aus dem ursprünglichen BSD. Zu dieser Zeit/usr/bin
befanden sich der Quellcode der Betriebssystembefehle in/usr/src/bin
und/usr/src/usr.bin
, während sich die Quelle der lokal entwickelten Befehle in/usr/local/src
befand und deren Binärdateien in/usr/local/bin
. Es gab keine Vorstellung von Verpackung (außerhalb von Tarballs).Auf der anderen Seite
/opt
befindet 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/local
Dingen folgen diese Pakete den Verzeichniskonventionen (oder sollten es zumindest tun). Beispielsweisesomeapp
würde installiert werden in/opt/someapp
, wobei einer seiner Befehle lautet/opt/someapp/bin/foo
, seine Konfigurationsdatei wäre in/etc/opt/someapp/foo.conf
und seine Protokolldateien wären in/var/opt/someapp/logs/foo.access
.quelle
Der grundlegende Unterschied besteht darin, dass
/usr/local
fü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/include
etc .../opt
Auf 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.quelle
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 .
quelle
Für mich persönlich ist es das, was Bill in @ philfrs Link gesagt hat:
Leider pushen die meisten
make install
Skripte Dateien,/usr/local
anstatt nur einen Symlink zu erstellen : - /quelle
make install
Ziel zu kommentieren, in das Dateien verschoben werden/usr/local
. Diese Funktionalität ist leicht veränderbar durch einen vorübergehenden--prefix=
Kommandozeilenparameter an das./configure
Skript, oder wenn es keine./configure
Skript können Sie einen Parameter in dem Passmake
Ziel wie folgt:make --prefix=/usr install
./opt/foo-1.1
und befinden/opt/foo-1.2
. Wenn ich aktualisiere,foo
verweise ich in/usr/local/bin
Punkten 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 quickrm -rf /opt/foo-1.1
die ältere Version schnell und sauber.Erstens glaube ich nicht, dass es eine strenge Antwort gibt. Verschiedene Administratoren haben je nach Hintergrund unterschiedliche Meinungen. Historisch gesehen war
/usr/local
es 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/usr
Lesezugriff 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,/usr
dass 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 vonrm -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.quelle
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/local
und alle untergeordneten Verzeichnisse befinden sich in den entsprechenden Umgebungsvariablen wiePATH
undMANPATH
und/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/opt
vollständig eigenständig sein kann.Damit die gemeinsame
/usr/local
Arbeitsweise 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.quelle