Há a versão curta e a versão longa da sua resposta ...
Versão curta:
Como seu link já foi dito, /usr
é um lugar para todo o sistema , somente leitura de arquivos. Portanto, todo o seu software instalado vai para lá. Ele não duplica nenhum nome de /
exceto /bin
e /lib
, mas, originalmente, com uma finalidade diferente: /bin, /lib
é apenas para binários e bibliotecas necessárias para a inicialização , enquanto /usr/bin, /usr/lib
é para todos os outros executáveis e bibliotecas. (agora seja um bom garoto e não pergunte /sbin
, esta é a versão curta, afinal)
Atualmente, a distinção entre "necessário para inicializar" e não diminuiu, já que a maioria das distribuições modernas, incluindo o Ubuntu, não pode ser inicializada corretamente sem vários arquivos /usr
. E é por isso que existe um forte movimento em direção à fusão /usr/bin
e /bin
, portanto, provavelmente no futuro próximo (Ubuntu 12.10 talvez?) /bin
Haverá um link simbólico para /usr/bin
.
Mas talvez você esteja confuso /usr
e /usr/local
? Porque sim, há (e deve haver) muitos nomes de diretório duplicados. Mais sobre isso mais tarde ...
Versão longa:
Nos anos 70, no Unix (sim, Unix, muito antes do Linux), os disquetes tinham pouco espaço (sem HD, lembra-se?) E, em um determinado momento, os binários do sistema cresciam em número e tamanho demais a um ponto em que não cabem em um único disco, e os desenvolvedores tiveram que dividi-los em várias mídias e, assim, criar novos pontos de montagem para eles. /bin
filesystem estava cheio, por isso, eles instalaram os novos binários em ... /usr/bin
. E /usr
era, naquele tempo, o seu ... diretório de usuário !
Depois que a divisão (quase embaraçosa e frequentemente contada como uma piada / tradição) aconteceu, eles começaram a criar justificativas "artificiais" (e critérios) para decidir o que iria /bin
e o que iria /usr/bin
. A regra informal era: coisas "essenciais" vão para /bin
"o resto" vai para /usr/bin
. O mesmo com /lib
. Não demorou muito para /usr
ficar lotado de diretórios relacionados ao sistema, misturados aos diretórios do usuário. Assim /home
nasceu, para manter todos os diretórios relacionados ao usuário e manter /usr
limpo apenas as "coisas" do sistema.
Isso foi muito antes da existência da ESF. Quando foi criado, abraçou (e formalizou) a tradição atual e manteve o nome /usr
, embora na época já não tivesse mais nada a ver com "usuário". Então, sim, os nomes de fantasia " U NIX s ource r epository" ou " U NIX s istema r ecursos" são todos os nomes confeccionados, e é tarde demais para mudar o nome de qualquer maneira. (mas não é tarde demais para mesclar /bin
com ele)
"Ok, que tal /usr/sbin
?" , você pergunta. Porra, eu esperava que você tivesse esquecido. Ok ... /usr/sbin
é para comandos que só podem ser (ou são significativos apenas) executados pelo root
usuário, como mount
e fdisk
.
"Mas isso não é quase o mesmo que /bin
?" . Sim, claro, mas ...
"Espere, então por que há um /sbin
também? Não faz nenhum sentido!" . Bem, isso é por causa de ... err .. humm ..
Olha, um macaco de três cabeças atrás de você!
Ok, espero que você tenha se distraído o suficiente. Se movendo...
(se você acha que estou trapaceando, sim, você está correto. Mas a resposta "oficial" é o comando essencial que só pode ser executado pelo root e deve estar disponível antes mesmo de você montar /
). A verdade é: a linha é realmente embaçada, e há muitos nomes legados que simplesmente "travaram" e agora é muito difícil se livrar.
Mais sobre o caso da /usr
mesclagem , nos systemd
documentos:
A justificativa histórica para a / bin, / sbin e / lib separada de / usr não se aplica mais hoje. Eles foram divididos para ter ferramentas selecionadas em um disco rígido mais rápido (que era pequeno, porque era mais caro) e para conter todas as ferramentas necessárias para montar a partição mais lenta / usr. Hoje em dia, uma partição / usr separada já deve ser montada pelo initramfs durante a inicialização antecipada, justificando assim uma discussão separada. Além disso, muitas ferramentas em / bin e / sbin no status quo já perderam a capacidade de executar sem um / usr pré-montado. Não há mais motivo válido para espalhar o sistema operacional por várias hierarquias; ele perdeu seu objetivo.
E uma leitura incrível sobre a /usr
divisão e sua lógica, por Rob Landley:
Compreendendo a divisão bin, sbin, usr / bin, usr / sbin
Hoje em dia
Atualmente, em relação aos diretórios de instalação, sua melhor maneira de entender é pensar desta maneira:
/usr
- todos os arquivos somente leitura em todo o sistema instalados (ou fornecidos pelo) sistema operacional
/usr/local
- arquivos somente leitura em todo o sistema instalados pelo administrador local (geralmente você). E é por isso que a maioria dos nomes de diretório /usr
é duplicada aqui.
/opt
- uma atrocidade destinada a todo o sistema, somente leitura e software independente . Ou seja, software que não dividir seus arquivos sobre bin
, lib
, share
, include
como bem-comportado software deveria.
~/.local
- a contraparte por usuário /usr/local
, ou seja: software instalado por (e para) cada usuário
~/.local/opt
- a contraparte por usuário de /opt
Então, onde instalar o software?
A lista acima já é metade da resposta da sua pergunta sobre o Oracle JDK, pelo menos fornece várias pistas. A lista de verificação para "Onde devo instalar o software X?" vai por:
É um software de diretório único completamente independente, como o Eclipse IDE e outros aplicativos java baixados, e você deseja que ele esteja disponível para todos os usuários? Depois instale/opt
O mesmo que acima, mas você não se importa com outros usuários e eu quero instalar somente para ele? Depois instale~/.local/opt
Seus arquivos são divididos em vários diretórios, como bin
e share
, como o software tradicional compilado e instalado com ./configure && make && sudo make install
, e devem estar disponíveis para todos os usuários? Depois instale/usr/local
O mesmo que acima, mas apenas para o seu usuário? Depois instale~/.local
Software instalado pelo sistema operacional ou via gerenciadores de pacotes (como o Software Center) e, mais importante, que qualquer modificação local pode ser substituída quando o gerenciador de atualizações o atualiza para uma nova versão ? Vai para/usr
Notas:
Isso explica por que o prefixo de instalação padrão do software compilado é /usr/local
e por que você deve alterá-lo para ./configure --prefix=$HOME/.local
instalar o software apenas para seu próprio usuário
Você deve ter notado que todos os diretórios acima são somente leitura (exceto, é claro, quando você instala / remove software). Os arquivos graváveis (como arquivos de configuração) geralmente vão para /etc
(para software em todo o sistema) e ~/.config
(para configurações por usuário). Embora muitos softwares herdados (e, infelizmente, alguns modernos também) usem ~/.<software-name>
, sobrecarregando sua pasta pessoal com bilhões de diretórios e arquivos.
~/.local
e ~/.config
não fazem parte da especificação FHS. O FHS não lida com a pasta inicial do usuário. Eles são uma tentativa do XDG, outra organização padrão voltada para ambientes de desktop (como Gnome, KDE e Unity), de tentar estabelecer algumas convenções sobre uma estrutura da casa do usuário. Nem todo software adere a ele (por exemplo, ~/.local/bin
não está no padrão do usuário $PATH
, enquanto pela lógica deveria) , e nenhum usuário é forçado a segui-lo, mas ambos obtêm muitos benefícios de interoperabilidade, se o fazem.
Espero que isso ajude a esclarecer um pouco as coisas. Fique à vontade para perguntar qualquer coisa para que eu possa melhorar a resposta!
(e também espero que os puristas não me matem por uma linguagem e explicação extremamente informais. Foi intencional e certamente tem muitas imprecisões, mas acredito que é uma boa maneira de fazer um novato ter uma breve visão geral sobre a instalação diretórios)