Você mencionou duas coisas, que não acredito serem boas soluções:
"Criado por":
Os atributos de arquivo padrão do Linux incluem um usuário e um grupo de proprietários. Eu recomendo strongmente que você tenha certeza de que todos os arquivos em /usr/local/bin
(ou na verdade quase todos os diretórios que contêm material a ser acessado por todos os usuários) sejam de propriedade de root
como usuário e grupo, e também graváveis apenas pelo proprietário. Essa é uma medida de segurança que deve impedir modificações não privilegiadas no arquivo, que podem ser executadas posteriormente por outra pessoa ou com privilégios elevados usando sudo
.
Assim, como o proprietário de todos os scripts em /usr/local/bin
deve ser root
, não podemos usar isso para distinguir os scripts dos quais você deseja fazer o backup.
"Subdiretório":
Executáveis dentro de subdiretórios de /usr/local/bin
não seriam aceitos pelo sistema como comandos que você pode executar diretamente sem um caminho. O motivo é que, para isso, um executável precisa estar diretamente dentro de um diretório listado na variável de ambiente $PATH
. Subdiretórios não são incluídos automaticamente aqui, cada local precisa ser explicitamente especificado - novamente, como uma melhoria de segurança para diminuir o risco de executar código não confiável acidentalmente.
Embora seja possível adicionar esse subdiretório em todos os locais necessários, não altero todos os usuários $PATH
(e, para não esquecer, o /etc/sudoers
da configuração secure_path
também deve incluir o novo diretório, se você quiser acessá-lo quando usar sudo
).
Agora, o que você poderia fazer? Aqui estão algumas ideias:
Diretório bin específico do usuário:
Se você não precisar desses scripts em todo o sistema para todos os usuários, mas apenas para sua própria conta, basta colocá-los em ~/bin
( ~
sendo seu diretório pessoal). Esta localização é apenas da conta $PATH
do seu próprio utilizador, não de qualquer outra pessoa. Para seus scripts pessoais, essa deve ser a maneira mais simples.
Lembre-se de que você precisa reiniciar o shell atual uma vez (feche e reabra a janela do terminal, digite source ~/.profile
ou efetue logout e volte) se você acabou de criar o diretório durante a sessão atual. Isso ocorre porque o diretório é adicionado somente se existir quando o shell for inicializado. Você não precisa fazer isso novamente mais tarde.
Mantenha uma lista dos seus scripts:
Basta ter um arquivo de texto em algum lugar, listando os caminhos de todos os seus scripts / arquivos dos quais você deseja fazer o backup. Então você pode simplesmente processar esta lista com outro script / comando como o abaixo para copiá-los para o seu diretório de backup:
#!/bin/bash
backupdir=~/backup/scripts
listfile=~/backup/script-list.txt
while read line ; do
cp -- "$line" "$backupdir"
done < "$listfile"
Você só precisa manter o arquivo de lista (aqui ~/backup/script-list.txt
) atualizado e bem formatado. Nesta versão simples, você deve certificar-se de que cada linha contenha exatamente um caminho absoluto para um arquivo que você deseja fazer backup, sem espaços à esquerda ou à direita e sem linhas vazias. É claro que o script pode ser melhorado para lidar com esses casos, mas isso é apenas um protótipo rápido.
Adicione uma "assinatura" aos seus próprios scripts e faça o backup dos que a contenham:
Pense em uma string única que você adiciona a todos os seus próprios scripts, por exemplo, em um comentário. Isso pode parecer com *** CREATED BY BYTECOMMANDER ***
ou mais, talvez até mais exclusivo. Em seguida, você pode criar um script de backup que varre /usr/local/bin
para arquivos que contenham sua linha de assinatura e copie apenas esses, deixando outros em paz:
#!/bin/bash
backupdir=~/backup/scripts
signature="*** CREATED BY BYTECOMMANDER ***"
for scriptfile in /usr/local/bin/* ; do
if grep -qF "$signature" "$scriptfile" ; then
cp -- "$scriptfile" "$backupdir"
fi
done