ti-enxame.com

O que é / usr / local / bin?

Antes de hoje, eu usei o terminal em uma extensão limitada de entrada e saída de diretórios e alteração das datas dos arquivos usando o comando touch. Eu havia percebido toda a extensão do terminal depois de instalar um script divertido no Mac e ter que chmod 755 o arquivo para torná-lo executável posteriormente.

Eu gostaria de saber o que /usr/local/bin é, no entanto. /usr/, Presumo, é o usuário do computador. Não sei por que /local/ está lá, no entanto. Obviamente, representa o computador local, mas como ele está no computador (ou servidor), seria realmente necessário? Não /usr/bin Fique bem?

E o que é /bin? Por que essa área geralmente é usada para instalar scripts no terminal?

93
JFW

/usr/local/bin é para programas que um usuário normal pode executar.

  • O /usr/local hierarquia é para ser usada pelo administrador do sistema ao instalar o software localmente.
  • Ele deve ser protegido contra substituição quando o software do sistema for atualizado.
  • Pode ser usado para programas e dados compartilháveis ​​entre um grupo de hosts, mas não encontrados em /usr.
  • O software instalado localmente deve ser colocado dentro de /usr/local em vez de/usr, a menos que esteja sendo instalado para substituir ou atualizar o software em /usr.

Essa fonte ajuda a explicar o padrão da hierarquia do sistema de arquivos em um nível mais profundo.

Você pode encontrar este artigo sobre o uso e abuso de /usr/local/bin interessante também.

82
iamsid

/ usr /, presumo que seja o usuário do computador.

Fechar.

O Unix começou como um sistema operacional multiusuário, então não é "o usuário", é "o usuários," plural.

Antes da AT&T Unix System V Release 4 (SVR4) ser lançada em 1988, com suas ferramentas de gerenciamento de usuário padronizando a criação de diretórios pessoais dos usuários em /home, O local convencional era /usr .¹ O diretório $HOME Pode ter sido /usr/jfw Em uma caixa System III .

/usr Também continha, como agora, /usr/bin, /usr/lib, Etc. A experiência mostrou que segregar os diretórios pessoais era uma boa prática de gerenciamento do sistema, com o /home mudança de política no SVR4, deixou para trás tudo o que agora pensamos pertencer a /usr.

/usr Ainda tinha um bom motivo para manter o nome: o que ficou para trás foram arquivos que não precisavam estar disponíveis até que o sistema fosse inicializado o suficiente para suportar o uso interativo normal. Ou seja, o que foi deixado para trás foram as partes usuário - focadas no sistema operacional. Isso significava que /usr Poderia estar em um volume físico diferente, o que era bom nos dias de 92 MB de disco rígido do tamanho de máquinas de lavar .

Os primeiros sistemas Unix tiveram o cuidado de manter os arquivos principais do sistema operacional fora de /usr Para que você ainda pudesse inicializar no modo de usuário único² mesmo que o volume /usr Fosse desmontável por algum motivo. O volume raiz continha ferramentas suficientes para colocar o volume /usr On-line novamente.

Vários tipos de Unix agora desconsideram esse antigo princípio de design, já que até pequenos sistemas embarcados têm espaço suficiente para os arquivos tradicionais de volume raiz e todos os /usr Em um único volume.³ Red Hat Link simbólico do Enterprise Linux, Solaris e Cygwin /bin Para /usr/bin E /lib Para /usr/lib Para que não haja mais diferença entre esses diretórios.

.../local/... obviamente significa o computador local ...

Sim. Refere-se ao fato de que os arquivos em /usr/local Devem ser específicos para esse sistema único. Arquivos que são genéricos de qualquer maneira devem estar em outro lugar.

Isso também tem raízes na maneira como os sistemas Unix eram comumente usados ​​décadas atrás, quando tudo isso era padronizado. Novamente, os discos rígidos da época eram volumosos, muito caros e pouco armazenados pelos padrões de hoje. Para economizar dinheiro e espaço em discos, um laboratório de computação cheio de caixas Unix costumava compartilhar a maior parte de /usr Pelo NFS ou algum outro protocolo de compartilhamento de arquivos de rede, de modo que cada caixa não precisava ter sua própria cópia redundante. ⁴ Arquivos específicos para uma única caixa iriam para /usr/local, Que seria um volume separado de /usr.

