Onde devo colocar meus scripts bash

15

Eu tenho alguns scripts bash muito simples que juntei para as coisas que faço regularmente. Uma delas é executar duplicidade para executar minhas tarefas de backup. Nada inteligente, apenas um monte de declarações if .. then realmente. Como isso precisa ser executado como sudo, seria uma boa prática colocar meu script em / usr / bin (ou outro local no PATH), chown para root.root e chmod para 700?

chapeleiro
fonte
Eu diria que use gitpara controlar a versão de seus scripts, coloque cópias locais dos repositórios git em algum lugar em que você goste ~e, em seguida, faça o link simbólico dos scripts ~/bin.
precisa saber é o seguinte
Você quer dizer gitcomo nas githubnuvens?
WinEunuuchs2Unix 26/09/16
2
@ WinEunuuchs2Unix Se você quiser que seus scripts estejam disponíveis para outros usuários, você deve colocá-los /usr/local/bin. Caso contrário, eu diria apenas colocá-los ~/bin. Seus próprios scripts nos dois diretórios devem estar seguros quando você atualizar.
precisa saber é o seguinte
2
Como acima, coloque-os em / usr / local / bin. Apenas certifique-se de que seus nomes de script sejam exclusivos e não um comando / nome binário existente no linux. Eu mesmo apenas adiciono um número ao final de qualquer script que eu criar, pois não vi nenhum nome Linux pré-existente terminar em um número. (para não dizer que alguns realmente obscuros podem ...
doug
11
@edwinksl Quase um ano depois, devo dizer que ~/biné o melhor lugar para a maioria dos scripts, pois você não precisa sudoeditá-los, como quando estão armazenados /usr/local/bin.
WinEunuuchs2Unix

Respostas:

3

Eu salvo meus próprios scripts /opt/scripts.

Se seu script deve ser executado por todos os usuários do sistema, você pode criar um link simbólico para /usr/bin.

Se apenas o root executar o script, você poderá criar um link simbólico para /usr/sbin.

Comando para adicionar um link simbólico em /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Você pode executar o script, porque /usr/bin/está no seu PATH por padrão.

SynPrime
fonte
11
Eu recomendaria que, em vez de usar /usr/bincomo alvo o script de shell do usuário / local - que seja /usr/local/bin(ou /opt/bin) de acordo com o Padrão de Hierarquia de Sistema de Arquivos - Debian Wiki para evitar conflitos (na maioria das vezes, você deseja que os scripts fornecidos pelo Ubuntu tenham precedência).
shalomb
Na maioria dos sistemas /usr/local/binsubstitui /usr/bin, como ocorre mais tarde no caminho. Isso é de propósito, como o sistema não coloca arquivos lá, então você pode colocar arquivos lá, que DEVERÃO substituir os fornecidos pelo sistema.
allo
Marquei isso como a resposta correta, mesmo que ambas as respostas pareçam boas. A razão é que eu decidi dar uma olhada nos documentos da ESF e saí com o entendimento de que / opt existe para exatamente esse propósito. Eu gosto da idéia deles simplesmente ligando para meus scripts em / usr / local / bin. Obrigado por todos os ponteiros.
Hatterman
17

Se nenhum outro usuário além de você usar estes scripts:

Então você pode mantê-los /home/$USER/bin. Crie a binpasta se ela não estiver lá e mova os arquivos para lá. A pasta bin em sua casa será adicionada automaticamente à variável de ambiente PATH. O código está no .profile:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Consulte Como adicionar / home / nome de usuário / bin ao $ PATH?

Ou, em alguns sistemas, pode estar em .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Obrigado Elder Geek

Se estes scripts forem usados ​​por outros usuários:

Então, /usr/local/binou /opt/binsão ou são boas opções. Consulte Existe um local padrão para a colocação de scripts Linux personalizados?

Espero que isto ajude

user68186
fonte
3

Eu tenho um diretório que eu uso para a coleção rápida de minhas ferramentas locais ou coisas que implanto em vários computadores /usr/local/apollo. Existem ramificações deste diretório para flags, bine logs.

Para os aplicativos que eu baixa e instalo fora dos apt-getrepositórios padrão, são colocados /opt/e um diretório com o nome do aplicativo, com mais um subdiretório para a versão específica do aplicativo. Dessa forma, minha versão compilada de um aplicativo gosta vlcou eclipsenão entra em conflito com a versão distribuída.

Meu uso /opté basicamente o design oficial.

Pela forma como os diretórios /usr/local/bin, /usr/local/apollo, e /optsobrevive uma nova sobrescrever a instalação da versão do SO.

LD James
fonte
11
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binEu gosto do fato de /usr/local/binjá estar no caminho uma coisa a menos para lembrar. Gosto do seu método /opt/program/version, posso usá-lo para as coisas do Kernel que obtenho e compilo como o EnhanceIO, onde elas mudam as coisas entre as versões do kernel. /apolloUma aterrissagem na lua é a favorita pessoal ou tem significado para o Ubuntu?
WinEunuuchs2Unix 26/09/16
Qual é a diferença entre /usr/local/bine de usr/local/sbintal forma que este último é bloqueado durante as atualizações?
WinEunuuchs2Unix
O instalador Nukes os diretórios que ele usa. Ele convenientemente cria /usr/localdiretórios, mas não coloca nada em nenhum deles. Esses diretórios são preenchidos pelo usuário. Muitos programas de origem fora dos repositórios oferecem ao usuário a opção de selecionar para onde eles querem que a instalação vá. O padrão nos arquivos de configuração é /usr/local/bin. Portanto, como é comum o uso desses diretórios, eles são incluídos no caminho do usuário por padrão. Por padrão, o sistema verifica ~/bin e o adiciona ao caminho, se existir.
LD James
Você quer dizer que o sistema verifica ~/bindurante a instalação ou toda inicialização? Qual é a diferença entre sbine bin? Eles parecem coexistir, deve haver quase-regras nas quais você escolhe com base no tipo de programa, certo?
WinEunuuchs2Unix 26/09/16
11
@ WinEunuuchs2Unix No ~/bincaminho ... não é adicionado durante a instalação. O sistema o verifica em todos os logins e o adiciona ao $ PATH, se existir durante o logon. Veja as duas últimas linhas de suas ~/.profileconfigurações.
LD James