Qual é a justificativa para o diretório `/ usr`?

107

Qual é a lógica dos "recursos do sistema unix", ou /usrdiretório, conforme descrito aqui , que duplica muitos dos nomes de diretório no diretório raiz /?

Meu objetivo: eu estou instalando o Oracle JDK pela enésima vez e decidi desta vez apenas colocá-lo em baixo /home/usere estou lendo um pouco para ver se é uma má ideia em uma máquina de usuário único.

H2ONaCl
fonte
11
Seu diretório pessoal é o local perfeito para instalar softwares de terceiros como não raiz.
Lekensteyn
9
... a triste constatação, porque você pensou que /usrsignificou um diretório oculto "user" por tantos anos ...
Govind Rai
6
Eu pensei seriamente que era "usuário" esse tempo todo. Como binários de usuários #
Tanner Babcock /

Respostas:

168

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 /bine /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/bine /bin, portanto, provavelmente no futuro próximo (Ubuntu 12.10 talvez?) /binHaverá um link simbólico para /usr/bin.

Mas talvez você esteja confuso /usre /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. /binfilesystem estava cheio, por isso, eles instalaram os novos binários em ... /usr/bin. E /usrera, 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 /bine 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 /usrficar lotado de diretórios relacionados ao sistema, misturados aos diretórios do usuário. Assim /homenasceu, para manter todos os diretórios relacionados ao usuário e manter /usrlimpo 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 /bincom 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 rootusuário, como mounte fdisk.

"Mas isso não é quase o mesmo que /bin?" . Sim, claro, mas ...

"Espere, então por que há um /sbintambé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 /usrmesclagem , nos systemddocumentos:

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 /usrdivisã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, includecomo 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 bine 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/locale por que você deve alterá-lo para ./configure --prefix=$HOME/.localinstalar 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.

  • ~/.locale ~/.confignã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/binnã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)

MestreLion
fonte
11
Você resumiu de maneira muito concisa e, sim, é verdade - a resposta completa é uma história muito mais longa que a anterior!
Papashou
Por que não? A mesma lógica se aplica: um invasor pode criar um executável na casa ou em um subdiretório, com o nome de um comando do sistema.
ignis 31/01
3
@ignis: se um invasor tiver acesso para criar e modificar arquivos na casa de um usuário, esse usuário já estará completamente comprometido e $PATHserá irrelevante. O atacante pode até mudar isso via ~/.profile, então seu ponto é discutível. ~/.local/biné tão seguro (ou inseguro, se você quiser) quanto ~/bin, o que é uma prática comum na maioria das distros. A idéia de que um usuário não deve ter nenhum diretório para manter e executar scripts pessoais $PATHé absurda.
MestreLion
Portanto, ~/biné tão seguro quanto ~/.profilee $PATHnão me protege de malware executado por mim (que tem permissão para escrever em minha própria casa). Eu não conhecia esse arquivo, desculpe. Obrigado pelo esclarecimento, desculpe pelo meu comentário anterior.
Ignis
Quanto maior a história, mais melhoria / confusão existe.
smwikipedia