O que é / usr / local / bin?

85

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 touchcomando Eu havia percebido toda a extensão do terminal depois de instalar um script divertido no Mac e ter que chmod 755usar 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. Eu não tenho certeza 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/binficaria bem?

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

JFW
fonte

Respostas:

77

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

  • A /usr/localhierarquia é 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 em /usr/localvez de / usr, a menos que esteja sendo instalado para substituir ou atualizar o software /usr.

Essa fonte ajuda a explicar o padrão de 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 interessantes também.

iamsid
fonte
"" "a menos que esteja sendo instalado para substituir ou atualizar o software em / usr" "" significa?
Pacerier
63

/ 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", é "os usuários ", no plural.

Antes do lançamento do AT&T Unix System V Versão 4 (SVR4) em 1988, com suas ferramentas de gerenciamento de usuário padronizando a criação de diretórios pessoais /home, a localização convencional era. /usr¹ Seu $HOMEdiretório pode estar /usr/jfwem uma caixa do System III .

/usrtambém continha, então como agora, /usr/bin, /usr/lib, etc. A experiência mostrou que segregar os diretórios home era boa prática de gestão do sistema, assim com a /homemudança de política em SVR4, deixou para trás tudo o que agora pensar em como pertencendo a /usr.

/usrainda havia um bom motivo para manter o nome: o que foi deixado para trás eram 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 do sistema operacional focadas no usuário . Isso significava que /usrpoderia estar em um volume físico diferente, o que era bom nos dias de 92 MB de unidades 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 /usrausentes, para que você ainda pudesse inicializar no modo de usuário único², mesmo que o /usrvolume fosse desmontável por algum motivo. O volume raiz continha ferramentas suficientes para colocar o /usrvolume novamente online.

Vários tipos de Unix agora desconsideram esse antigo princípio de design, já que até os pequenos sistemas embarcados têm espaço suficiente para os arquivos de volume raiz tradicionais e todos /usrem um único volume.³ Red Hat Enterprise Linux, Solaris e Cygwin fazem uma ligação simbólica /binpara /usr/bine /libpara /usr/libque não haja mais qualquer diferença entre esses diretórios.

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

Sim. Refere-se ao fato de que os arquivos abaixo /usr/localdevem 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 do /usrNFS 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. caixa iria para baixo /usr/local, o 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 /usr/localquando instalados manualmente. A maioria desses softwares permite que você instale o pacote em outro lugar, mas ao fazer a 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 do macOS da Apple faz isso quando cria, digamos, a bashpartir do código-fonte GNU Bash . Eles usam /como prefixo de instalação, substituindo o /usr/localpadrão, para que o Bash termine /bin.

Outro exemplo é o modo como os sistemas Linux mais antigos segregaram seu software de GUI /usr/X11R6, para mantê-lo separado da linha de comando tradicional e do cursessoftware baseado em. Isso foi feito simplesmente substituindo o /usr/localprefixo 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". Muitos desses arquivos são 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.")

Arquivos de texto em uma caixa de Unix viver em outro lugar: /etc, /usr/include, /usr/share, etc.

Era uma vez, mesmo os scripts de shell - que são arquivos de texto sem formatação - eram mantidos fora dos bindiretórios, mas essa linha também ficou embaçada. Hoje, os bindiretórios 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 HOME=/usr/$NAMEesquema 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 Unix System V Versão 3.2 : aqui você vê a AT&T recomendando o /usr/$NAMEesquema antigo na última versão principal do Unix antes da saída do SVR4.

    Nos sistemas Unix mais antigos, era bastante comum 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 me deparei antes /home/$NAMEse tornou o padrão /u/$NAME.

    Outro sistema que eu usei no início de 1990 tinha tantos usuários que eles não poderiam caber todos os diretórios home em um único volume físico, por isso, eles usaram um esquema como /u1/$NAME, /u2/$NAMEe 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 pressionada Cmd-Senquanto é inicializada. 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á correndo 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 parecem manter arquivos críticos do modo de usuário único fora de casa /usrpodem não o fazer atualmente. Uma vez tornei uma caixa do FreeBSD 9 impossível de inicializar, movendo-me /usrpara um volume ZFS. Eu esqueci que os recursos do ZFS-on-root não chegaram até o FreeBSD 10, criando um Catch 22 : o sistema operacional precisava de arquivos /usrpara montar /usr!

    Isso já era ruim o suficiente, mas se o FreeBSD 9 ainda mantivesse suas coisas de inicialização de usuário único /usr, eu poderia ter corrigido isso. Como ele não inicializava nem no modo de usuário único por /usrser 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 chegamos /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 pelo X.Org .

  6. Os sistemas Unix originais mantinham seus scripts de shell principais /etcpara evitar misturá-los com os verdadeiros binários /bin.

