Qual é a lógica dos "recursos do sistema unix", ou /usr
diretó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/user
e estou lendo um pouco para ver se é uma má ideia em uma máquina de usuário único.
filesystem
history-of-ubuntu
H2ONaCl
fonte
fonte
/usr
significou um diretório oculto "user" por tantos anos ...Respostas:
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 peloroot
usuário, comomount
efdisk
."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 , nossystemd
documentos: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 sobrebin
,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
eshare
, 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árioVocê 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)
fonte
$PATH
será 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.~/bin
é tão seguro quanto~/.profile
e$PATH
nã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.