Mentre entrambi sono progettati per contenere file non appartenenti al sistema operativo /opt
e /usr/local
non sono destinati a contenere lo stesso set di file.
/usr/local
è un luogo in cui installare i file creati dall'amministratore, in genere utilizzando il make
comando (ad esempio, ./configure; make; make install
). L'idea è quella di evitare scontri con i file che fanno parte del sistema operativo, che verrebbero sovrascritti o sovrascriverebbero quelli locali (ad esempio, /usr/bin/foo
fa parte del sistema operativo mentre /usr/local/bin/foo
è un'alternativa locale).
Tutti i file sottostanti /usr
sono condivisibili tra istanze del sistema operativo, sebbene ciò avvenga raramente con Linux. Questa è una parte in cui l'FHS è leggermente contraddittorio, poiché /usr
è definito di sola lettura, ma /usr/local/bin
deve essere letto e scritto per consentire l'installazione locale del software. Lo standard del file system SVR4, che è stata la principale fonte di ispirazione dell'FHS, raccomanda di evitare /usr/local
e utilizzare /opt/local
invece per superare questo problema.
/usr/local
è un'eredità del BSD originale. A quel tempo, era presente il codice sorgente dei /usr/bin
comandi del sistema operativo /usr/src/bin
e /usr/src/usr.bin
, mentre era presente la fonte dei comandi sviluppati localmente /usr/local/src
e i relativi file binari /usr/local/bin
. Non c'era idea di imballaggi (al di fuori dei tarball).
D'altra parte, /opt
è una directory per l'installazione di pacchetti disaggregati (ovvero pacchetti che non fanno parte della distribuzione del sistema operativo, ma forniti da una fonte indipendente), ognuno nella propria sottodirectory. Sono già costruiti interi pacchetti forniti da un distributore di software di terze parti indipendente. A differenza delle /usr/local
cose, questi pacchetti seguono le convenzioni della directory (o almeno dovrebbero). Ad esempio, someapp
verrebbe installato in /opt/someapp
, con uno dei suoi comandi in essere /opt/someapp/bin/foo
, il suo file di configurazione sarebbe in /etc/opt/someapp/foo.conf
, e i suoi file di log in /var/opt/someapp/logs/foo.access
.
/usr/local
tratta di una versione locale del/usr
file system, mentre/opt
è un segnaposto per cose diverse.