Alguém pode explicar este comando rsync para mim?

11

Alguém pode me dizer o que isso faz?

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

Exclui bkp01 e offbk2 e envia um log para offbkp01.log ?

    
por user276049 12.05.2014 / 19:43

4 respostas

32

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. Mais v s aumentam as informações impressas, embora a página do manual diga que mais de dois v 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.

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ágico 1 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.

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 (?)).
  • 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 .

    
por dreikin 12.05.2014 / 23:42
9

Do manual:

  

- delete

     

Isso diz ao rsync para excluir arquivos estranhos do lado do recebimento (aqueles que não estão no lado de envio), mas apenas para os diretórios que estão sendo sincronizados. Você deve ter enviado 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 que são excluídos da transferência também são excluídos da exclusão, a menos que você use a opção --delete-excluded ou marque as regras como correspondências apenas no lado de envio (consulte os modificadores include / exclude na seção FILTER RULES).

Por isso, excluirá os arquivos do destino que não fazem parte do diretório original se você não tiver usado curingas.

Diretório de origem:

1.txt
2.txt
3.txt

Diretório de destino:

4.txt

4.txt desaparecerá depois que o rsync e o 1.txt, 2.txt e 3.txt estiverem no destino.

Em relação às outras coisas:

uva
  • atualizar arquivos
  • verbose: echo resulta no terminal (isto é, redireciona para o seu arquivo de log, portanto, sim para a última pergunta)
  • arquivo: modo de arquivo; é igual a -rlptgoD (não -H, -A, -X)
por Rinzwind 12.05.2014 / 19:57
3

Não, ele só exclui arquivos estranhos do diretório bkp01 .

Além disso:

  • -u , --update - ignora arquivos que são mais recentes no receptor
  • -v , --verbose - aumenta a verbosidade
  • -a , --archive - modo de arquivamento; é igual a -rlptgoD (não -H, -A, -X)

A saída do comando rsync -uva --delete /srv/bkp01 /srv/offbk2/ é enviada para o arquivo ~/offbkp01.log usando o operador de redirecionamento ( > ) em vez de 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 rsync para mais informações.

    
por Radu Rădeanu 12.05.2014 / 19:57
1
rsync 

Cópia de arquivos remotos - Sincronize as árvores de arquivos nos discos, diretórios ou através de uma rede local.

-u update 

-v verbose

-a archive


--delete --> delete

Aqui, ele excluirá arquivos dentro de offbk2 .

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

    
por nux 12.05.2014 / 19:56

Tags