Essa herança histórica é o motivo pelo qual ainda é o padrão para a maioria dos softwares Unix de terceiros instalarem em /usr/local Quando instalados manualmente. A maioria desses softwares permite que você instale o pacote em outro lugar, mas ao fazer uma não escolha, você obtém o padrão seguro, que não interfere em outros locais de instalação comuns com propósitos mais específicos.

Existem boas razões para instalar o software em outro lugar. A equipe macOS da Apple faz isso quando cria, digamos, bash a partir do código-fonte GNU Bash . Eles usam / Como prefixo de instalação, substituindo o padrão /usr/local, Para que o Bash termine em /bin.

Outro exemplo é a maneira como os sistemas Linux mais antigos segregaram seu software GUI em /usr/X11R6, Para mantê-lo separado da linha de comando tradicional e do software curses - baseado. Isso foi feito simplesmente substituindo o prefixo /usr/local Padrão por /usr/X11R6. ⁵

E o que é/bin?

É a abreviação de "binário", que neste contexto significa "um arquivo que não é texto simples". A maioria desses arquivos é executáveis em uma caixa Unix, portanto esses dois termos se tornaram sinônimos em alguns círculos. ("Por favor, crie um binário para o RHEL 7, Fred.")

Os arquivos de texto em uma caixa Unix estão em outro local: /etc, /usr/include, /usr/share Etc.

Era uma vez, mesmo os scripts do Shell - que são arquivos de texto sem formatação - eram mantidos fora dos diretórios bin, mas essa linha também ficou borrada. Hoje, os diretórios bin normalmente contêm qualquer tipo de arquivo executável, estritamente "binário" ou não.⁶


Notas de rodapé e digressões :

  1. A natureza primitiva das ferramentas de gerenciamento de usuários anteriores ao SVR4 significava que o esquema HOME=/usr/$NAME Era meramente documentado como uma convenção, e não imposto por ferramentas de software como padrão.

    Você pode ver isso na página 4-8 do " Guia do Administrador do Sistema da AT&T Sistema V, versão 3.2, versão : aqui você vê a AT&T recomendando o antigo esquema /usr/$NAME Na última versão principal do Unix antes do SVR4 ser lançado.

    Era bastante comum nos sistemas Unix antigos os administradores de sistemas escolherem um esquema diferente que fazia mais sentido para eles. Pessoas sendo pessoas, isso significava que muitos esquemas diferentes foram inventados.

    Um esquema que encontrei antes de /home/$NAME Se tornar o padrão era /u/$NAME.

    Outro sistema que eu usei no início dos anos 90 tinha tantos usuários que eles não podiam encaixar todos os diretórios pessoais em um único volume físico, então eles usaram um esquema como /u1/$NAME, /u2/$NAME E assim por diante, se bem me lembro. Em qual disco o diretório inicial foi encerrado era simplesmente uma questão de qual deles tinha espaço no momento em que sua conta foi criada.

  2. Você pode inicializar uma caixa do macOS no modo de usuário único mantendo pressionado Cmd-S enquanto ele inicializa. Solte quando a tela ficar preta e você vir um texto em cinza claro. É como rodar no Terminal, mas ocupa toda a tela porque a GUI ainda não foi iniciada.

    Cuidado, você está executando como root.

    Digite "exit" no prompt raiz de usuário único para sair do modo de usuário único e continuar a inicialização no modo de GUI para vários usuários.

  3. Os sistemas operacionais Unixy que ainda aparecem para manter os arquivos críticos do modo de usuário único fora de /usr Podem, na verdade, não fazer isso atualmente. Uma vez tornei uma caixa do FreeBSD 9 impossível de inicializar movendo /usr Para um volume ZFS. Eu esqueci que os recursos do ZFS na raiz não chegaram até o FreeBSD 10, criando um Catch 22 : o sistema operacional precisava de arquivos em /usr Para montar /usr!

    Isso já era ruim o suficiente, mas se o FreeBSD 9 ainda mantivesse suas coisas de inicialização de usuário único fora de /usr, Eu poderia ter corrigido isso. Como ele não inicializaria nem no modo de usuário único, com /usr Sendo desmontável, claramente essa tradição havia sido violada de alguma forma. Eu tive que inicializar a partir de um CD de resgate para recuperar o sistema novamente.

  4. Também é aqui que obtemos /usr/share: Ele segrega arquivos que podem ser compartilhados mesmo entre caixas Unix com diferentes tipos de processadores. Normalmente, arquivos de texto: páginas de manual, dicionário, etc.

  5. "X11R6" se refere à versão do X Window System subjacente às GUIs do Linux no momento em que essa convenção era predominante. Os sistemas Linux geralmente paravam de segregar o software da GUI na época em que o X11R6 foi substituído por X.Org .

  6. Os sistemas Unix originais mantinham seus scripts principais do Shell em /etc Para evitar misturá-los com os binários verdadeiros em /bin.

