O rsync é uma ferramenta de linha de comando gratuita que permite sincronizar arquivos local e remotamente. Com ele, você pode transferir arquivos e diretórios.
Isso o torna muito útil para migrar dados, realizar backups e espelhar, tornando-o ótimo para webmasters e administradores para tarefas recorrentes de transferência de dados.
Este artigo nos ensinará como o Rysnc funciona e fornecerá alguns exemplos úteis.
Como funciona o rsync?
rsync é um utilitário de linha de comando de sincronização remota para sistemas do tipo Unix. Dá ao usuário a capacidade de transferir/sincronizar arquivos entre máquinas ou dois hosts sem problemas.
Nos bastidores, o rsync usa o algoritmo delta-transfer. Esse algoritmo envolve a cópia de diferenças entre os dois arquivos em dois hosts (origem e destino). A origem e o destino podem ser locais ou remotos. O comando rsync pode executar tarefas de dados de cópia/sincronização de duas maneiras. Estes são:
- Use ssh, rsh para copiar/sincronizar entre dois hosts.
- Use o daemon TCP rsync para copiar/sincronizar.
Como foi projetado para funcionar em sistemas semelhantes ao Unix, também funciona no Linux.
O processo passo a passo que o rsync usa da seguinte maneira:
- O Rsync usa SSH para se conectar ao host remoto e solicita uma senha.
- Uma vez conectado, o rsync do host remoto se comunica com a fonte.
- Esses programas determinarão os arquivos e diretórios que precisam ser sincronizados. Ele usa um algoritmo de transferência delta para verificar a diferença entre os arquivos.
Se o comando rsync não encontrar um arquivo no controle remoto, mas não no host, ele o copiará e o transferirá para o sistema host. Da mesma forma, para arquivos já existentes (tanto no host quanto no remoto), ele copiará a diferença entre eles (ou seja, partes alteradas). Por fim, ele ignorará os arquivos existentes em ambos os sistemas sem modificações.
O comando rsync obtém atualizações incrementais armazenando a diferença em um arquivo temporário antes de enviá-lo ao destino.
Antes que você comece:
- Você precisa ter privilégios de root ou sudo
- Ter acesso ao terminal/linha de comando
- Acesso SSH para execução segura de comandos rsync
- Você também precisa de duas máquinas para fazer o rsync.
Para o tutorial, vamos usar o Linux Mint 21.1 Vera. Você pode seguir facilmente o guia sem problemas usando qualquer outra distribuição Linux.
Por que usar rsync sobre Scp?
Scp (cópia segura) é um protocolo de linha de comando popular que permite aos usuários copiar arquivos. Segue uma abordagem linear para copiar. Isso significa que ele simplesmente copia os arquivos da origem para o destino. Para fazer isso com segurança, ele usa SSH.
A sintaxe do comando scp é a seguinte:
scp option SOURCE DESTINATION
No entanto, a questão permanece: por que usar rsync sobre scp?
Bem, há vários benefícios em usar o rsync. Esses benefícios incluem:
- Execução mais rápida: rsync é mais rápido que scp porque usa um protocolo de atualização remota. Isso permite que ele transfira apenas diferenças em vez de todo o arquivo. Portanto, se você configurar uma sincronização regular ao longo do tempo, precisará fazer apenas uma cópia completa na primeira vez. A partir da próxima vez, ele copia apenas as partes atualizadas com a ajuda do algoritmo de transferência delta.
- Menos consumo de largura de banda: como o rsync não precisa copiar o arquivo inteiro novamente, isso leva a um menor consumo de largura de banda. Além disso, também usa algoritmos de compactação/descompactação para minimizar o tamanho do arquivo durante a transferência.
- Mais opções de linha de comando: o rsync também supera o scp no número de opções de linha de comando. Isso significa que você pode ajustar o rsync mais do que o scp.
Concluindo, o rsync é uma excelente ferramenta de sincronização incremental. A ferramenta scp também é útil para transferir/sincronizar arquivos com segurança. Em um cenário do mundo real, o scp é adequado para tarefas do dia a dia se você estiver procurando por uma abordagem mais direta. No entanto, para tarefas recorrentes, use rsync.
Sintaxe do comando rsync
O comando rsync é o seguinte:
Aqui, os termos são definidos abaixo:
- OPTION – Estas são as opções de rsync
- SOURCE – Diretório de origem
- DEST – Diretório de destino
- USER – nome de usuário remoto
- HOST – nome de host remoto ou endereço IP
As opções são parâmetros que oferecem funcionalidade adicional ao comando. Por exemplo, você pode sincronizar dados recursivamente com a opção -r. No entanto, a opção -r não sincroniza a propriedade de grupos e usuários, carimbos de data/hora, permissão ou links simbólicos. Em vez disso, você pode usar a opção -a, que executa o comando no modo de arquivo, garantindo que todas as propriedades, permissões e links simbólicos do arquivo sejam mantidos durante a cópia.
Outras opções de rsync incluem:
- -z: compacta dados para economizar espaço
- -h: fornece saída em formato legível por humanos
- -b: executa backup durante o processo de sincronização de dados
- -e: usa o protocolo SSH para transferências remotas de dados
- -progress: exibe o progresso da sincronização de dados
- -v: peça ao rsync para exibir a saída detalhada
- –n: executa um teste para testar as configurações e configuração para sincronização de dados
- -q: suprime a saída e as opções do comando rsync
Instalando o rsync
A maioria dos sistemas Unix e Linux vem com o rsync instalado. Se o seu sistema não tiver rsync, você pode instalá-lo usando o(s) seguinte(s) comando(s).
Para Debian/Ubuntu e Mint
sudo apt-get install rsync
Para Arch Linux
pacman -S rsync
No Gentoo
emerge sys-apps/rsync
No CentOS/Fedora/REHL
sudo yum install rsync
No openSUSE
sudo zypper install rsync
Como temos o Linux Mint, o rsync veio pré-instalado. Então você pode executar o comando rsync no terminal para ver se ele está instalado. Ele explicará seus recursos, opções e outras informações vitais, se estiverem presentes.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Vamos agora ver o rsync em ação com diferentes casos de uso.
Para o tutorial, vamos criar dois diretórios.
- diretório-fonte
- diretório de destino
Para isso, você precisa digitar os seguintes comandos.
mkdir source-directory mkdir dest-directory
Além disso, precisaremos gerar arquivos para fazer o rsync funcionar. Então vamos criar alguns arquivos de teste com o comando abaixo.
touch source-directory/file{1..100}
Isso cria 100 arquivos vazios no diretório de origem. Você pode confirmá-lo digitando o comando abaixo.
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Nota: Mantivemos o diretório dest vazio.
Copiar diretórios localmente recursivamente
Embora o rsync tenha como objetivo principal copiar arquivos entre um servidor local e remoto, é igualmente útil para copiar arquivos localmente.
Nesse caso, usaremos a seguinte sintaxe rsync.
opção rsync ORIGEM DESTINO
Copie os arquivos em nosso diretório de origem para o diretório de destino executando o seguinte comando.
rsync -r source-directory/ dest-directory
Aqui, o comando “recursivamente” copia os arquivos do diretório de origem para o diretório de destino.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Isso copia todos os arquivos do diretório de origem para o diretório de destino.
Copiar arquivo único localmente
Agora que aprendemos como sincronizar dois diretórios, aprenderemos como copiar um único arquivo.
Para isso, editaremos o arquivo vazio file1 no diretório-fonte e o sincronizaremos com o mesmo arquivo presente no diretório-destino.
Para editar um arquivo, digite o seguinte comando.
nano source-directory/file1
Agora copie e cole o seguinte texto no editor nano.
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
Adicionando conteúdo a um arquivo
Agora, feche e salve o arquivo.
Vamos agora copiar o arquivo usando rsync.
sudo rsync -v --existing source-directory/file1 /dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
Como você deve ter notado, usamos a opção –existing. Isso atualiza os arquivos existentes. Se você executar o comando sem –existing, ele não será atualizado, mesmo que seja executado com sucesso.
Se o único arquivo que você está copiando não existir na pasta de destino, você precisará executar o seguinte comando.
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Copiando Vários Arquivos
Se você pretende copiar vários arquivos, deve mencionar os caminhos de origem de ambos os arquivos, seguidos do diretório de destino.
Para isso, criaremos dois novos arquivos: newfile2 e newfile3, no diretório source. Execute o seguinte comando para fazer isso.
touch source-directory/newfile{2..3}
Agora, use o seguinte comando para sincronizar vários arquivos.
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
Copiar arquivo ou diretório do local para o remoto
A sintaxe rsync para transferência local para remota é a seguinte.
rsync option SOURCE [email protected]:DEST
Como você pode ver, você precisa saber o endereço IP da máquina remota para fazer isso funcionar. Além disso, você precisa adicionar o endereço IP após o arquivo de origem.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Antes de iniciar a transferência, ele pedirá a senha. Digite-o para continuar. Além disso, se o usuário for diferente na máquina remota, você precisará mencioná-lo antes do endereço IP seguido de @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Se você pretende copiar vários arquivos ou diretórios, precisará listar os arquivos ou caminhos de diretório. A sintaxe para isso está abaixo.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Protocolos específicos de transferência remota
O rsync permite especificar protocolos de transferência de arquivos específicos. Para fazer isso, você precisa usar a opção -e, seguida do protocolo.
Por exemplo, se quiser usar o protocolo ssh, você deve anexar -e ssh ao comando rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copiando um arquivo ou diretório de remoto para local
A sintaxe rsync para transferência local para remota é a seguinte.
sync option [email protected]:SRC DEST
Isso funciona como uma solicitação pull. Portanto, para obter os arquivos/diretório necessários de um servidor remoto para sua máquina local, você precisa executar o seguinte comando.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
O comando extrai os arquivos do diretório de destino da máquina remota para o diretório de origem da máquina local.
Da mesma forma, você pode obter um arquivo específico mencionando-o por meio de seu caminho completo.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Para copiar vários arquivos ou diretórios de local para remoto, você precisa especificar o caminho entre colchetes (separados por vírgulas) após o endereço IP do servidor.
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
Da mesma forma, você também pode mencionar arquivos.
Mostrar progresso ao vivo durante a transferência
É uma boa ideia ver o progresso ao vivo para backups de dados maiores. Para isso, você precisa usar o sinalizador –progress. Anexe-o ao comando rsync e você poderá ver a velocidade de transferência, o tempo restante e a quantidade de dados transferidos.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Excluir arquivos de origem assim que a transferência for concluída
Você pode usar o sinalizador -remove-source-files para remover os arquivos de origem após a transferência completa. Isso pode ajudá-lo em muitos cenários, especialmente quando se trata de proteger seus arquivos sem deixar vestígios ou simplesmente usá-los para liberar espaço.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
teste de rsync
O Rysnc também permite que você avalie antes de fazer uma execução real. A simulação permite que você veja se está fazendo a coisa certa. Afinal, você não deseja atualizar arquivos por engano ou até excluí-los.
Você precisa usar a opção –dry-run para fazer uma simulação. Adicione-o ao comando, seguido da origem e do destino.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
A saída é semelhante à forma como a executamos antes. No entanto, você notará uma menção de (DRY RUN) no final da saída.
Definir o tamanho mínimo e máximo do arquivo
O Rysnc também permite definir o tamanho mínimo ou máximo do arquivo durante a transferência.
Então, se você deseja transferir com um tamanho mínimo de 15KB, você precisa usar –min-size=15K.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
O comando copiará apenas arquivos com tamanho mínimo de arquivo de 15 KB. Se o tamanho do arquivo estiver abaixo, ele irá ignorá-lo.
Da mesma forma, você pode usar o sinalizador –max-size para definir o tamanho máximo do arquivo.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Aqui, o rsync irá ignorar arquivos acima do tamanho de 450K.
Definir limite de largura de banda
Se você estiver executando outras tarefas com uso intensivo de largura de banda, poderá definir rysnc para definir o limite de largura de banda para a transferência. Para fazer isso, use o –bwlimit=KB/s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Aqui, definimos a largura de banda para 100Kb/s durante a transferência.
Palavras Finais
Isso nos leva ao final do nosso guia de comando rsync. Aprendemos a usar o rysnc e abordamos muitos comandos de maneira eficaz.
No entanto, o rysnc oferece muito mais do que cobrimos. É por isso que você também pode consultar a página de manual do rsync, onde todos os aspectos do rsync são abordados.
Em seguida, confira as folhas de dicas da linha de comando para Windows, Linux e macOS.