/ usr / bin vs / usr / local / bin no Linux

445

Por que existem tantos lugares para colocar um binário no Linux? Existem pelo menos estes cinco:

  1. /bin/
  2. /sbin/
  3. /usr/bin/
  4. /usr/local/bin/
  5. /usr/local/sbin/

E na caixa do meu escritório, não tenho permissões de gravação para algumas delas.

Que tipo de binário entra em qual desses bins?

lazer
fonte
28
Você esqueceu /usr/sbin/.
Hello71
15
E ~/bin/para coisas pessoais.
Calmarius
1
Hoje em dia, há menos lugares, desde que /binfoi mesclado /usr/bine /sbinmesclado com /usr/sbin- consulte The Case for the / usr Merge .
Piotr Dobrogost
Pergunta relacionada: askubuntu.com/questions/308045/…
Gabriel Staples
@Calmarius, o que? você não deveria usar /usr/local/bin?
Pacerier 20/07

Respostas:

558
  1. /bin(e /sbin) foram projetados para programas que precisavam estar em uma pequena /partição antes da /usrmontagem de partições maiores etc. Hoje em dia, serve principalmente como local padrão para programas importantes /bin/sh, embora a intenção original ainda possa ser relevante para, por exemplo, instalações em pequenos dispositivos embarcados.

  2. /sbin, diferentemente de /bin, é para programas de gerenciamento de sistema (normalmente não utilizados por usuários comuns) necessários antes da /usrmontagem.

  3. /usr/bin é para programas de usuário normal gerenciados por distribuição.

  4. Existe um relacionamento /usr/sbincom o mesmo /usr/binque o /sbinnecessário /bin.

  5. /usr/local/biné para programas de usuário normais não gerenciados pelo gerenciador de pacotes de distribuição, por exemplo, pacotes compilados localmente. Você não deve instalá-los /usr/binporque futuras atualizações de distribuição podem modificá-las ou excluí-las sem aviso prévio.

  6. /usr/local/sbin, Como você provavelmente pode adivinhar, neste ponto, é /usr/local/bincomo /usr/sbina /usr/bin.

Além disso, existe também o /optque é para pacotes de não distribuição monolíticos, embora antes de serem adequadamente integrados várias distribuições colocassem o Gnome e o KDE lá. Geralmente, você deve reservá-lo para pacotes de terceiros grandes e mal comportados, como o Oracle.

geekosaur
fonte
37
Acho que essa resposta esclarece um conjunto comum de convenções, mas esta postagem de Rob Landley é realmente uma ótima leitura, se você quiser ter uma ideia do absurdo ... lists.busybox.net/pipermail/busybox/2010-Dezembro /074114.html
Subfusão
3
refspecs.linuxfoundation.org/fhs.shtml para a referência atual canônica. O link de @kojiro está desatualizado e não possui as novas especificações.
Didier A.
2
Onde coloco uma lixeira que baixei da internet? Na sua descrição, parece que deve entrar em / usr / local / bin ou / usr / bin. / Usr / bin é algo em que nunca devo tocar manualmente e deixar apenas o gerenciador de pacotes brincar?
Didier A.
3
@DidierA. coloque-o ~/bine adicione esse diretório ao seu PATH como usuário ... Obrigado pela observação, eu apaguei meu comentário seriamente desatualizado.
Kojiro #
3
Encontrei a resposta para a primeira parte da minha pergunta aqui: superuser.com/a/238993/425838 . A precedência é baseada na ordem na PATHvariável do sistema , e echo $PATHpara mim mostra /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games, o que significa que os executáveis /usr/local/bintêm precedência sobre os /usr/binque têm precedência sobre os que estão dentro /bin.
Gabriel Staples
65

Eu recomendo dar uma olhada na página de manual da hierarquia do sistema de arquivos:

man hier

O qual também está disponível online, por exemplo: http://linux.die.net/man/7/hier

davitenio
fonte
1
Isso não responde à pergunta do usuário.
quer
14
A página de manual contém uma entrada para cada um dos diretórios bin, explicando o que entra neles, que foi uma das perguntas.
davitenio 6/03/11
34

A entrada Standard da hierarquia do sistema de arquivos na Wikipedia me ajudou a responder a mesma pergunta quando a tive, além de ter uma tabela muito explicativa.

Trecho da página 1 :

/bin        Essential command binaries that need to be available in single user mode; for all users, e.g., cat, ls, cp.
/usr/bin    Non-essential command binaries (not needed in single user mode); for all users.
/usr/local  Tertiary hierarchy for local data, specific to this host. Typically has further subdirectories, e.g., bin, lib, share
/usr/sbin   Non-essential system binaries, e.g., daemons for various network-services.
/sbin       Essential system binaries, e.g., fsck, init, route.