66
Warren Young

/usr/local/bin mostra as raízes de estilo UNIX do mais recente Mac OS (seu BSD baseado lá).

  • "usr" significa Recursos do Sistema UNIX. Este é o local em que os programas e bibliotecas do sistema estão armazenados.
  • "local" representa recursos que não foram enviados com a distribuição padrão e, geralmente, compilados e mantidos por site.
  • "bin" representa executáveis ​​binários compilados.

Isso mudou desde as primeiras implementações do UNIX para Linux e BSD, mas a convenção permaneceu. Agora, /usr/bin seria para programas e bibliotecas "principais" ou principais onde /usr/local/bin seria para programas e bibliotecas complementares e não críticos.

10
nzwulfin

Eu recomendaria consultar Wikipedia para questões relacionadas à estrutura em geral, abordará o básico.

Para responder sua pergunta diretamente, no entanto:

  • / usr é, livremente, bibliotecas e executáveis ​​não críticos do sistema
  • / usr/local é, novamente vagamente, para bibliotecas e executáveis ​​que não são do sistema

É por isso que você tende a encontrar uma estrutura semelhante entre os dois;/usr/{, local /} {bin, sbin, lib}. Sendo novo no Shell, esse pouco com o {} é uma expansão do Shell. Tente executar

ls -ld /usr/{,local/}{bin,sbin,lib}

do Shell local para ver como funciona.

9
Tok

/usr/local/bin é o local padrão mais popular para arquivos executáveis, especialmente os de código aberto.

No entanto, essa é sem dúvida uma má escolha, pois, nos sistemas Unix, /usr foi padronizado no início dos anos 90 para conter uma hierarquia de arquivos que pertencem ao sistema operacional e, portanto, pode ser compartilhado por vários sistemas usando esse sistema operacional.

Como esses arquivos são estáticos, o /usr _ o sistema de arquivos pode ser montado como somente leitura. /usr/local está derrotando esse padrão, pois é por design local, portanto, não compartilhado, portanto, precisa ser lido/gravado para permitir a compilação local e não faz parte do sistema operacional. Pena que algo como /opt/local não foi escolhido ...

4
jlliagre

Eu recomendo que você use /usr/local para programas comerciais que você pode instalar, como o Mathematica. Coloque-o em sua própria partição quando você configurar. Quando você atualiza seu sistema operacional, essa partição não será perturbada e você não precisará reinstalar o conteúdo. Portanto, use-o para coisas que você deseja manter entre as atualizações do sistema operacional.

Separadamente, certifique-se de dar /home sua própria partição por esse motivo também.

1
ncmathsadist

Essa resposta também pode ser útil.

/ usr/local

A idéia original por trás de /usr/local Era ter um diretório ('local') '/ usr' separado em todas as máquinas, além de /usr, Que pode ser montado somente leitura em outro lugar. Ele copia a estrutura de /usr.

Atualmente, /usr/local É amplamente considerado como um bom lugar para manter programas auto-compilados ou de terceiros. A hierarquia /usr/local É para ser usada pelo administrador do sistema ao instalar o software localmente. Ele deve ser protegido contra substituição quando o software do sistema for atualizado.

Pode ser usado para programas e dados compartilhados entre um grupo de hosts, mas não encontrados em /usr. O software instalado localmente deve ser colocado dentro de /usr/local Em vez de /usr, A menos que esteja sendo instalado para substituir ou atualizar o software em /usr.

1
Vishwanath gowda k