Diretórios com arquivos binários no Linux

6

Eu notei que quando eu instalo um novo aplicativo, existem alguns diretórios possíveis onde o arquivo binário resultante será colocado.

Você pode instalar com o gerenciador de pacotes, compilar com make , easy_install para o Python, etc.

Meu $PATH é o seguinte:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Existem algumas convenções ou regras que determinam em qual diretório o binário (ou biblioteca) resultante deve ser colocado?

Percebi que, quando você compila o código-fonte, o resultado costuma estar em /usr/local/bin/ . Esta é a regra?

Você poderia escrever a resposta que explica a filosofia Unix (decisões de design e convenções) de acordo com binários e por que é assim (por que não usar apenas um diretório para todos os binários)

    
por xralf 11.01.2012 / 11:36

3 respostas

8

Não existe uma regra rígida e rápida, mas cada distribuição tem sua própria lógica por trás de colocar as coisas onde elas estão. Geralmente, /bin é usado para binários do sistema, /usr/bin para aplicativos padrão que vêm com a distribuição e /usr/local/bin para itens instalados fora da distribuição normal. Você pode adicionar um X11 a qualquer um dos binários do X11 - /usr/X11/bin e /usr/local/X11/bin são bastante comuns. Alguns softwares também serão instalados em /opt .

Este artigo tem uma explicação mais detalhada sobre as coisas em / . E, claro, a wikipedia tem uma página.

    
por 11.01.2012 / 11:56
5

Além da resposta do @Sardathrion , os diretórios sbin são geralmente usados para os binários de vários tipos de ferramentas de gerenciamento de sistema, aplicativos de sistema de baixo nível e, frequentemente, daemons de sistemas de vários tipos.

Por exemplo, entre sbin s você encontrará coisas como /sbin/init (que controla o processo de inicialização assim que o kernel terminar sua inicialização interna), /sbin/hdparm (leia e defina os parâmetros operacionais do disco rígido), /usr/sbin/cupsd (daemon de impressão), /usr/sbin/smartctl (leia dados SMART de discos rígidos) e assim por diante.

A convenção geral é também que /usr é gerenciado pelo gerenciador de pacotes e /usr/local é gerenciado pelo usuário ou administrador do sistema (nos casos em que os dois não são um e o mesmo). Isso tem precedente histórico: quando o espaço em disco era caro, o / usr podia ser montado como somente leitura pela rede e compartilhado entre muitas estações de trabalho, mesmo com sistemas que não suportavam a inicialização de rede definitiva. Cada estação de trabalho poderia então ter seu próprio sistema de arquivos raiz, relativamente pequeno, / usr / local, bem como possivelmente um (relativamente leve) ( / ). Essa distinção entre / usr e / usr / local é provavelmente a razão pela qual a maioria dos pacotes padrão é instalada em / usr / local quando compilada a partir do código-fonte.

    
por 11.01.2012 / 16:37
2

O Padrão de hierarquia do sistema de arquivos especifica where as distribuições Linux devem colocar arquivos .

Os diretórios

bin contêm executáveis destinados a serem usados por qualquer usuário, enquanto os diretórios sbin contêm executáveis destinados a serem usados apenas pelo administrador do sistema. Os diretórios sbin são normalmente apenas em $PATH da raiz.

/bin (e /sbin ) contêm programas que são necessários no início do processo de inicialização, porque /usr pode ser montado em uma partição separada (mesmo que isso seja raro agora).

/usr/bin (e /usr/sbin ) contêm programas fornecidos pela distribuição e que não estão em /bin ou /sbin . Em um sistema típico, a grande maioria dos executáveis está em /usr/bin .

A hierarquia /usr/local é o domínio do administrador. Os diretórios /lib , /bin , /sbin e /usr são normalmente reservados para a distribuição e geralmente contêm apenas arquivos fornecidos pelo gerenciador de pacotes do sistema. /usr/local (e, em particular, /usr/local/bin e /usr/local/sbin ) são intocados pelo gerenciador de pacotes, portanto, é nesse local que o administrador local pode colocar os executáveis instalados manualmente.

/usr/games pode conter executáveis fornecidos pela distribuição e considerados puramente recreativos. É em grande parte uma sobrevivência histórica (há muito tempo atrás, /usr/games podia estar fora dos limites em determinados momentos do dia, mas esse tipo de prática - que era fácil de se trabalhar de qualquer maneira - já havia diminuído).

Outros locais executáveis comuns no sistema Linux incluem:

  • /usr/X11R6/bin ou /usr/bin/X11 para programas X. A prática de separar programas X de programas não-X diminuiu; hoje em dia todos vivem em /usr/bin .
  • /usr/bin/mh para executáveis do cliente de e-mail MH , que manipula e-mails por meio de comandos de shell de finalidade única ( show para exibir uma mensagem, forw para encaminhar um e-mail,…) Somente usuários de MH colocariam /usr/bin/mh em seus $PATH .
  • /opt/bin , se existir, conteria links simbólicos para aplicativos instalados em /opt .

As regras para o Linux são inspiradas por diretrizes gerais seguidas pela maioria dos sistemas unix, mas cada variante do unix tem suas próprias peculiaridades. Por exemplo:

  • Em * BSD, / e /usr contêm apenas o núcleo da distribuição: serviços e aplicativos básicos que são mantidos diretamente pelos mantenedores da distribuição. Programas de terceiros (“pacotes” ou “portas”) são instalados em /usr/local , mesmo que sejam gerenciados por um gerenciador de pacotes. Não há local separado comumente aceito para programas fornecidos pelo administrador do sistema.
  • Alguns sistemas unix não têm o diretório /bin , é um link simbólico para /sbin ou /usr/bin .
  • Alguns sistemas podem ter diretórios extras contendo o pacote opcional, cada um deles colocando seu próprio diretório bin no $PATH .
  • Alguns sistemas podem ter diretórios extras que podem ou não ser colocados no $PATH dependendo do que o ambiente de execução deve ser compatível, por exemplo, /usr/bin/posix ou /usr/xpg4/bin ou /usr/xpg6/bin para compatibilidade com POSIX / Único Unix, ou /usr/ucb para compatibilidade com sistemas legados BSD.
por 12.01.2012 / 02:30