melhor estratégia para fazer backup dos * seus scripts *?

1

--- perguntou já no unix.StackExchange, mas desligou (muito subjetivo) ---

Reescrito para maior clareza.

  • Eu quero escrever scripts para meu próprio uso
  • Eu quero poder apoiá-los
  • Ainda não estabeleci a rotina de backup - vou escrever um script.
  • será meu quarto roteiro e minha primeira abordagem séria para fazer o backup (seja gentil).

Qual é a estratégia mais eficaz, considerando que dois fatores parecem estar em desvantagem:

a) entre várias opções, /usr/local/bin é amplamente defendido como     localização mais vantajosa para scripts personalizados (mas não exclusivamente; veja      1 , 2 , 3 );

b) /usr/local/bin está cheio de outros arquivos gerados automaticamente     arquivos (por exemplo, Dropbox, etc) que eu não gostaria de ter em um backup e, portanto, seria     tem que descobrir uma maneira de filtrar (não é uma tarefa trivial para minha habilidade     nível, embora eu esteja disposto a aprender).

Atacar isso do "diretório final" (por exemplo, "não use esse diretório, use este!") ou do "fim do script de backup" (por exemplo, um filtro efetivo que eu possa usar com tar ou cp ou qualquer outra coisa para extrair meus arquivos de script da multidão em /usr/local/bin ).

Não consigo encontrar ninguém falando sobre essas duas coisas em um só lugar (mas "backup" e "scripts" pula com "scripts de backup", então talvez eu tenha perdido isso).

Felicidades - obrigado pelas respostas construtivas até agora.

PS - veja também versão anterior desta questão em outro lugar para algumas respostas úteis antes do desligamento.

    
por j doe will do just fine 04.01.2018 / 00:29

1 resposta

3

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
    
por Byte Commander 04.01.2018 / 01:08