Búsqueda de sitios web

16 ejemplos prácticos del comando Rsync en Linux


Rsync (Sincronización remota) es el comando más utilizado para copiar y sincronizar archivos y directorios de forma remota y local en sistemas Linux/Unix.

Con la ayuda del comando rsync, puede copiar y sincronizar sus datos de forma remota y local entre directorios, discos y redes, realizar copias de seguridad de datos y duplicar entre dos máquinas Linux.

Este artículo explica 16 usos básicos y avanzados del comando rsync para transferir sus archivos de forma remota y local en máquinas basadas en Linux. No es necesario ser usuario root para ejecutar el comando rsync.

Ventajas del comando Rsync

Ofrece varias ventajas, entre ellas:

  • Transferencia de archivos eficiente: rsync utiliza un algoritmo de transferencia delta, lo que significa que solo transfiere las diferencias entre los archivos de origen y de destino, lo que reduce significativamente la cantidad de datos transferidos, lo que lo hace eficiente para sincronizar archivos o directorios grandes.
  • Sincronización remota de archivos: rsync admite transferencias de archivos locales y remotas a través de SSH, lo que permite la sincronización entre sistemas locales y remotos o la duplicación de directorios en varias máquinas.
  • Copias de seguridad incrementales: rsync es adecuado para copias de seguridad incrementales, ya que crea y actualiza copias de seguridad de manera eficiente transfiriendo solo archivos nuevos o modificados.
  • Conserva los permisos de los archivos: rsync puede conservar varios atributos de los archivos, como permisos, propiedad, marcas de tiempo y enlaces simbólicos, lo que garantiza que los archivos copiados conserven sus características originales en el destino.
  • Control de ancho de banda: rsync le permite limitar el uso del ancho de banda durante las transferencias de archivos, ya que utiliza métodos de compresión y descompresión al enviar y recibir datos en ambos extremos.
  • Más rápido: rsync puede ser más rápido que scp (Copia segura) para transferir archivos, especialmente cuando se sincronizan directorios grandes o cuando se trata de archivos que ya se han transferido parcialmente o que existen en el destino.

Sintaxis del comando Rsync

El comando rsync sigue la siguiente sintaxis:

rsync [OPTIONS] SOURCE DESTINATION

A continuación se ofrece una explicación de los diferentes componentes y opciones utilizados con los comandos rsync:

  • -v: salida detallada que muestra información detallada sobre la transferencia.
  • -r: copia datos de forma recursiva (pero no conserva las marcas de tiempo ni los permisos al transferir datos).
  • -a: modo de archivo, que permite copiar archivos de forma recursiva y también conserva enlaces simbólicos, permisos de archivos, propiedades de usuarios y grupos, y marcas de tiempo.
  • -z: comprime archivos durante la transferencia para reducir el uso de la red.
  • -h: números de salida legibles por humanos en un formato legible por humanos.
  • -P: muestra el progreso durante la transferencia.
  • SOURCE: especifica los archivos o directorios de origen que se transferirán, que pueden ser una ubicación local o remota.
  • DESTINO: especifica la ruta de destino donde se copiarán los archivos o directorios. Al igual que la fuente, puede ser una ruta local o una ubicación remota.

Instalar Rsync en el sistema Linux

Podemos instalar el paquete rsync con la ayuda del siguiente administrador de paquetes según su distribución de 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. Copiar/Sincronizar Archivo Localmente

Para copiar o sincronizar un archivo localmente, puede usar el siguiente comando que sincronizará un solo archivo en una máquina local de una ubicación a otra.

En este ejemplo, es necesario copiar o sincronizar un nombre de archivo backup.tar con la carpeta /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

En el ejemplo anterior, puede ver que si el destino aún no existe, rsync creará un directorio automáticamente para el destino.

2. Copiar/sincronizar directorio localmente

El siguiente comando transferirá o sincronizará todos los archivos de un directorio a un directorio diferente en la misma máquina.

En este ejemplo, /root/rpmpkgs contiene algunos archivos de paquetes rpm y desea que ese directorio se copie dentro de la carpeta /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 un directorio del servidor local al remoto

Para copiar un directorio de un servidor local a un servidor remoto, puede usar el siguiente comando, que sincronizará un directorio de una máquina local a una remota.

Por ejemplo, si hay una carpeta en su computadora local “rpmpkgs ” que contiene algunos paquetes RPM y si desea que el contenido de ese directorio local se envíe a un servidor remoto, puede utilizar el siguiente 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 un directorio del servidor remoto al local

Este comando le ayudará a sincronizar un directorio remoto con un directorio local. En este ejemplo, un directorio /root/rpmpkgs que está en un servidor remoto se copia en su computadora local en /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 sobre SSH

Con rsync, podemos usar SSH (Secure Shell) para la transferencia de datos. Usando el protocolo SSH mientras transfieres nuestros datos, puedes estar seguro de que tus datos se transfieren en una conexión segura. con cifrado para que nadie pueda leer sus datos mientras se transfieren por cable en Internet.

