Onde é um bom local permanente para instalar scripts bash personalizados?

32

Estou prestes a instalar o "leiningen", que é um script bash para a linguagem de programação clojure com muita utilidade ... ... mas não tenho certeza de onde é apropriado colocar um script executável no linux sistema para que fique permanentemente e estável.

Eu não acho que em qualquer lugar do / home faça sentido, mas não sei qual diretório / diretórios deve ser usado para isso.

/ usr / share?

Kzqai
fonte
1
pathname.com/fhs/pub/fhs-2.3.html
Ignacio Vazquez-Abrams

Respostas:

45

(Nota: ~traduz como /home/userneste post)

Pessoalmente, coloquei todos os meus scripts de sistema personalizados /usr/local/bine todos os meus scripts de bash pessoais ~/bin. Pouquíssimos programas que eu instalo se colocam no /usr/local/bindiretório, para que não seja muito confuso e já esteja na $PATHvariável na maioria das minhas máquinas.

Para adicionar /usr/local/binao caminho do sistema (se ainda não estiver lá), adicione-o a /etc/profile:

PATH=$PATH:/usr/local/bin
export PATH

Para adicionar ~/binao caminho do usuário, adicione-o a ~/.bash_profile:

PATH=$PATH:$HOME/bin
export PATH

Às vezes, o padrão .bash_profilearquivo terá uma instrução if que adiciona automaticamente ~/binao $PATHse ele existir, então criar o ~/bine abrir um novo terminal para ver se o seu já faz isso.

Trey Hunner
fonte
Os BSDs fazem isso por padrão.
Chris S
@ Chris: Os BSDs colocam muitas coisas em / usr / local / bin #
Dan Andreatta
Qual é a diferença entre seus scripts bash e scripts do sistema, e há um motivo para você separar os dois?
Hashim
@Hashim Eu não posso falar por Trey, é claro, mas as ferramentas que você desenvolve para suas necessidades pessoais tendem a "se graduar" nas ferramentas do sistema quando você percebe que elas resolvem um problema que outras pessoas estão enfrentando, ou você tem outra instalação em todo o sistema que depende em uma dessas ferramentas. Eu suspeito que o limite para instalar algo em todo o sistema seja bastante alto para a maioria dos programadores. Além disso, uma ferramenta que você compartilha precisa ter documentação etc, que muitos desenvolvedores raramente escrevem de outra forma.
tripleee 29/06
Como um aparte, não há necessidade de exportuma variável várias vezes (e provavelmente seu sistema já foi marcado PATHpara exportação, para que você não precise fazer isso sozinho).
tripleee 29/06
9

/ usr / local / é realmente o lugar certo, enquanto / opt é realmente para aplicativos de terceiros; "/ opt está reservado para a instalação de pacotes de aplicativos complementares." Isso faz parte do padrão de hierarquia do sistema de arquivos.

Consulte http://www.pathname.com/fhs/pub/fhs-2.3.html para obter uma discussão sobre / opt.

Para / usr / local /, é para "uso pelo administrador do sistema". Só não se esqueça das coisas lá - documente.

Jamieson Becker
fonte
O link que você forneceu informa "Os diretórios / opt / bin, / opt / doc, / opt / include, / opt / info, / opt / lib e / opt / man estão reservados para uso do administrador do sistema local". Não há nada sobre / usr / local. Somente / usr / local / share é mencionado lá. Por outro lado, os programas compilados geralmente são instalados no / usr / local no Linux. Você não acha que / opt / bin é o melhor lugar para uso do administrador do sistema?
raacer
1
@raacer Minha experiência é que /usr/local- como o nome indica - é para o administrador local e /optpara coisas que não são oficialmente distribuídas, como software comercial de terceiros gerenciado por um processo semelhante (pode ser substituído ou apagado em uma atualização de upstream), mas não gerenciado pelo gerenciador de pacotes da distribuição, ou talvez realmente distribuído como RPM ou .debpacotes, mas não organizado e empacotado em conformidade com todas as políticas e convenções da distribuição.
tripleee 29/06
1
@raacer Há uma seção separada inteiramente sobre /usr/localmais adiante neste documento.
tripleee 29/06
@raacer tripleee está certo. Aqui está o link: pathname.com/fhs/pub/… . Programas corretos e compilados (geralmente de código aberto) que são compilados / criados especificamente para esse sistema ou compartilhados entre vários sistemas (mas não fazem parte do pacote / distribuição normal do SO, mas que dependem muito de bibliotecas compartilhadas) devem ser instaladas em / usr / local (basicamente reflete a hierarquia de / usr). Softwares de terceiros compilados em um sistema possivelmente diferente com possivelmente seu próprio suporte de biblioteca (por exemplo, firefox, userify) devem entrar / optar.
Jamieson Becker
3

Historicamente, você usaria algo como / opt. Tudo está bem, desde que seja atualizado em $ PATH para os usuários que deveriam tê-lo (portanto, qualquer coisa em / home é uma má idéia).

Tony
fonte
2

/usr/share/clojureparece um local comum para colocar os binários e bibliotecas do clojure - por que eu não sei, parece natural /usr/local/share/clojure- então criar um sitesubdiretório para esses scripts bash é bom.

O ponto geral é que faz mais sentido organizar scripts por função, não ter todos os scripts bash no mesmo local.

Charles Stewart
fonte
1
Existem alguns problemas /usr/sharepara isso. Antes de tudo, sharesignifica arquivos independentes de arquitetura (ou seja, compartilhados entre arquiteturas). Por esse motivo, bibliotecas e executáveis ​​não pertencem a um sharediretório. Em segundo lugar, exceto a partir de /usr/localnada além do que o gerente de pacotes de distribuição deve escrever /usr.
kasperd
2

/usr/local, Acredito que haja alguma confusão no significado de "local".

Pelo que entendi, "local" não significa "originário da / da máquina local", mas, mais simplesmente, "específico da máquina local", que pode ou não ser originário da / da máquina local.

Hatebit
fonte