Secondo lo standard della gerarchia del filesystem, /opt
è per "l'installazione di pacchetti software applicativi aggiuntivi". /usr/local
è "per l'uso da parte dell'amministratore di sistema durante l'installazione del software in locale". Questi casi d'uso sembrano abbastanza simili. Il software non incluso nelle distribuzioni di solito è configurato per impostazione predefinita per l'installazione in /usr/local
o /opt
senza una particolare rima o motivo per cui hanno scelto.
C'è qualche differenza che mi sfugge, o fanno entrambi la stessa cosa, ma esistono per ragioni storiche?
Risposta accettata:
Sebbene entrambi siano progettati per contenere file non appartenenti al sistema operativo, /opt
e /usr/local
non sono destinati a contenere lo stesso insieme di file.
/usr/local
è un luogo in cui installare i file creati dall'amministratore, in genere utilizzando il make
comando (ad es. ./configure; make; make install
). L'idea è di evitare conflitti con i file che fanno parte del sistema operativo, che altrimenti verrebbero sovrascritti o sovrascritti da quelli locali (es. /usr/bin/foo
fa parte del sistema operativo mentre /usr/local/bin/foo
è un'alternativa locale).
Tutti i file in /usr
sono condivisibili tra istanze del sistema operativo, sebbene ciò avvenga raramente con Linux. Questa è una parte in cui l'FHS è leggermente contraddittorio, come /usr
è definito per essere di sola lettura, ma /usr/local/bin
deve essere in lettura e scrittura affinché l'installazione locale del software abbia esito positivo. Lo standard del file system SVR4, che è stata la principale fonte di ispirazione di FHS, consiglia di evitare /usr/local
e usa /opt/local
invece di superare questo problema.
/usr/local
è un'eredità del BSD originale. A quel tempo, il codice sorgente di /usr/bin
I comandi del sistema operativo erano in /usr/src/bin
e /usr/src/usr.bin
, mentre l'origine dei comandi sviluppati localmente era in /usr/local/src
e i loro binari in /usr/local/bin
. Non c'era la nozione di packaging (al di fuori dei tarball).
D'altra parte, /opt
è una directory per l'installazione di pacchetti disaggregati (ovvero pacchetti non facenti parte della distribuzione del Sistema Operativo, ma forniti da una fonte indipendente), ognuno nella propria sottodirectory. Sono già costruiti pacchetti interi forniti da un distributore di software di terze parti indipendente. A differenza di /usr/local
roba, questi pacchetti seguono le convenzioni di directory (o almeno dovrebbero). Ad esempio, someapp
verrebbe installato in /opt/someapp
, con uno dei suoi comandi /opt/someapp/bin/foo
, il suo file di configurazione sarebbe in /etc/opt/someapp/foo.conf
e i suoi file di registro in /var/opt/someapp/logs/foo.access
.