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.