De acordo com o padrão de hierarquia do sistema de arquivos , /opt
é para "a instalação de pacotes de aplicativos complementares". /usr/local
é "para uso do administrador do sistema ao instalar o software localmente". Esses casos de uso parecem bastante semelhantes. O software não incluído nas distribuições geralmente é configurado por padrão para instalar em uma /usr/local
ou /opt
sem rima ou motivo específico para a escolha deles.
Há alguma diferença que estou perdendo ou as duas fazem a mesma coisa, mas existem por razões históricas?
directory-structure
fhs
Patches
fonte
fonte
/usr/local
é uma versão local do/usr
sistema de arquivos, enquanto que/opt
é um espaço reservado para coisas diversas.Respostas:
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 omake
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
.fonte
A diferença básica é que o
/usr/local
software não é gerenciado pelo empacotador do sistema, mas ainda segue as regras de implantação padrão do unix.É por isso que você tem
/usr/local/bin
,/usr/local/sbin
/usr/local/include
etc .../opt
por outro lado, é para software que não segue isso e é implantado de maneira monolítica. Isso geralmente inclui software comercial e / ou de plataforma cruzada que é empacotado no estilo "Windows".fonte
Eles são realmente muito semelhantes, e o uso de um ou de outro é mais uma questão de opinião. O diário Linux teve essa discussão de ponto / contraponto sobre esse tópico exato aqui .
fonte
Para mim, pessoalmente, é o que Bill disse no link da @ philfr:
Infelizmente, a maioria dos
make install
scripts envia arquivos para o arquivo em/usr/local
vez de apenas fazer um link simbólico: - /fonte
make install
destino que envia os arquivos/usr/local
; esta funcionalidade é facilmente alterável pela passagem de um--prefix=
parâmetro de linha de comando para o./configure
roteiro, ou se não houver nenhum./configure
script, você pode passar um parâmetro para omake
alvo assim:make --prefix=/usr install
./opt/foo-1.1
e/opt/foo-1.2
. Quando eu atualizo, ofoo
link simbólico/usr/local/bin
aponta para foo-1.2. Se, por algum motivo, eu precisar reverter, basta substituir o link simbólico por um que aponte para foo-1.1. Serm -rf /opt/foo-1.1
a versão 1.2 estiver correta após várias semanas, uma rápida removerá a versão mais antiga de forma rápida e limpa.Primeiro, não acho que exista uma resposta estrita; diferentes administradores terão opiniões diferentes, de acordo com o seu histórico. Historicamente,
/usr/local
veio primeiro; foi a convenção em Berkley, IIRC. Em um ponto durante o desenvolvimento do Sistema V, se não me engano (isso já faz muito tempo, e eu não fiz anotações), houve uma decisão ou um desejo de poder montar/usr
somente leitura, o que significava que você não poderia adicionar um novo software a ele; pode ter sido por isso que/opt
foi inventado. Por acaso, havia tanto software existente que gravou/usr
que essa ideia nunca realmente decolou.Minha preferência pessoal é
/opt
, com um subdiretório separado para cada produto; isso torna a remoção de um produto um simples caso derm -fr
. Mas se todo o seu software estiver instalado por meio de um bom gerenciador de pacotes, isso não importa, e se o software que você instala não obedece estritamente a essas convenções e grava configurações e outros itens em algum lugar abaixo/usr
, também não importa. pelas razões opostas.fonte
Tenho uma opinião um pouco diferente sobre esse assunto.
Enquanto tudo em jlliagre 's resposta está correta, a aplicação prática para mim, ao implantar o software em um cluster, se resume a variáveis de ambiente padrão e reutilização padrão de libs.
Simplificando -
/usr/local
e todos os seus diretórios filhos estão nos ambientes apropriados, comoPATH
eMANPATH
, e/usr/local/lib{,64}
estão no ldconfig (/etc/ld.so.conf.d/
)./opt/
O OTOH não é - o que é vantajoso ao exigir a coexistência de várias versões ou pacotes conflitantes no sistema, mas requer algum tipo de gerenciamento de ambiente (por exemplo, módulos de ambiente ou coleções de software ) e é desvantajoso, pois potencialmente "desperdiçaria" "espaço de armazenamento duplicando bibliotecas compartilhadas, pois cada instalação/opt
pode ser completamente independente.Para que a natureza compartilhada
/usr/local
funcione, presume-se que, por exemplo, os binários sejam instalados diretamente/usr/local/bin
(e as páginas de manual sejam apropriadas/usr/local/share/man/...
) e não/usr/local/app/{bin,share/man,...}
etc.fonte