Linux: Der Unterschied zwischen /usr/local und /opt

Wenn man intensiv mit Linux arbeitet, wird man sich irgendwann mal fragen was der Unterschied zwischen den Verzeichnissen /usr/local und /opt ist – Denn gemäss dem Filesystem Hierarchy Standard (FHS) sind beide Verzeichnisse für „lokale Software Installationen“ zu verwenden. Doch welches Verzeichnis ist wann angebracht? Und Warum gibt es überhaupt zwei verschiedene Verzeichnisse? Dieser Artikel soll darüber Auskunft geben.

Warum gibt es zwei „konkurrierende“ Verzeichnisse?

Nun, dafür gibt es mehrere Gründe und die Systemadministratoren streiten sich nunmehr schon seit über 20 Jahren darum. 😉

Einer davon ist sicher, dass das Linux nicht „von Grund auf“ designet, worden, sondern gewachsen ist. So haben die einen Leute ihre lokale Software in /usr/local installiert, andere hingegen in /opt.

Ein anderer Grund ist, dass das /usr Verzeichnis ursprünglich mal dazu gedacht war über das Netzwerk auf mehreren Rechnern geteilt zu werden (was jedoch praktisch nie so gehandhabt wurde) und so wäre /usr/local häufig auch nicht „lokal“ gewesen. So hatte man dann Software, die allen Servern zur Verfügung stehen sollten in /usr/local installiert und tatsächlich „lokale Software“ in /opt

Weiter wurde einmal definiert, dass man das /usr filesystem read-only mounten können muss. So wäre dann aber /usr/local ebenfalls nicht beschreibbar gewesen und /opt wäre hierzu wieder die Lösung gewesen.

Doch, wann ist welches der beiden Verzeichnisse zu verwenden?

Heutzutage, wo das /usr filesystem weder mit anderen Rechnern geteilt- noch read-only gemounted wird, gibt es trotzdem noch einen Grund zwischen /usr/local und /opt zu Unterscheiden: Denn /usr/local ist ein „Abbild“ von /usr, mit all seinen Unterverzeichnissen wie /bin /lib, /src, /etc,…

So verwendet man /usr/local für Programme, die sich exakt an den Linux filesystem Standard halten, also etwa librairies in /usr/local/lib ablegen, ausführbare Dateien ind /usr/local/bin, Dokumentationen (natürlich im man-page Format) in /usr/local/share/man, usw.

Das /opt Verzeichnis hingegen benutzt man bei Software die diesen Standard nicht einhält, bzw. nicht einhalten kann, weil sie Plattform-Unabhängig geschrieben ist. Dort würde man dann die Programmbibliotheken, Ausführbare Dateien, Dokumentation, usw. alles im Programm Verzeichnis vorfinden, also z.B. /opt/myAPP/bin, /opt/myAPP/config, /opt/myAPP/librariers, usw.

Ersteres (hält den Standard nicht ein) trifft oft bei sog. „Windows Style“ Programmen zu, die ihre Dateien z.B. alle unter C:Programme ablegen würden.

Zweiteres trifft dann z.B. bei Java Software zu, da in Java geschriebene Programme meist schon „von Haus aus“ Plattform unabhängig sind und so auch auf mehreren Systemen installiert werden können. – So findet man beispielsweise die Java Installation oft unter /opt/java, anstatt im /usr Verzeichnis verteilt und auch darauf basierende Software, wie z.B. der JBOSS Applikationsserver wird besser in /opt/jboss installiert, anstatt in /usr/local.

Gibt es noch andere solche Fälle?

Es gibt tatsächlich noch solche Inkonsistenzen, die historisch heran gewachsen ist, z.B. die Verwendung von /var anstatt /srv für sich ändernde Daten von Programmen.
Hier wird leider der apache Webserver auf den meisten Installationen unter /var/www, anstatt /srv/www abgelegt. Dies ist jedoch vor allem heute, wo ein Webserver viel mehr als 2-3 Seiten zur Verfügung stellt nicht hinnehmbar und man sollte notfalls das Verzeichnis /var/www auf /srv/www verlinken und für reine „Hosting Webserver“ am besten gleich /home dafür nehmen.

Quellen

Filesystem Hierarchy Standard
Linux Journal: Point/Counterpoint – /opt vs. /usr/local
unix.com: Difference between /opt and /usr/local
unix.stackexchange.com: What is the difference between /opt and /usr/local?
Google Suche zum Thema

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.