1 Recuperado em 19 de junho de 2019; permalink .

Humphrey Bogart
fonte
17

Os sbindiretórios contêm programas que geralmente são apenas administração do sistema. Os programas para usuários regulares nunca devem entrar neles.

Alguns programas são necessários durante a inicialização e terminam em /bin/ou /sbin/. Eles devem estar disponíveis antes da montagem dos sistemas de arquivos. Coisas como mount, e fsckque são necessárias para verificar e montar sistemas de arquivos, devem estar lá.

A maioria dos programas empacotados termina em /usr/bin/e /usr/sbin/. Eles podem estar em um sistema de arquivos diferente do sistema de arquivos raiz. Em alguns casos, eles podem estar em uma unidade montada em rede.

Programas e scripts locais pertencem a /usr/local/bin/e /usr/local/sbin/. Isso os identifica como claramente não padronizados e possivelmente disponíveis apenas no site.

Para obter mais explicações, tente executar o comando man hierque deve fornecer uma descrição da hierarquia recomendada do sistema de arquivos para sua distribuição. Você também pode querer ler sobre a Hierarquia do sistema de arquivos na Wikipedia

BillThor
fonte
1
+1 Uma explicação realmente concisa se top for um pouco demais.
CppLearner
"Os programas e scripts locais pertencem a / usr / local / bin / e / usr / local / sbin /" - Você quer dizer programas locais como em "nenhuma parte do sistema operacional, mas eu decidi instalá-los e quero usá-los "?
perfil completo de Jim Aho
11

Na década de 1970, UNIXhavia todos os executáveis ​​oficiais /bine /usr/binera um local abaixo dos diretórios pessoais dos usuários (por exemplo /usr/dmr) que estava disponível para qualquer usuário armazenar seus próprios binários que também poderiam ter interesse para outros.

O resultado dessa abertura /usr/binfoi um quintal inútil de software não documentado e, portanto, Stephen Bourneescreveu um cron scriptque verificava novos binários todas as noites e removeu todos os binários que não tinham uma documentação ou que foram atualizados sem atualizar sua documentação também.

No final da década de 1970, /usr/binfoi integrado à distribuição básica do sistema operacional e as pessoas começaram a usar /usr/local/binpara os propósitos da abertura anterior /usr/bin.

Depois de um tempo, os administradores do sistema costumavam /usr/local/binarmazenar non-localsoftware importado da rede (por exemplo, a USENET) e, como as empresas UNIX não gostavam de repetir o mesmo erro que /usr/binocorreu novamente, houve uma conferência de hierarquia de sistemas de arquivos em 1987, onde todas as empresas UNIX concordaram. desistir /usr/local/bine usar em seu /opt/<vendor>/binlugar.

Infelizmente, as distribuições Linux não seguiram essa decisão ....

esperto
fonte
Embora muito interessante, nada disso tenta responder à pergunta que não era sobre /opte não sobre o UNIX, mas sobre o Linux. É como responder "Por que os carros têm 4 rodas?" com "As bicicletas têm 2! Infelizmente, os carros não". o que não ajuda o OP a entender por que os carros têm 4.
terdon
2
Se você não conseguir usar a explicação fornecida como uma explicação para o plano de fundo do Linux e o fato de o Linux gostar de imitar o UNIX, pode estar faltando o plano de fundo necessário.
schily
1
Interessante, mas algo que me deixa confuso e que talvez também seja apenas histórico. Hoje, o download de uma lixeira on-line e uma lixeira da empresa não são muito diferentes. Se Joe Blow cria um programa e eu o baixa, por que não colocá-lo em / opt / JowBlow / bin em vez de / usr / local / bin. É uma questão de provedor confiável versus não confiável? Não parece fazer sentido para mim.
Didier A.
1
Eu gostaria de ter conhecido essa história 'exata' alguns anos atrás. a) Perguntei-me por que o AIX evitou / usr / local, usa / opt / IBM e / opt / ibm e bullfreeware / opt / freeware - e por que eu deveria ter usado um caminho diferente (não apenas / opt / * sbin). Quanto à semimportância no Linux - melhores ferramentas GNU - o prefixo padrão nas ferramentas automáticas é / usr / local. Autotools muito ruim (automake, autoconf, etc. não seguir ... Mas todos nós sobreviver e aprender onde o distrub || fornecedores colocar seus programas...
Michael feltro
Poderíamos ter outra dessas conferências? Só que desta vez, todo mundo ouve!
MemphiZ