Onde deve ser colocado um executável local?

47

Eu tenho um executável para o cliente de controle de versão perforce ( p4 ). Não consigo colocá-lo em /opt/local porque não tenho privilégios de root. Existe um local padrão onde ele precisa ser colocado sob $HOME ?

A hierarquia do sistema de arquivos tem uma convenção que diz que os executáveis / binários locais precisam ser colocados em $HOME/bin ?

Não encontrei essa convenção mencionada no artigo da Wikipédia para a ESF .

Além disso, se realmente houver uma convenção, terei que incluir explicitamente o caminho para o diretório $HOME/bin ou qualquer que seja a localização do diretório bin ?

    
por user640378 19.04.2012 / 16:16

2 respostas

52

Em geral, se um binário não instalado e mantido pelo sistema precisar ser acessível para todo o sistema para vários usuários, ele deverá ser colocado por um administrador em /usr/local/bin . Existe uma hierarquia completa em /usr/local que é geralmente usada para pacotes de software compilados e instalados localmente.

Se você for o único usuário de um binário, instalar em $HOME/bin é o local apropriado, já que você mesmo pode instalá-lo e será o único consumidor. Se você compilar um pacote de software a partir do código-fonte, também é apropriado criar uma hierarquia local parcial ou completa no diretório $HOME . A hierarquia local completa ficaria assim.

  • $HOME/bin Binários locais
  • $HOME/etc Configuração do sistema específica do host para binários locais
  • $HOME/games Binários do jogo local
  • $HOME/include Arquivos de cabeçalho C locais
  • $HOME/lib Bibliotecas locais
  • $HOME/lib64 Bibliotecas locais de 64 bits
  • $HOME/man manuais on-line locais
  • $HOME/sbin Binários do sistema local
  • $HOME/share Hierarquia independente da arquitetura local
  • $HOME/src código-fonte local

Ao executar configure , você deve definir sua hierarquia local para instalação, especificando $HOME como o prefixo para os padrões de instalação.

./configure --prefix=$HOME

Agora, quando make && make install for executado, os binários, pacotes, man pages e bibliotecas compilados serão instalados na sua hierarquia local $HOME . Se você não criou manualmente uma $HOME hierarquia local, make install criará os diretórios necessários ao pacote de software.

Uma vez instalado em $HOME/bin , você pode adicionar $HOME/bin ao seu $PATH ou chamar o binário usando o $PATH absoluto. Algumas distribuições incluirão $HOME/bin no seu $PATH por padrão. Você pode testar isso por echo $PATH e ver se $HOME/bin está lá, ou colocar o binário em $HOME/bin e executar which binaryname . Se ele voltar com $HOME/bin/binaryname , ele estará no $ PATH por padrão.

    
por 19.04.2012 / 16:27
20

Como uther mencionado , /usr/local é pretendido como um prefixo para, essencialmente, software instalado pelo administrador do sistema, enquanto /usr deve ser usado para o software instalado a partir dos pacotes da distribuição.

A idéia por trás disso é evitar confrontos com software distribuído (como rpm e deb packages) e dar ao admin o reinado completo sobre o prefixo "local".

Isso significa que um administrador pode instalar software compilado personalizado enquanto ainda usa uma distro como o debian.

From the FHS

Software placed in / or /usr may be overwritten by system upgrades (though we recommend that distributions do not overwrite data in /etc under these circumstances). For this reason, local software must not be placed outside of /usr/local without good reason.

Ao instalar um software específico do usuário, uther sugere usando $HOME como prefixo, pois isso garante que você tenha permissões de gravação. Pessoalmente, eu me sinto usando $HOME/.local para ser uma solução mais elegante, já que evita bagunçar seu (esperançosamente) diretório pessoal legal e arrumado!

$HOME/.local/share já é usado na especificação do Diretório base do XDG do freedesktop.org , por isso, não é preciso esperar muito para adicionar um $HOME/.local/bin ao seu $PATH e fazer um $HOME/.local/lib , etc, enquanto você está nisso.

Se você realmente não quiser que seu prefixo seja um diretório oculto, também poderá criar um link simbólico para ele com facilidade, por exemplo:

ln -s .local ~/local

Sidenote

Vale a pena notar que .config (não .local/etc ) é o valor padrão para $XDG_CONFIG_HOME usado para arquivos de configuração específicos do usuário. Também devo salientar que, infelizmente, uma grande parte do software ignora o XDG e cria arquivos de configuração onde quer que eles gostem (geralmente na raiz de $HOME ). Observe também que $XDG_CONFIG_HOME pode não ser definido se o padrão $HOME/.config for desejado.

Por estranho que pareça, não há nenhum diretório reservado para os arquivos de configuração padrão de uma distribuição, então não há como saber se um arquivo em /etc foi fornecido pela distro ou editado pelo administrador do sistema.

    
por 20.02.2016 / 04:07