Embora os dois sejam projetados para conter arquivos que não pertencem ao sistema operacional /opt
e /usr/local
não pretendam conter o mesmo conjunto de arquivos.
/usr/local
é um local para instalar arquivos criados pelo administrador, geralmente usando o make
comando (por exemplo, ./configure; make; make install
). A idéia é evitar conflitos com arquivos que fazem parte do sistema operacional, que seriam sobrescritos ou sobrescreveriam os locais locais (por exemplo, /usr/bin/foo
faz parte do sistema operacional e /usr/local/bin/foo
é uma alternativa local).
Todos os arquivos abaixo /usr
são compartilháveis entre instâncias do SO, embora isso raramente seja feito com o Linux. Essa é uma parte em que o ESF é um pouco autocontraditório, como /usr
definido como somente leitura, mas /usr/local/bin
precisa ser lido / gravado para que a instalação local do software seja bem-sucedida. O padrão do sistema de arquivos SVR4, que foi a principal fonte de inspiração da ESF, recomenda evitar /usr/local
e usar /opt/local
para superar esse problema.
/usr/local
é um legado do BSD original. Naquela época, o código fonte dos /usr/bin
comandos do SO estava em /usr/src/bin
e /usr/src/usr.bin
, enquanto a fonte dos comandos desenvolvidos localmente estava em /usr/local/src
e seus binários em /usr/local/bin
. Não havia noção de embalagem (tarballs externos).
Por outro lado, /opt
é um diretório para a instalação de pacotes desagregados (ou seja, pacotes que não fazem parte da distribuição do sistema operacional, mas são fornecidos por uma fonte independente), cada um em seu próprio subdiretório. Eles já são pacotes completos construídos, fornecidos por um distribuidor independente de software de terceiros. Diferentemente das /usr/local
coisas, esses pacotes seguem as convenções de diretório (ou pelo menos deveriam). Por exemplo, someapp
seria instalado /opt/someapp
, com um de seus comandos /opt/someapp/bin/foo
, seu arquivo de configuração /etc/opt/someapp/foo.conf
, e seus arquivos de log /var/opt/someapp/logs/foo.access
.
/usr/local
é uma versão local do/usr
sistema de arquivos, enquanto que/opt
é um espaço reservado para coisas diversas.