Onde um executável local deve ser colocado?

62

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

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

Não consegui encontrar essa convenção mencionada no artigo da Wikipedia para a ESF .

Além disso, se realmente houver uma convenção, eu precisaria incluir explicitamente o caminho para o $HOME/bindiretório ou qualquer que seja o local do bindiretório?

user640378
fonte

Respostas:

64

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

Se você é o único usuário de um binário, a instalação $HOME/biné no local apropriado, pois você pode instalá-lo e será o único consumidor. Se você compilar um pacote de software a partir da fonte, também é apropriado criar uma hierarquia local parcial ou completa em seu $HOMEdiretório. A hierarquia local completa seria assim.

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

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

./configure --prefix=$HOME

Agora, quando make && make installexecutados, os binários, pacotes, páginas de manual e bibliotecas compilados serão instalados na sua $HOMEhierarquia local. Se você não criou manualmente uma $HOMEhierarquia local, make installcriará os diretórios necessários ao pacote de software.

Uma vez instalado $HOME/bin, você pode adicionar $HOME/binao seu $PATHou chamar o binário usando o absoluto $PATH. Algumas distribuições serão incluídas $HOME/binno seu $PATHpor padrão. Você pode testar isso echo $PATHverificando se $HOME/binexiste ou colocar o binário $HOME/bine executar which binaryname. Se voltar $HOME/bin/binaryname, ele estará no seu $ PATH por padrão.

George M
fonte
5
contanto que $ HOME não esteja em um sistema de arquivos montado noexec. / tmp / também costuma ser montado noexec.
precisa saber é o seguinte
3
Isso está correto, faz parte do FHS (Filesystem Hierarchy Standard). pathname.com/fhs/pub/fhs-2.3.html#USRLOCALLOCALHIERARCHY
Patrick
29
Eu não recomendaria o uso $HOME. Isso inunda seu diretório pessoal com vários diretórios nos quais você não está interessado. Quem quer ter man, libetc. em uns dir casa? Prefiro criar a hierarquia abaixo $HOME/binou $HOME/local. Isso adiciona apenas um subdiretório ao diretório inicial, em vez de dez. O PATHpode ser facilmente adaptado para incluir $HOME/bin/binou $HOME/local/bin.
Marco
18
Uma opção é usar $ HOME / .local / {bin, lib, etc.}, Conforme usado por exemplo na especificação baseada em XDG ( standards.freedesktop.org/basedir-spec/basedir-spec-latest.html ) e python python.org/dev/peps/pep-0370 )
janneb
4
@janneb A especificação de diretório base do XDG a que você se refere apenas $HOME/.local/share(versão 0.7, 24 de novembro de 2010).
Piotr Dobrogost
28

Como mencionado anteriormente , ele /usr/localpretende ser um prefixo para, essencialmente, o software instalado pelo administrador do sistema, enquanto /usrdeve ser usado para o software instalado a partir dos pacotes da distribuição.

A idéia por trás disso é para evitar confrontos com software distribuído (como rpme debpacotes) e dar o administrador pleno reinado sobre o prefixo "local".

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

Da ESF

O software colocado em / ou / usr pode ser sobrescrito pelas atualizações do sistema (embora recomendamos que as distribuições não sobrescrevam dados em / etc sob essas circunstâncias). Por esse motivo, o software local não deve ser colocado fora de / usr / local sem um bom motivo.

Ao instalar software específico do usuário, outro sugere o uso $HOMEcomo prefixo, pois isso garante que você tenha permissões de gravação. Pessoalmente, sinto que estou usando $HOME/.localuma solução mais elegante, pois evita sobrecarregar o seu diretório pessoal (espero) agradável e arrumado!

$HOME/.local/sharejá é usado na especificação do diretório básico do freedesktop.org XDG , portanto, não é preciso muito tempo para adicionar um $HOME/.local/binao seu $PATHe criar um $HOME/.local/libetc, enquanto você está nisso.

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

ln -s .local ~/local

Nota

Vale ressaltar que .config(not .local/etc) é o valor padrão $XDG_CONFIG_HOMEusado para arquivos de configuração específicos do usuário. Devo também salientar que, infelizmente, uma grande parte do software ignora o XDG e cria arquivos de configuração onde quiserem (geralmente na raiz do $HOME). Observe também que $XDG_CONFIG_HOMEpode ser desabilitado se o padrão $HOME/.configfor desejado.

Estranhamente, não há diretório reservado para os arquivos de configuração padrão de uma distribuição; portanto, não há como saber se um arquivo /etcfoi fornecido pela distribuição ou editado pelo administrador do sistema.

MattSturgeon
fonte
11
Não consigo encontrar nenhuma menção .localna ESF #
Daniel Serodio 25/10
@DanielSerodio Está na especificação do diretório XDG, um padrão mais recente que ganha destaque. Consulte unix.stackexchange.com/questions/316765/… e superuser.com/questions/1170793/…
ivan_pozdeev
Essa observação lateral /etcé realmente muito chata ao gerenciar um servidor com vários administradores - é muito difícil acompanhar as edições personalizadas nos arquivos conf.
naught101 3/03