Gemäß dem Filesystem Hierarchy Standard ist /opt
ist für „die Installation von Add-On-Anwendungssoftwarepaketen“. /usr/local
ist „zur Verwendung durch den Systemadministrator bei der lokalen Installation von Software“. Diese Anwendungsfälle scheinen ziemlich ähnlich zu sein. Software, die nicht in Distributionen enthalten ist, wird normalerweise standardmäßig so konfiguriert, dass sie entweder in /usr/local
installiert wird oder /opt
ohne besonderen Reim oder Grund, was sie gewählt haben.
Gibt es einen Unterschied, den ich übersehe, oder machen beide dasselbe, existieren aber aus historischen Gründen?
Akzeptierte Antwort:
Während beide darauf ausgelegt sind, Dateien zu enthalten, die nicht zum Betriebssystem gehören, ist /opt
und /usr/local
sollen nicht denselben Satz von Dateien enthalten.
/usr/local
ist ein Ort, an dem vom Administrator erstellte Dateien installiert werden können, normalerweise unter Verwendung von make
Befehl (z. B. ./configure; make; make install
). Die Idee ist, Konflikte mit Dateien zu vermeiden, die Teil des Betriebssystems sind, die sonst entweder überschrieben würden oder die lokalen überschreiben würden (z. B. /usr/bin/foo
ist Teil des Betriebssystems, während /usr/local/bin/foo
ist eine lokale Alternative).
Alle Dateien unter /usr
können von Betriebssysteminstanzen gemeinsam genutzt werden, obwohl dies bei Linux selten der Fall ist. Dies ist ein Teil, wo der FHS leicht widersprüchlich ist, wie /usr
ist als schreibgeschützt definiert, aber /usr/local/bin
muss schreibgeschützt sein, damit die lokale Softwareinstallation erfolgreich ist. Der SVR4-Dateisystemstandard, der die Hauptinspirationsquelle der FHS war, empfiehlt, /usr/local
zu vermeiden und verwenden Sie /opt/local
stattdessen um dieses Problem zu lösen.
/usr/local
ist ein Vermächtnis des ursprünglichen BSD. Der damalige Quellcode von /usr/bin
OS-Befehle befanden sich in /usr/src/bin
und /usr/src/usr.bin
, während die Quelle lokal entwickelter Befehle in /usr/local/src
lag , und ihre Binärdateien in /usr/local/bin
. Es gab keine Vorstellung von Verpackung (außerhalb von Tarballs).
Andererseits /opt
ist ein Verzeichnis zum Installieren ungebündelter Pakete (d. h. Pakete, die nicht Teil der Betriebssystem-Distribution sind, aber von einer unabhängigen Quelle bereitgestellt werden), jedes in einem eigenen Unterverzeichnis. Sie sind bereits fertige Gesamtpakete, die von einem unabhängigen Drittanbieter von Software bereitgestellt werden. Im Gegensatz zu /usr/local
Sachen, folgen diese Pakete den Verzeichniskonventionen (oder sollten es zumindest tun). Beispiel:someapp
würde in /opt/someapp
installiert werden , wobei einer der Befehle /opt/someapp/bin/foo
ist , wäre seine Konfigurationsdatei in /etc/opt/someapp/foo.conf
, und seine Protokolldateien in /var/opt/someapp/logs/foo.access
.