Para dividir isso em partes, há duas seções principais, seguidas por um resumo e notas:
- O comando
rsync
:
rsync -uva --delete /srv/bkp01 /srv/offbk2/
- o redirecionamento de saída feito pelo shell executando o comando rsync:
rsync-command > ~/offbkp01.log
rsync
comando:
Comando base:
-
rsync
- Suponho que isso não precisa de explicação (mas será fornecido se solicitado).
Opções de comando:
-
-uva
- Um conjunto de opções de caractere único, sendo (formato curto e longo mostrado):-
-u
--update
- Informa ao rsync que todas as modificações devem ser aplicadas apenas aos arquivos no destino com a mesma idade (e tamanhos diferentes) ou mais antigos que os da origem. Ou seja, o rsync só deve transmitir as alterações da fonte que atualizar o destino, mas não deve fazer nenhuma alteração que torne um arquivo de destino uma versão mais antiga.Existem algumas exceções. Diferenças no tipo (por exemplo, um é um arquivo, o outro é um diretório) causará uma atualização, independentemente das datas. Links simbólicos e outros arquivos especiais ignoram essa opção. E, importante, isso não afeta quais arquivos são excluídos.
-
-v
--verbose
- Aumenta a quantidade de informações que o rsync imprime durante a execução. Sem isso, o rsync irá imprimir (quase?) Nada. Com esta opção como está, o rsync lhe dirá quais arquivos estão sendo transferidos e colocará um resumo no final. Maisv
s aumentam as informações impressas, embora a página do manual diga que mais de doisv
s devem ser usados apenas durante a depuração. -
-a
--archive
- Isso é equivalente a várias outras opções (-rlptgD
) empacotadas juntas. Como o nome longo sugere, é uma maneira rápida de definir muitas opções comuns para arquivar arquivos e diretórios. Vai:
-
-r
--recursive
- Diz ao rsync para copiar os diretórios recursivamente. Sem isso, ou a opção mais específica-d
--dirs
, o rsync simplesmente ignora os diretórios encontrados (e informa sobre isso em sua saída). -
-l
--links
- Quando a fonte é um link simbólico, crie um symlink no destino. Dependendo de outras opções, os links simbólicos podem ser ignorados ou transformados em uma cópia separada completa (isto é, um diretório verdadeiro com conteúdo (ou outra cópia do arquivo) em vez do symlink). -
-p
--perms
- Define as permissões dos arquivos de destino para os mesmos que os arquivos de origem. -
-t
--times
- Define os tempos de modificação dos arquivos de destino para os mesmos que os arquivos de origem. Como manter esses tempos em sincronia torna o algoritmo rsync mais eficiente, geralmente você sempre quer que isso seja usado, de forma explícita ou implícita. -
-g
--group
- Define o atributo de grupo do destino para o mesmo que a origem. Associa por nome por padrão, mas retornará ao número de ID do grupo em algumas circunstâncias. Se o receber rsync não for executado como superusuário (ou falsificá-lo com--fake-super
), apenas os grupos que o usuário que invocou o rsync no lado de recebimento será um membro de pode ser definido. Caso contrário, o grupo será definido apenas para o grupo padrão do mesmo usuário mencionado anteriormente. -
-D
- Equivalente às opções--devices
e--specials
juntas. Eles significam:-
--devices
- Os arquivos de dispositivos de caracteres e blocos são transferidos. Não tem efeito se o receber rsync não for executado como superusuário (ou falsificá-lo com--fake-super
). -
--specials
- Arquivos especiais (como sockets) são transferidos (caso contrário não seriam).
-
-
-
-
--delete
- Diz ao rsync para excluir arquivos que estão no destino, mas não na origem. Isso NÃO é afetado pela opção de atualização definida acima (de fato, como poderia ser, já que a maioria dos sistemas de arquivos não reterá os dados necessários para ver qual ação era mais recente?). Esta opção atua nas fontes após expansão curinga / glob, assim dir / * não é o mesmo que dir /. Algumas notas importantes:
- Isto é, obviamente, perigoso. Provavelmente, você deve tentar com a opção
--dry-run
primeiro, que fará uma transferência fingida que permite que você tenha certeza de que nenhuma mudança não intencional foi feita. - Se houver algum erro de E / S (entrada / saída) - ou seja, se algo der errado ao transferir, ler ou gravar alterações - a exclusão será ignorada a partir desse ponto. Isso pode ser substituído com a opção
--ignore-errors
, embora você provavelmente não queira fazer isso. - Existem várias variações no algoritmo de exclusão, sobre as quais você pode ler mais na página do manual. Quando o rsync de recebimento for da versão 3.0.0 ou mais recente (no momento em que este texto foi escrito), o algoritmo
--delete-during
será usado. Se o receptor for mais antigo,--delete-before
será usado.Se é importante que os arquivos mantenham um certo tipo de consistência caso ocorra um erro (por exemplo, não excluir nada até que todas as outras alterações sejam feitas), você deve usar uma opção mais específica que a padrão.
- Isto é, obviamente, perigoso. Provavelmente, você deve tentar com a opção
Locais de comando:
-
/srv/bkp01
- O arquivo ou diretório de origem. Existem algumas regras detalhadas sobre o que significa se houver / não uma barra no final do diretório e se o outro diretório existir. Você pode ver a seção UTILIZAÇÃO da página man para os detalhes, mas aqui a falta de uma barra significa que este diretório será copiado para o destino, em vez do diretório deste diretório. conteúdo sendo copiado para o destino. O mesmo se isso for um arquivo em vez de um diretório. -
/srv/offbk2/
- O diretório de destino. Em geral, este será sempre o último item listado na seção de comando rsync, a menos que uma opção seja usada para especificá-lo em outro lugar no comando.
Redirecionamento de saída da Shell:
Comandos do shell:
-
>
- Isso redireciona o stdout (a saída padrão) do que estiver à esquerda para o arquivo à direita, tornando-se seu conteúdo, e criando o arquivo (se possível), se ele ainda não existir. Algumas notas:
- Você também pode redirecionar stderr (o erro padrão saída) para o mesmo arquivo adicionando
2>&1
ao final do comando acima. A ordem é importante, por isso, tenha cuidado ao generalizar onde colocar isso. O número mágico1
refere-se a stdout,2
refere-se a stderr,&
é (essencialmente) "o endereço de" e o snippet de comando completo significa "redireciona a saída de stderr para o fluxo stdout". - Se você deseja anexar ao arquivo de log em vez de substituí-lo, use
>>
. O método para redirecionar o stderr para o mesmo local permanece o mesmo. - Você pode enviar stdout e stderr para lugares diferentes usando
1> stdout_file 2> stderr_file
. Você também pode usar>>
em vez de>
nesse comando para fazer isso acrescentando em vez de substituir.
- Você também pode redirecionar stderr (o erro padrão saída) para o mesmo arquivo adicionando
Variáveis da shell / símbolos especiais:
-
~
- Isso é uma forma abreviada do diretório pessoal do usuário atual e faz parte do próximo bit.
Locais no nível da shell:
-
~/offbkp01.log
- o arquivo offbkp01.log no diretório inicial do usuário atual. É onde a saída do comando rsync será colocada devido ao redirecionamento com>
.
Resumo:
Em resumo, este comando irá:
- Copie todos os arquivos, diretórios, links simbólicos, arquivos especiais e arquivos de dispositivos comuns
- bem como mais, se não todos, importantes atributos de arquivo ,
-
de
/srv/bkp01
, -
para
/srv/offbk2/bkp01
, -
e excluirá qualquer coisa em
/srv/offbk2/
que não esteja em/srv/bkp01
, com as seguintes condições:-
Se um arquivo, diretório ou link simbólico regular (?) tiver um tempo de modificação em
/srv/offbk2/
que seja mais recente do que seu tempo de modificação em/srv/bkp01
, ele não será atualizado , se ambos os itens ainda forem o mesmo tipo (arquivo regular, diretório , ou link simbólico (?)).
-
Se um arquivo, diretório ou link simbólico regular (?) tiver um tempo de modificação em
-
Além disso, o rsync imprimirá algumas informações sobre o que está fazendo (especificamente, quais arquivos estão sendo transferidos e um resumo final ), que o shell irá gravar no arquivo
~/offbkp01.log
. Esse arquivo de log será criado novamente, se ainda não existir, e será sobrescrito se já existir.
NB: --fake-super
é uma opção usada para fazer com que o rsync simule atividades de superusuários. Isso é feito usando os atributos estendidos dos arquivos para armazenar os atributos que ele não pôde definir sem ter privilégios maiores. A versão real de cada atributo é definida para o que faz sentido, dadas as opções e os privilégios disponíveis. Enquanto isso torna conveniente fazer alguns backups mesmo se você não tiver privilégios de superusuário, deve-se notar também que ele pode representar um risco de segurança maior que o uso do rsync em geral, já que os atributos reais de segurança podem não estar definidos corretamente, mesmo que as informações sobre eles tenham sido copiadas.
Fonte: muito tempo trabalhando com o rsync e lendo a página de manual .