Además, cuando usamos rsync necesitamos proporcionar la contraseña de usuario/root para realizar esa tarea en particular, por lo que usar SSH La opción enviará sus inicios de sesión de forma cifrada para que su contraseña esté segura.

Para usar rsync sobre SSH, puede usar la opción -e para especificar el comando de shell remoto, que normalmente es ssh como se muestra.

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

6. Copie un archivo de un servidor remoto a un servidor local con SSH

Para sincronizar un archivo desde un servidor remoto a un servidor local, puede especificar un protocolo con rsync usando la opción “-e” con el nombre del protocolo que desea usar.

Aquí, en este ejemplo, usaremos “ssh” con la opción “-e” y realizaremos la transferencia de datos.

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 un archivo de un servidor local a un servidor remoto con SSH

Para sincronizar un archivo desde un servidor local a un servidor remoto usando SSH, puede aprovechar el siguiente comando como se muestra.

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. Mostrar el progreso durante la transferencia de datos con Rsync

Para mostrar el progreso al transferir los datos de una máquina a otra diferente, podemos usar la opción '--progress', que muestra los archivos y el tiempo restante para completar la transferencia.

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 archivos con una extensión particular con Rsync

Para incluir archivos o patrones específicos durante una operación rsync, puede usar la opción --include con una extensión que coincida con todos los archivos.

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

En el ejemplo proporcionado, rsync incluirá solo archivos con la extensión .txt del directorio /path/to/source/ durante la transferencia.

10. Excluir archivos con una extensión particular con Rsync

De manera similar, para excluir una extensión específica durante una operación rsync, puede usar la opción --exclude con un patrón comodín.

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

En el ejemplo proporcionado, rsync excluirá los archivos con la extensión especificada (*.ext) durante la transferencia, e incluirá todos los demás archivos y directorios.

11. Incluir y excluir archivos con Rsync

Para incluir y excluir archivos o patrones específicos durante una operación rsync, puede utilizar las opciones --include y --exclude con los patrones comodín adecuados.

Estas dos opciones nos permiten incluir y excluir archivos especificando parámetros. Esta opción nos ayuda a especificar aquellos archivos o directorios que desea incluir en su sincronización y excluir archivos y carpetas. con el que no quieres ser transferido.

En este ejemplo, el comando rsync incluirá solo aquellos archivos y directorios que comiencen con ‘R’ y excluirá todos los demás archivos y directorios.

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

12. Uso de la opción –delete con Rsync

Si un archivo o directorio no existe en el origen, pero ya existe en el destino, es posible que desee eliminar ese archivo/directorio existente en el destino durante la sincronización.

Podemos usar la opción '--delete' para eliminar archivos que no están en el directorio de origen.

El origen y el destino están sincronizados. Ahora cree un nuevo archivo test.txt en el 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

Target tiene el nuevo archivo llamado test.txt al sincronizar con el origen con la opción '–delete', eliminó el archivo test.txt .

13. Establecer límite de transferencia de archivos con Rsync

Puede especificar el tamaño de archivo Max que se transferirá o sincronizará. Puedes hacerlo con la opción “--max-size”. En este ejemplo, el tamaño máximo de archivo es 200k, por lo que este comando transferirá solo aquellos archivos que sean iguales o 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. Eliminar automáticamente los archivos fuente después de la transferencia

Ahora, supongamos que tiene el servidor web principal y un servidor de respaldo de datos, creó una copia de seguridad diaria y la sincronizó con su servidor de respaldo, pero ahora no desea conservar esa copia local de la copia de seguridad en su servidor web.

Entonces, ¿esperará a que se complete la transferencia y luego eliminará ese archivo de copia de seguridad local manualmente? Claro que no. Esta eliminación automática se puede realizar utilizando la opción '--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. Haga un ensayo con Rsync

Si eres un novato que usa rsync y no sabes qué hará exactamente tu comando. Rsync realmente podría estropear las cosas en su carpeta de destino y luego deshacerlo puede ser un trabajo tedioso.

El uso de esta opción no realizará ningún cambio en los archivos y muestra el resultado del comando. Si el resultado muestra exactamente lo mismo que desea, puede eliminar el '--dry-run ' opción de su comando y ejecútela en la 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 Establecer límite de ancho de banda y transferir archivos

Puede establecer el límite de ancho de banda mientras transfiere datos de una máquina a otra con la ayuda de la opción '--bwlimit'. Esta opción nos ayuda a limitar el ancho 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

Además, de forma predeterminada, rsync sincroniza solo bloques y bytes modificados; si desea sincronizar explícitamente todo el archivo, utilice la opción '-W' con él.

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
Conclusión

Con esto concluye nuestra descripción general de rsync y sus capacidades. Para explorar más a fondo sus amplias opciones y funcionalidades, le recomiendo que consulte las páginas del manual completo (páginas de manual) disponibles.