Alguém pode explicar esse comando rsync para mim?

11

Alguém pode me dizer o que isso faz?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

Será que apagar bkp01e offbk2e envia um registro para offbkp01.log?

user276049
fonte
Ele não pode ler páginas de manual. O que faz você pensar que ele está lendo as respostas aqui? XD
Twinkles
2
Quem precisa de páginas de manual quando você tem o site explanshell.com/… ?!
Tom

Respostas:

33

Para dividir isso em partes, há duas seções principais, seguidas por um resumo e notas:

  • O rsynccomando:
    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 - Presumo que isso não precise de explicação (mas fornecerá se solicitado).

Opções de comando:

  • -uva - Um conjunto de opções de caracteres únicos, sendo (formulário 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 fonte. Ou seja, o rsync deve transmitir apenas as alterações da fonte que atualizaria o destino, mas não deve fazer alterações que tornariam um arquivo de destino uma versão mais antiga.

      Existem algumas exceções. As diferenças de tipo (por exemplo, um é um arquivo e o outro um diretório) causarão uma atualização independentemente das datas. Links simbólicos e outros arquivos especiais ignoram esta opção. E, o mais 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 imprimirá (quase?) Nada. Com esta opção como está, o rsync informa quais arquivos estão sendo transferidos e coloca um resumo no final. Mais vs aumentam as informações impressas, embora a página de manual diga que mais de dois vs 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. Será:
      • -r --recursive- Diz ao rsync para copiar diretórios recursivamente. Sem isso, ou a -d --dirsopção mais específica , o rsync simplesmente ignoraria os diretórios encontrados (e informaria sobre isso em sua saída).
      • -l --links- Quando a origem for um link simbólico, crie um link simbólico no destino. Dependendo de outras opções, os links simbólicos podem, de outra forma, ser ignorados ou transformados em uma cópia separada completa (por exemplo, um diretório verdadeiro com conteúdo (ou outra cópia do arquivo) em vez do link simbólico).
      • -p --perms - Define as permissões dos arquivos de destino como iguais aos 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 deseja que ele seja usado, explícita ou implicitamente.
      • -g --group- Define o atributo de grupo do destino para o mesmo que a fonte. Associados por nome, por padrão, mas retornará ao número de identificação do grupo em algumas circunstâncias. Se o rsync de recebimento não for executado como superusuário (ou fingir --fake-super), apenas os grupos dos quais o usuário que chamou o rsync no lado de recebimento é membro podem ser configurados. Caso contrário, o grupo será definido apenas como o grupo padrão do mesmo usuário mencionado anteriormente.
      • -D- Equivalente às opções --devicese --specialsjuntos. Eles significam:
        • --devices- Arquivos de caracteres e dispositivos de bloco são transferidos. Não tem efeito se o rsync de recebimento não for executado como superusuário (ou falsificado --fake-super).
        • --specials - Arquivos especiais (como soquetes) 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 fonte. Isso NÃO é afetado pela opção de atualização definida acima (na verdade, como poderia ser, pois a maioria dos sistemas de arquivos não retém os dados necessários para ver qual ação foi mais recente?). Esta opção atua nas fontes após a expansão de curinga / glob, portanto, dir / * não é o mesmo que dir /. Algumas notas importantes:
    • Isto é, obviamente, perigoso. Provavelmente, você deve experimentá-lo com a --dry-runopção primeiro, que fará uma transferência fingida que permite garantir que nenhuma alteração indesejada seja feita.
    • Se houver algum erro de E / S (entrada / saída) - ou seja, se algo der errado na transferência, leitura ou gravação de alterações - a exclusão será ignorada a partir desse ponto. Isso pode ser substituído pela --ignore-errorsopção, embora você provavelmente não queira / não fará 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 receptor é a versão 3.0.0 ou mais recente (até o momento em que este artigo foi escrito), o --delete-duringalgoritmo é usado. Se o receptor for mais antigo, então --delete-beforeé usado. Se for importante que os arquivos mantenham um certo tipo de consistência caso ocorra um erro (como 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.

Locais de comando:

  • /srv/bkp01- O arquivo ou diretório de origem. Existem algumas regras detalhadas sobre o que significa se existe / não uma barra no final do diretório e se o outro diretório existe. Você pode ver a seção USAGE da página de manual para obter detalhes, mas aqui a falta de uma barra final significa que esse diretório será copiado no destino, em vez de o conteúdo desse diretório ser copiado no destino. O mesmo se for um arquivo e não um diretório.
  • /srv/offbk2/- O diretório de destino. Em geral, esse sempre será o último item listado na seção de comando rsync, a menos que uma opção seja usada para especificá-lo em outra parte do comando.

Redirecionamento de saída do 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 o stderr (a saída de erro padrão) para o mesmo arquivo adicionando 2>&1ao final do comando acima. A ordem é importante, portanto, tenha cuidado ao generalizar onde colocar isso. O número mágico 1refere-se a stdout, 2refere-se a stderr, &é (essencialmente) "o endereço de" e o trecho de comando completo significa "redirecionar a saída de stderr para o fluxo de stdout".
    • Se você deseja anexar ao arquivo de log em vez de substituí-lo, use-o >>. O método para redirecionar o stderr para o mesmo local permanece o mesmo.
    • Você pode enviar stdout e stderr para diferentes lugares usando 1> stdout_file 2> stderr_file. Você também pode usar, em >>vez de >nesse comando, anexando em vez de substituir.

Variáveis ​​do shell / símbolos especiais:

  • ~ - Este é um atalho para o diretório inicial do usuário atual e faz parte do próximo bit.

Locais no nível do shell:

  • ~/offbkp01.log- o arquivo offbkp01.log dentro do diretório inicial do usuário atual. É aqui que 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 a maioria, se não todos, atributos importantes de arquivo ,
  • de /srv/bkp01 ,
  • a /srv/offbk2/bkp01 ,
  • e excluirá qualquer coisa /srv/offbk2/que não esteja/srv/bkp01 , com as seguintes condições:

    • Se um regular de arquivo, diretório, ou link simbólico (?) Tem um tempo de modificação em /srv/offbk2/ que é mais recente do que o seu tempo de modificação em /srv/bkp01, ele não será atualizado , se ambos os itens ainda são o mesmo tipo (regular arquivo, diretório, ou link simbólico (? )).
  • 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 gravará no arquivo ~/offbkp01.log . Esse arquivo de log será criado novamente, se ainda não existir, e será sobrescrito, se já existir.


Nota: --fake-superé uma opção usada para fazer com que o rsync simule atividades de superusuário. Isso é feito usando os atributos estendidos dos arquivos para armazenar os atributos que não puderam ser definidos sem ter maiores privilégios. A versão real de cada atributo é configurada para o que fizer sentido, dadas as opções e os privilégios disponíveis. Embora isso torne conveniente fazer alguns backups, mesmo que você não tenha privilégios de superusuário, observe também que ele pode representar um risco de segurança maior que o uso do rsync em geral, pois os atributos reais de segurança podem não estar definidos. adequadamente, mesmo que as informações sobre eles tenham sido armazenadas em backup.


Fonte: muito tempo trabalhando com o rsync e lendo sua página de manual .

Matthew Wirth
fonte
8
Esse é um primeiro post impressionante. Espero que você fique por aqui!
Terdon #
Eu segundo @terdon .. Droga! ele está pegando fogo. Mantenha o bom companheiro de trabalho. Esta é realmente uma resposta impressionante.
AzkerM 14/05
A resposta parece ser como "Sherlock Holmes", eu adoro seu estilo explicação ..
Rahul Patil
9

Do manual:

--excluir

Isso diz ao rsync para excluir arquivos estranhos do lado de recebimento (aqueles que não estão no lado de envio), mas apenas para os diretórios que estão sendo sincronizados. Você deve executar o rsync para enviar o diretório inteiro (por exemplo, "dir" ou "dir /") sem usar um curinga para o conteúdo do diretório (por exemplo, "dir / *"), pois o curinga é expandido pelo shell e o rsync recebe uma solicitação para transferir arquivos individuais, não o diretório pai dos arquivos. Os arquivos excluídos da transferência também são excluídos da exclusão, a menos que você use a opção --delete-deleted ou marque as regras como correspondendo apenas no lado do envio (consulte os modificadores de inclusão / exclusão na seção REGRAS DO FILTRO).

Portanto, ele excluirá os arquivos do destino que não fazem parte do diretório original se você não usou caracteres curinga.

Diretório de origem:

1.txt
2.txt
3.txt

Diretório de destino:

4.txt

4.txt desaparecerá após o rsync e 1.txt, 2.txt e 3.txt estarem no destino.


Em relação às outras coisas:

uva
  • atualizar arquivos
  • detalhado: os resultados do eco para o terminal (ou seja, redirecione-o para o seu arquivo de log, portanto, sim para a última pergunta)
  • arquivo: modo de arquivo; é igual a -rlptgoD (sem -H, -A, -X)
Rinzwind
fonte
Fonte:man rsync
Sammitch
3

Não, ele exclui apenas arquivos estranhos do bkp01diretório.

Além disso:

  • -u, --update- pula arquivos mais recentes no receptor
  • -v, --verbose- aumentar a verbosidade
  • -a, --archive- modo de arquivo; é igual a -rlptgoD (sem -H, -A, -X)

A saída do rsync -uva --delete /srv/bkp01 /srv/offbk2/comando é enviada ao ~/offbkp01.logarquivo usando o operador de redirecionamento ( >) para ser impresso no seu terminal. Se o arquivo não existir, ele será criado. Se o arquivo existir, o conteúdo antigo será apagado.

Veja man rsyncpara mais informações.

Radu Rădeanu
fonte
3
Não exclui nada de bkp01. Apenas apaga arquivos estranhos - ou seja, aqueles que não existem na fonte - do destino.
Matt Nordhoff
Nenhum arquivo será excluído do bkp01.
Xavier J
1
rsync 

Cópia remota de arquivo - Sincronize árvores de arquivos em discos, diretórios locais ou em uma rede.

-u update 

-v verbose

-a archive


--delete --> delete

Aqui ele excluirá os arquivos dentro do offbk2 .

Em seguida, a saída do resultado (êxito ou não) será redirecionada para esse arquivo de log.

nux
fonte
Nenhum arquivo será excluído do bkp01.
Xavier J