Pesquisa de site

16 exemplos práticos de comando Rsync no Linux


Rsync (Sincronização Remota) é o comando mais comumente usado para copiar e sincronizar arquivos e diretórios remotamente e localmente em sistemas Linux/Unix.

Com a ajuda do comando rsync, você pode copiar e sincronizar seus dados remota e localmente em diretórios, discos e redes, realizar backups de dados e espelhar entre duas máquinas Linux.

Este artigo explica 16 usos básicos e avançados do comando rsync para transferir arquivos remotamente e localmente em máquinas baseadas em Linux. Você não precisa ser um usuário root para executar o comando rsync.

Vantagens do comando Rsync

Oferece diversas vantagens, incluindo:

  • Transferência eficiente de arquivos – o rsync usa um algoritmo de transferência delta, o que significa que ele transfere apenas as diferenças entre os arquivos de origem e de destino, o que reduz significativamente a quantidade de dados transferidos, tornando-o eficiente para sincronizar arquivos ou diretórios grandes.
  • Sincronização remota de arquivos – o rsync oferece suporte a transferências de arquivos locais e remotas por SSH, o que permite a sincronização entre sistemas locais e remotos ou o espelhamento de diretórios em várias máquinas.
  • Backups Incrementais – o rsync é adequado para backups incrementais, pois cria e atualiza backups de forma eficiente, transferindo apenas arquivos novos ou modificados.
  • Preserva permissões de arquivo – o rsync pode preservar vários atributos de arquivo, como permissões, propriedade, carimbos de data e hora e links simbólicos, o que garante que os arquivos copiados mantenham suas características originais no destino.
  • Controle de largura de banda – rsync permite limitar o uso de largura de banda durante transferências de arquivos, pois usa métodos de compactação e descompactação ao enviar e receber dados em ambas as extremidades.
  • Mais rápido – o rsync pode ser mais rápido que o scp (Secure Copy) para transferência de arquivos, especialmente ao sincronizar diretórios grandes ou ao lidar com arquivos que já foram parcialmente transferidos ou existem no destino.

Sintaxe do comando Rsync

O comando rsync segue a seguinte sintaxe:

rsync [OPTIONS] SOURCE DESTINATION