Warren Young
fonte
3
Adorei essa foto da máquina de lavar!
ASGs
@ Warren, Quais são os sistemas operacionais notáveis ​​antes do Sistema III?
Pacerier
@Pacerier: Versões 1 a 7 do UNIX, UNIX / 32V, 1BSD a 4BSD, sem incluir as versões pontuais do 4BSD (4.1BSD era mais ou menos contemporâneo do AT&T Unix System III) e do PWB Unix. Fonte . Por que você pergunta e o que isso tem a ver com essa pergunta?
Warren Young
@Warren, Bem, eles poderiam ter afetado o defacto "sistema de diretório nomeando" de alguma forma
Pacerier
@ Pacerier: Eu vou defender minha afirmação: não havia "padrão" antes do Sistema V, apenas convenções e práticas locais.
Warren Young
9

Eu recomendaria consultar a 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 seu shell local para ver como ele funciona.

Tok
fonte
9

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

  • "usr" significa Recursos do Sistema UNIX. É o local em que os programas e bibliotecas do sistema sã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/binseria para programas e bibliotecas "principais" ou principais, onde /usr/local/binseria para programas e bibliotecas complementares e não críticas.

nzwulfin
fonte
12
Eu uso o Unix desde pouco depois da queda do Muro de Berlim, e eu nunca tinha ouvido a expansão "Recursos do sistema Unix" para "usr" até hoje; é um backronym. "usr" recebeu esse nome porque é onde os diretórios pessoais do usuário estavam originalmente localizados. Ou seja, se você tivesse um logon em uma caixa antiga do System III, seu diretório de trabalho inicial seria /usr/nzwulfinpor padrão. Outro esquema comum. antes que o /homeesquema SVR4 assumisse, era /u. Um sistema que usei desde o início tinha tantos usuários que precisavam de vários discos físicos para armazenamento de arquivos do usuário, então eles tinham coisas assim /u/d5/tangent.
Warren Young
3
@ Warren Eu também não ouvia e olhava o Google há um tempo; parece que existem alguns backrônimos
Michael Mrozek
4

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

No entanto, essa é uma péssima escolha, pois, nos sistemas Unix, /usrfoi padronizada no início dos anos 90 para conter uma hierarquia de arquivos que pertencem ao sistema operacional e, portanto, pode ser compartilhada por vários sistemas usando esse sistema operacional.

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

jlliagre
fonte
1

Eu recomendo que você use /usr/localpara 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 fornecer /homesua própria partição por esse motivo também.

ncmathsadist
fonte
0

Essa resposta também pode ser útil.

/ usr / local

A idéia original por trás disso /usr/localera ter um diretório separado ('local') '/ usr' em todas as máquinas /usr, o que poderia ser montado somente para leitura em outro lugar. Ele copia a estrutura de /usr.

Atualmente, /usr/localé amplamente considerado um bom lugar para manter programas auto-compilados ou de terceiros. A /usr/localhierarquia é 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, /usr/locale não a /usrmenos que esteja sendo instalado para substituir ou atualizar o software /usr.

Vishwanath gowda k
fonte