Podle standardu hierarchie souborového systému /opt
je pro „instalaci doplňkových aplikačních softwarových balíčků“. /usr/local
je „pro použití správcem systému při místní instalaci softwaru“. Tyto případy použití se zdají být dost podobné. Software, který není součástí distribucí, je obvykle nakonfigurován tak, aby se instaloval buď do /usr/local
nebo /opt
bez zvláštního rýmu nebo důvodu, který by si vybrali.
Je v tom nějaký rozdíl, který mi uniká, nebo oba dělají totéž, ale existují z historických důvodů?
Přijatá odpověď:
Zatímco oba jsou navrženy tak, aby obsahovaly soubory, které nepatří operačnímu systému, /opt
a /usr/local
nejsou určeny k tomu, aby obsahovaly stejnou sadu souborů.
/usr/local
je místo pro instalaci souborů vytvořených správcem, obvykle pomocí make
příkaz (např. ./configure; make; make install
). Cílem je vyhnout se kolizím se soubory, které jsou součástí operačního systému, které by byly buď přepsány, nebo jinak přepsány místní (např. /usr/bin/foo
je součástí operačního systému, zatímco /usr/local/bin/foo
je místní alternativou).
Všechny soubory pod /usr
jsou sdílené mezi instancemi OS, i když se to v Linuxu dělá jen zřídka. Toto je část, kde je FHS mírně protichůdný, jako /usr
je definováno jako pouze pro čtení, ale /usr/local/bin
Aby byla místní instalace softwaru úspěšná, musí být pro čtení i zápis. Standard souborového systému SVR4, který byl hlavním zdrojem inspirace FHS, doporučuje vyhnout se /usr/local
a použijte /opt/local
místo toho, abyste tento problém překonali.
/usr/local
je dědictvím z původního BSD. V té době byl zdrojový kód /usr/bin
Příkazy OS byly v /usr/src/bin
a /usr/src/usr.bin
, zatímco zdroj lokálně vyvinutých příkazů byl v /usr/local/src
a jejich binární soubory v /usr/local/bin
. Neexistovala žádná představa o balení (mimo tarbally).
Na druhou stranu /opt
je adresář pro instalaci unbundled balíčků (tj. balíčků, které nejsou součástí distribuce operačního systému, ale jsou poskytovány nezávislým zdrojem), každý do svého vlastního podadresáře. Jsou to již vytvořené celé balíčky poskytované nezávislým distributorem softwaru třetí strany. Na rozdíl od /usr/local
tyto balíčky se řídí konvencemi adresářů (nebo by alespoň měly). Například someapp
bude nainstalován v /opt/someapp
, přičemž jeden z jeho příkazů je /opt/someapp/bin/foo
, jeho konfigurační soubor by byl v /etc/opt/someapp/foo.conf
a jeho soubory protokolu v /var/opt/someapp/logs/foo.access
.