Aqui está uma explicação dos diferentes componentes e opções usados com comandos rsync:

  • -v – Saída detalhada, exibindo informações detalhadas sobre a transferência.
  • -r – copia dados recursivamente (mas não preserva carimbos de data/hora e permissão durante a transferência de dados.
  • -a – modo de arquivo, que permite copiar arquivos recursivamente e também preserva links simbólicos, permissões de arquivo, propriedades de usuários e grupos e carimbos de data/hora.
  • -z – Compacta arquivos durante a transferência para reduzir o uso da rede.
  • -h – números de saída legíveis por humanos em um formato legível por humanos.
  • -P – Mostra o progresso durante a transferência.
  • SOURCE – Especifica o(s) arquivo(s) de origem ou diretório a ser transferido, que pode ser local ou remoto.
  • DESTINATION – Especifica o caminho de destino onde os arquivos ou diretórios serão copiados. Semelhante à origem, pode ser um caminho local ou um local remoto.

Instale Rsync no sistema Linux

Podemos instalar o pacote rsync com a ajuda do seguinte gerenciador de pacotes de acordo com sua distribuição Linux.

sudo apt install rsync         [On Debian, Ubuntu and Mint]
sudo yum install rsync         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/rsync  [On Gentoo Linux]
sudo apk add rsync            [On Alpine Linux]
sudo pacman -S rsync           [On Arch Linux]
sudo zypper install rsync      [On OpenSUSE]    

1. Copie/sincronize arquivo localmente

Para copiar ou sincronizar um arquivo localmente, você pode usar o seguinte comando que sincronizará um único arquivo em uma máquina local de um local para outro.

Aqui neste exemplo, um nome de arquivo backup.tar precisa ser copiado ou sincronizado com a pasta /tmp/backups/.

[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/

created directory /tmp/backups
backup.tar.gz

sent 224.54K bytes  received 70 bytes  449.21K bytes/sec
total size is 224.40K  speedup is 1.00

No exemplo acima, você pode ver que se o destino ainda não existir, o rsync criará um diretório automaticamente para o destino.

2. Copie/sincronize diretório localmente

O comando a seguir irá transferir ou sincronizar todos os arquivos de um diretório para um diretório diferente na mesma máquina.

Aqui neste exemplo, /root/rpmpkgs contém alguns arquivos de pacote rpm e você deseja que esse diretório seja copiado dentro da pasta /tmp/backups/.

[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/

sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.47M bytes  received 96 bytes  2.32M bytes/sec
total size is 3.74M  speedup is 1.08

3. Copie um diretório do servidor local para o remoto

Para copiar um diretório de um servidor local para um servidor remoto, você pode usar o seguinte comando, que sincronizará um diretório de uma máquina local para uma máquina remota.

Por exemplo, se houver uma pasta em seu computador local “rpmpkgs ” que contém alguns pacotes RPM e se você quiser que o conteúdo desse diretório local seja enviado para um servidor remoto, você pode usar o seguinte comando.

rsync -avzh /root/rpmpkgs [email :/root/

The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 3.74M bytes  received 96 bytes  439.88K bytes/sec
total size is 3.74M  speedup is 1.00

4. Copie um diretório do servidor remoto para o local

Este comando o ajudará a sincronizar um diretório remoto com um diretório local. Aqui neste exemplo, um diretório /root/rpmpkgs que está em um servidor remoto está sendo copiado para seu computador local em /tmp/myrpms.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email 's password: 
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm

sent 104 bytes  received 3.49M bytes  997.68K bytes/sec
total size is 3.74M  speedup is 1.07

5. Rsync por SSH

Com rsync, podemos usar SSH (Secure Shell) para transferência de dados, usando o protocolo SSH enquanto transferimos nossos dados, você pode ter certeza de que seus dados estão sendo transferidos em uma conexão segura com criptografia para que ninguém possa ler seus dados enquanto eles estão sendo transferidos pela Internet.

Além disso, quando usamos o rsync, precisamos fornecer a senha do usuário/root para realizar essa tarefa específica, portanto, usando o SSH A opção enviará seus logins de maneira criptografada para que sua senha fique segura.

Para usar rsync sobre SSH, você pode usar a opção -e para especificar o comando shell remoto, que normalmente é ssh conforme mostrado.

rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination

6. Copie um arquivo de um servidor remoto para um servidor local com SSH

Para sincronizar um arquivo de um servidor remoto para um servidor local, você pode especificar um protocolo com rsync usando a opção “-e” com o nome do protocolo que deseja usar.

Aqui neste exemplo, usaremos o “ssh” com a opção “-e” e realizaremos a transferência de dados.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email 's password: 
receiving incremental file list
anaconda-ks.cfg

sent 43 bytes  received 1.10K bytes  325.43 bytes/sec
total size is 1.90K  speedup is 1.67

7. Copie um arquivo de um servidor local para um servidor remoto com SSH

Para sincronizar um arquivo de um servidor local para um servidor remoto usando SSH, você pode aproveitar o seguinte comando conforme mostrado.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email 's password: 
sending incremental file list
created directory /backups
backup.tar.gz

sent 224.59K bytes  received 66 bytes  64.19K bytes/sec
total size is 224.40K  speedup is 1.00

8. Mostre o progresso durante a transferência de dados com Rsync

Para mostrar o progresso durante a transferência dos dados de uma máquina para outra, podemos usar a opção ‘--progress', que exibe os arquivos e o tempo restante para concluir a transferência.

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email 's password: 
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
          1.47M 100%   31.80MB/s    0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
        138.01K 100%    2.69MB/s    0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
          2.01M 100%   18.45MB/s    0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
        120.48K 100%    1.04MB/s    0:00:00 (xfr#4, to-chk=0/5)

sent 3.74M bytes  received 96 bytes  1.50M bytes/sec
total size is 3.74M  speedup is 1.00

9. Incluir arquivos com extensão específica com Rsync

Para incluir arquivos ou padrões específicos durante uma operação rsync, você pode usar a opção --include com uma extensão que corresponda a todos os arquivos.

rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/

No exemplo fornecido, o rsync incluirá apenas arquivos com a extensão .txt do diretório /path/to/source/ durante a transferência.

10. Exclua arquivos com extensão específica com Rsync

Da mesma forma, para excluir uma extensão específica durante uma operação rsync, você pode usar a opção --exclude com um padrão curinga.

rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

No exemplo fornecido, o rsync excluirá arquivos com a extensão especificada (*.ext) durante a transferência, incluindo todos os outros arquivos e diretórios.

11. Incluir e excluir arquivos com Rsync

Para incluir e excluir arquivos ou padrões específicos durante uma operação rsync, você pode usar as opções --include e --exclude com padrões curinga apropriados.

Essas duas opções nos permitem incluir e excluir arquivos especificando parâmetros. Essa opção nos ajuda a especificar os arquivos ou diretórios que você deseja incluir na sua sincronização e excluir arquivos e pastas com o qual você não deseja ser transferido.

Aqui neste exemplo, o comando rsync incluirá apenas os arquivos e diretórios que começam com 'R' e excluirá todos os outros arquivos e diretórios.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Uso da opção –delete com Rsync

Se um arquivo ou diretório não existir na origem, mas já existir no destino, talvez você queira excluir esse arquivo/diretório existente no destino durante a sincronização.

Podemos usar a opção ‘--delete’ para excluir arquivos que não estão no diretório de origem.

A origem e o destino estão sincronizados. Agora crie um novo arquivo test.txt no destino.

[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/

[email 's password: 
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003

sent 445 bytes  received 18,543,954 bytes  2,472,586.53 bytes/sec
total size is 71,151,616  speedup is 3.84

O Target tem o novo arquivo chamado test.txt ao sincronizar com a origem com a opção '–delete', ele removeu o arquivo test.txt .

13. Defina o limite de transferência de arquivos com Rsync

Você pode especificar o tamanho máximo do arquivo a ser transferido ou sincronizado. Você pode fazer isso com a opção “--max-size”. Aqui neste exemplo, o tamanho máximo do arquivo é 200k, portanto este comando transferirá apenas os arquivos iguais ou menores que 200k.

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email 's password: 
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002

sent 129.52K bytes  received 396 bytes  28.87K bytes/sec
total size is 71.15M  speedup is 547.66

14. Exclua automaticamente os arquivos de origem após a transferência

Agora, suponha que você tenha o servidor web principal e um servidor de backup de dados, você criou um backup diário e o sincronizou com seu servidor de backup, mas agora não deseja manter aquela cópia local do backup em seu servidor web.

Então, você esperará a conclusão da transferência e excluirá o arquivo de backup local manualmente? Claro que não. Esta exclusão automática pode ser feita usando a opção ‘--remove-source-files’.

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 795 bytes  received 2.33K bytes  894.29 bytes/sec
total size is 267.30K  speedup is 85.40

[root@tecmint:~]# ls -l backup.tar.gz

ls: cannot access 'backup.tar.gz': No such file or directory

15. Faça uma simulação com Rsync

Se você é um novato no rsync e não sabe exatamente o que seu comando fará. O Rsync pode realmente bagunçar as coisas na sua pasta de destino e desfazer pode ser um trabalho tedioso.

O uso desta opção não fará nenhuma alteração nos arquivos e mostrará a saída do comando. Se a saída mostrar exatamente o que você deseja, você poderá remover o '--dry-run 'opção do seu comando e execute no terminal.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email 's password: 
backup.tar.gz

sent 50 bytes  received 19 bytes  19.71 bytes/sec
total size is 267.30K  speedup is 3,873.97 (DRY RUN)

16. Rsync definir limite de largura de banda e transferir arquivo

Você pode definir o limite de largura de banda ao transferir dados de uma máquina para outra com a ajuda da opção ‘--bwlimit’. Esta opção nos ajuda a limitar a largura de banda de E/S.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email 's password:
sending incremental file list
sent 324 bytes  received 12 bytes  61.09 bytes/sec
total size is 38.08M  speedup is 113347.05

Além disso, por padrão, o rsync sincroniza apenas blocos e bytes alterados. Se você deseja sincronizar explicitamente o arquivo inteiro, use a opção ‘-W’ com ele.

rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes  received 31 bytes  3.27M bytes/sec
total size is 16.18M  speedup is 1.10
Conclusão

Isso conclui nossa visão geral do rsync e seus recursos. Para uma exploração mais aprofundada de suas extensas opções e funcionalidades, recomendo que você consulte as páginas de manual abrangentes (páginas de manual) disponíveis.