Diferenças entre / bin, / sbin, / usr / bin, / usr / sbin, / usr / local / bin, / usr / local / sbin

282

Eu tenho seis diretórios com arquivos de comando. Estes são /bin, /sbin, /usr/bin, /usr/sbin, /usr/local/bine /usr/local/sbin.

Quais são as diferenças entre estes? Se estou escrevendo meus próprios scripts, onde devo adicioná-los?


Palavras-chave:


fonte
1
Pergunta relacionada: unix.stackexchange.com/questions/8656/…
Gabriel Staples
@Keelan Sua pergunta está próxima de uma pergunta que eu postei há um ano +: askubuntu.com/questions/830074/…
WinEunuuchs2Unix

Respostas:

348

Consulte o FHS (Filesystem Hierarchy Standard) para Linux para isso.

  • /bin: Para binários utilizáveis ​​antes da /usrmontagem da partição. Isso é usado para binários triviais usados ​​no estágio de inicialização inicial ou para aqueles que você precisa ter disponível no modo de inicialização para usuário único. Pense binários como cat, ls, etc.

  • /sbin : Mesmo, mas para binários com privilégios de superusuário (root) necessários .

  • /usr/bin: Igual ao primeiro, mas para binários gerais em todo o sistema .

  • /usr/sbin : O mesmo que acima, mas para binários com privilégios de superusuário (root) necessários.


se estou escrevendo meus próprios scripts, onde devo adicioná-los?

Nenhuma das acima. Você deve usar /usr/local/binou /usr/local/sbinpara scripts disponíveis em todo o sistema. O localcaminho significa que não é gerenciado pelos pacotes do sistema (este é um erro para os pacotes Debian / Ubuntu).

Para scripts com escopo definido pelo usuário , use ~/bin(uma pasta de lixeira pessoal no diretório inicial).

A ESF diz para /usr/local:

Hierarquia terciária para dados locais, específicos para este host . Tipicamente tem mais subdirectórios, por exemplo, bin/, lib/, share/.

gertvdijk
fonte
so / bin é onde todos os arquivos principais estão instalados. como sl, cat, pwd, etc? Então, / usr / bin é onde estão os aplicativos instalados pelo usuário? Quais são alguns exemplos do que deve estar em / usr / bin?
Patoshi # 5/14
1
A colocação de scripts /bincausa problemas? Mudei meus scripts de acordo com a sua resposta, mas eu ainda estou curioso
Rumesh
5
@RumeshSudhaharan, você não deve fazer isso, porque é gerenciado pelo gerenciamento de pacotes. Se qualquer outro pacote também quiser usar esse caminho, ele substituirá seu arquivo. Os arquivos nos pacotes nunca podem se sobrepor (pelo menos para repositórios oficiais), portanto você fica mais seguro ao instalar no caminho local. Além disso, é apenas para sua própria conveniência e segurança. Em um caminho local, você não pode atrapalhar o sistema de maneira tão ruim e não pode substituir acidentalmente um binário do sistema.
precisa saber é o seguinte
8
Eu gosto da explicação na página de erro:Severity:Serious Certainty:Certain
cutrightjm 25/11/2015
1
Eu coloquei alguns arquivos em / usr / local / bin e posso executá-los, no entanto não consigo editá-los, ls -lanão mostra nada
M. Reza Nasirloo
6

Eu mesmo tive uma pergunta semelhante há um ano: Melhor diretório para colocar meus scripts bash?

Diretórios do sistema para binários

man hier(hierarquia) lista todos os diretórios. Para obter apenas os binários, use:

$ man hier | grep -E 'bin$|sbin$|^.{7}(/bin)|^.{7}(/sbin)' -A2

       /bin   This directory contains executable programs which are needed in single user
              mode and to bring the system up or repair it.

--
       /sbin  Like  /bin,  this  directory  holds commands needed to boot the system, but
              which are usually not executed by normal users.

--
       /usr/X11R6/bin
              Binaries  which  belong  to the X-Window system; often, there is a symbolic
              link from the more traditional /usr/bin/X11 to here.
--
       /usr/bin
              This  is the primary directory for executable programs.  Most programs exe
              cuted by normal users which are not needed for booting or for repairing the
--
       /usr/local/bin
              Binaries for programs local to the site.

--
       /usr/local/sbin
              Locally installed programs for system administration.

--
       /usr/sbin
              This directory contains program binaries for  system  administration  which
              are  not  essential  for the boot process, for mounting /usr, or for system

Onde colocar seus próprios scripts?

Para que todos os usuários acessem seus scripts, você pode inseri-los /usr/local/bin. Lembre-se de que você precisa de sudoacesso para adicionar / alterar arquivos aqui. Consulte: Existe um local padrão para a colocação de scripts personalizados do Linux?

Para seus próprios scripts de ID do usuário, insira-os /home/YOUR_NAME/bin. Lembre-se de que você precisa primeiro criar este diretório e reiniciar o terminal para obter a configuração automática do caminho ~/.profile. Veja: Como adicionar / home / nome de usuário / bin ao $ PATH?


O que eu sei, eu não sei

Estou pensando em pegar alguns dos meus scripts bash mais complexos no Ask Ubuntu e configurá-los com scripts de instalação github. Aqui estão alguns exemplos:

Eu acho que os scripts devem ser instalados em /usr/binque está no $ PATH, mas ainda não tenho certeza do local apropriado.

WinEunuuchs2Unix
fonte
1
Agradeço seu esforço, mas, exceto a parte "O que eu sei, não sei", você repetiu a resposta de gertvdijk.
11138 danzel
1
@danzel Acho que a parte principal é a man hierseção que a resposta de gertvdijk não abordou. ou seja, você pode obter a estrutura hierárquica do diretório na linha de comando sem precisar recorrer a lê-la na web (ou seja, aqui).
WinEunuuchs2Unix
1
essa é uma informação interessante, eu concordo. Mas gertvdijk já mencionou o Padrão de hierarquia do sistema de arquivos (que man hieré um trecho informativo insuficiente do IMO). No entanto, essa pode ser minha opinião pessoal.
Daniel 12/0618
@danzel Concordo que os sites têm uma análise muito mais profunda do que o que está em nossos discos rígidos. Só estou tentando ressaltar que as informações estão em nossos discos rígidos sem recorrer à Internet. Além do link da wikipedia, o citado está ausente /usr/X11R6/bin e /usr/local/binestá incluído no man heir.
WinEunuuchs2Unix
@ WinEunuuchs2Unix, re último para; Por que não, /usr/local/binjá que você não é o gerente de pacotes?
Pacerier