Existem duas maneiras principais de organizar arquivos a partir do software instalado: por pacote ou por tipo.
Sistemas Unix tendem a organizar arquivos de programas por tipo: executáveis em /usr/bin
, executáveis que são úteis apenas para o administrador do sistema em /usr/sbin
, bibliotecas de código e outros arquivos dependentes da arquitetura do processador em /usr/lib
, arquivos de dados que não dependem do tipo de processador em /usr/share
, páginas de manual em /usr/man
, documentação diversa /usr/doc
, etc. (Esta não é uma lista exaustiva e existem muitas variações). Eu usei o prefixo /usr
, mas há, na verdade, três desses fanouts: em /
para programas que são necessários no momento da inicialização (às vezes isso é mesclado com /usr
, pois a distinção nem sempre é relevante), em /usr
para programas que vêm com sistema operacional e em /usr/local
para programas instalados manualmente pelo administrador do sistema.
Na maioria dos sistemas Linux, a distinção entre /usr
e /usr/local
é que /usr
(e /
) é gerenciado pelo gerenciador de pacotes e /usr/local
não é. Portanto, se seu aplicativo for instalado usando a estrutura por tipo, ele deverá ficar abaixo de /usr
quando distribuído como um pacote (rpm, deb,…) e sob /usr/local
quando não distribuído como um pacote (por exemplo, se for distribuído como arquivo para ser descompactado manualmente).
Os arquivos de configuração normalmente são todos em /etc
, porque devem ser modificados pelo administrador do sistema. Se possível, faça com que seu aplicativo leia dados de configuração de /etc
e /usr/etc
ou /usr/local/etc
conforme apropriado, com as configurações em /etc/
substituindo as de /usr/etc
ou /usr/local/etc
. É comum agrupar dados de configuração com outros dados em /usr/share
ou /usr/local/share
, portanto, você descobrirá que muitos sistemas não têm /usr/etc
ou /usr/local/etc
.
O lado positivo da organização por tipo é que os arquivos são colocados onde serão usados. Todos os executáveis estão nos diretórios no caminho de procura executável ( $PATH
), todas as bibliotecas estão no caminho de pesquisa da biblioteca, todas as páginas de manual estão no caminho de pesquisa da página do manual etc. A única limitação dessa organização é que ela requer gerenciador de pacotes para acompanhar quais arquivos são instalados por cada pacote. Como a maioria dos softwares no Linux é distribuída através de um gerenciador de pacotes, a maioria dos softwares acaba em /usr
.
Outra maneira de organizar arquivos é por pacote, e o lugar padrão para isso é /opt
. Normalmente, ele é organizado como /opt/APPLICATION/bin
, /opt/APPLICATION/lib
, etc., às vezes com um nível adicional /opt/AUTHOR/APPLICATION/bin
etc. No entanto, os aplicativos são livres para gerenciar o diretório que quiserem; alguns colocam arquivos diversos diretamente em /opt/APPLICATION
. Isso torna o gerenciamento de pacotes trivial (apenas descompacte no lugar certo, use ls
para listar o software instalado, use rm -r
para desinstalar), mas dificulta o uso do software: o administrador ou o usuário precisa adicionar os locais apropriados caminhos de pesquisa ou para usar caminhos completos ou para criar links simbólicos.
Os arquivos em /opt
geralmente são gerenciados manualmente (esse é o ponto principal dessa organização), mas é possível ter pacotes lá gerenciados por um gerenciador de pacotes. Por exemplo, os pacotes deb do Chrome colocam-no em /opt
. Uma vantagem de fazer isso é que o Chrome está sempre em /opt/google/chrome
, independentemente de como ele foi instalado; possivelmente isso torna o suporte de distribuição cruzada um pouco mais fácil.
Se você quiser os detalhes de como os aplicativos e distribuições devem organizar arquivos no Linux, leia a FHS .
Em poucas palavras:
- Ao criar um pacote (deb, rpm,…), instale em
/usr
, com a opção de diretórios da distribuição (por exemplo,/usr/man
vs/usr/share/man
,/usr/lib
vs/usr/libexec
,/usr/lib
vs/usr/lib64
, etc.). - Ao instalar diretamente (por exemplo,
make install
), o padrão é instalar em/usr/local
(com os subdiretórios padrão: executáveis em/usr/local/bin
, arquivos de dados em/usr/local/share/APPLICATION
, etc.) e suporta outras opções que o administrador do sistema pode fazer. Note que o diretório onde os arquivos serão copiados durante a instalação pode não ser o mesmo diretório onde os arquivos serão usados, por exemplo, devido ao uso de stow (consulte Acompanhamento de programas ).
/opt
também é uma possibilidade em ambos os casos, mas você está sobrecarregando o administrador do sistema.