GNU/Linux >> Tutoriales Linux >  >> Linux

17 ejemplos útiles de comandos rsync (sincronización remota) en Linux

Como sugiere el nombre, el comando rsync se usa para sincronizar (o copiar) archivos y directorios de forma local y remota. Una de las características importantes de rsync es que funciona en "algoritmo de transferencia delta ”, significa que solo sincronizará o copiará los cambios del origen al destino en lugar de copiar todo el archivo, lo que en última instancia reduce la cantidad de datos enviados a través de la red. Los geeks de Linux generalmente usan el comando rsync para administrar las actividades diarias de copia de seguridad, duplicación y restauración. Utiliza shell remoto como SSH mientras sincroniza los archivos de la máquina local a la máquina remota y cualquier usuario en el sistema puede usar el comando rsync ya que no requiere privilegios de root o sudo.

En este artículo, discutiremos 17 ejemplos útiles de comandos rsync en Linux, estos ejemplos ayudarán especialmente a los principiantes de Linux a administrar sus tareas de sincronización, duplicación y copia de seguridad de manera más eficiente.

El comando Rsync está disponible para todos los sistemas operativos similares a UNIX y Linux. Cuando hacemos una instalación mínima de CentOS y RHEL OS, el paquete rsync no forma parte de la instalación predeterminada, por lo que para instalar rsync en CentOS y RHEL, ejecute el siguiente comando yum

~]# yum install rsync -y

En los sistemas operativos Debian Like (Ubuntu y Linux Mint), use el siguiente comando apt para instalar la herramienta rysnc,

~]# apt install rsync -y

Sintaxis del comando rsync:

Sincronización local:# rsync {opciones} {Origen} {Destino}

Extracción de sincronización remota:# rsync {options}  @: 

Empuje de sincronización remota:# rsync       @:

Algunas de las opciones comúnmente utilizadas en el comando rsync se enumeran a continuación:

  • -v, –verbose                             Salida detallada
  • -q, –quiet                                  suprimir salida de mensajes
  • -a, –archive                              archivar archivos y directorios durante la sincronización (-a igual a las siguientes opciones -rlptgoD)
  • -r, –recursive                           sincroniza archivos y directorios recursivamente
  • -b, –backup                              realizar la copia de seguridad durante la sincronización
  • -u, –update                              no copiar los archivos del origen al destino si los archivos de destino son más recientes
  • -l, –links                                   copiar enlaces simbólicos como enlaces simbólicos durante la sincronización
  • -n, –dry-run                             realiza una ejecución de prueba sin sincronización
  • -e, –rsh=COMMAND            menciona el shell remoto para usar en rsync
  • -z, –compress                          comprime los datos del archivo durante la transferencia
  • -h, –human-readable            muestra los números de salida en un formato legible por humanos
  • –progress                                 muestra el progreso de la sincronización durante la transferencia

Pasemos a los ejemplos útiles del comando rsync

Ejemplo:1) Copie o sincronice archivos localmente (rsync -zvh)

Supongamos que queremos copiar un archivo del directorio de inicio del usuario de pkumar a la carpeta /opt/back, ejecute el siguiente comando rsync

[[email protected] ~]# rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes  received 35 bytes  2.73M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

Arriba hemos usado opciones como -z para compresión, -v para salida detallada y -h para salida legible por humanos.

Ejemplo:2) Copiar o sincronizar el directorio localmente (rsync -zavh)

Supongamos que queremos copiar o sincronizar el directorio de inicio del usuario de pkumar en la carpeta /opt/backup, ejecute el siguiente comando rsync con las opciones -zavh ,

[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup
sending incremental file list
pkumar/
pkumar/.bash_logout
pkumar/.bash_profile
pkumar/.bashrc
pkumar/OpenStack-Networking.pdf

sent 4.09M bytes  received 96 bytes  8.19M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

Verifiquemos si el directorio se copia o no, ejecute el siguiente comando,

[[email protected] ~]# ls -ld /opt/backup/*
-rwx------. 1 root   root   6153239 Apr  7 00:25 /opt/backup/OpenStack-Networking.pdf
drwx------. 2 pkumar pkumar      90 Apr  7 00:25 /opt/backup/pkumar
[[email protected] ~]#

Como podemos ver, el directorio "pkumar" se crea en la carpeta de destino y su contenido también se copia. En el ejemplo anterior, si usa la ruta / después de la carpeta de origen (/home/pkumar/), el comando rsync no creará el directorio pkumar en el destino, pero solo copiará el contenido.

[[email protected] ~]# rsync -zavh /home/pkumar/ /opt/backup

Ejemplo:3) Copie archivos y directorios recursivamente localmente (rsync -zrvh o rsync -zavh)

Supongamos que tenemos varios archivos y directorios dentro del directorio de inicio del usuario de pkumar, use el siguiente comando rsync para copiar archivos y directorios de forma recursiva, use la opción -a o -r para copiar archivos y directorios de forma recursiva.

Nota :En el comando rsync -a La opción se usa para archivar durante la copia o sincronización y, además de archivar, también se usa para lo siguiente:

  • copiar recursivamente archivos y directorios
  • copiar enlaces simbólicos como enlaces simbólicos
  • conservar permisos
  • preservar grupo
  • preservar la hora de modificación
  • preservar la propiedad
[[email protected] ~]# rsync -zrvh /home/pkumar /opt/backup
or
[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup

Ejemplo:4) Copie o sincronice archivos y directorios del sistema local al remoto

Supongamos que queremos copiar la carpeta “/home/pkumar/techi ” de la máquina local a la máquina remota (192.168.1.29) bajo /opt

[[email protected] ~]# rsync -zarvh /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
…………………………………………………………
techi/OTRS/
techi/OTRS/Database-Selection-OTRS-Installation-CentOS7.jpg
techi/OTRS/Install-OTRS-Accept-License.png
techi/OTRS/Install-OTRS-CentOS7-RHEL7.jpg
techi/OTRS/mysql-secure-installation-centos7-part2.jpg

sent 34.85M bytes  received 2.65K bytes  6.34M bytes/sec
total size is 37.77M  speedup is 1.08
……………………………………………………………
[[email protected] ~]#

Ejemplo:5) Copie o sincronice archivos y directorios desde una máquina remota al sistema local

Supongamos que queremos copiar archivos y directorios desde una máquina remota (192.168.1.29) a nuestro sistema local, en el siguiente ejemplo estoy copiando la carpeta remota “/opt/rpms_db ” en mi máquina local bajo /tmp carpeta

[[email protected] ~]# rsync -zarvh [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.07M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

El comando anterior creará automáticamente una carpeta "rpms_db" en la carpeta /tmp en nuestra máquina local.

[[email protected] ~]# ls -l /tmp/
total 8
-rwx------. 1 root root  827 Apr  6 12:54 ks-script-avmuxw
drwxr-xr-x. 2 root root 4096 Apr  7 01:42 rpms_db
-rw-------. 1 root root    0 Apr  6 12:35 yum.log
[[email protected] ~]# ls -l /tmp/rpms_db/
total 16028
……………………………………
-rw-r--r--. 1 root root 2844028 Nov 12 09:28 httpd-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root   92504 Nov 12 09:28 httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root 2558136 Nov 12 09:44 postfix-2.10.1-7.el7.x86_64.rpm
-rw-r--r--. 1 root root   17404 Nov 12 09:44 pytalloc-2.1.13-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  696472 Nov 12 09:46 samba-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 5070800 Nov 12 09:46 samba-client-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  210984 Nov 12 10:19 samba-common-4.8.3-4.el7.noarch.rpm
-rw-r--r--. 1 root root  167512 Nov 12 09:46 samba-common-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  458380 Nov 12 09:46 samba-common-tools-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  282332 Nov 12 09:46 samba-libs-4.8.3-4.el7.x86_64.rpm
……………………………………
[[email protected] ~]#

Ejemplo:6) Especificar shell remoto durante la sincronización (rsync -e ssh)

En el comando rsync podemos especificar el shell remoto como ssh durante la sincronización, supongamos que queremos usar una comunicación segura entre el origen y la máquina de destino a través de rsync, entonces deberíamos usar ssh como shell remoto, el ejemplo se muestra a continuación

[[email protected] ~]# rsync -zarvh -e ssh  [email protected]:/opt/rpms_db  /tmp
[email protected]'s password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

Ejemplo:7) Muestra el progreso de sincronización en la salida del comando rsync

Si desea ver el progreso de sincronización o copia en el comando rsync, use “–progress “, el ejemplo se muestra a continuación

[[email protected] ~]# rsync -avh --progress [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………………………………………………..
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
          2.84M 100%   35.22MB/s    0:00:00 (xfr#6, to-chk=18/25)
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
         92.50K 100%    1.13MB/s    0:00:00 (xfr#7, to-chk=17/25)
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
          2.56M 100%   14.44MB/s    0:00:00 (xfr#17, to-chk=7/25)
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
        696.47K 100%    3.71MB/s    0:00:00 (xfr#19, to-chk=5/25)
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
          5.07M 100%   19.90MB/s    0:00:00 (xfr#20, to-chk=4/25)
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
        210.98K 100%  844.42kB/s    0:00:00 (xfr#21, to-chk=3/25)
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
        167.51K 100%  667.70kB/s    0:00:00 (xfr#22, to-chk=2/25)
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
        458.38K 100%    1.77MB/s    0:00:00 (xfr#23, to-chk=1/25)
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm
        282.33K 100%    1.09MB/s    0:00:00 (xfr#24, to-chk=0/25)

sent 484 bytes  received 16.38M bytes  3.64M bytes/sec
total size is 16.37M  speedup is 1.00
[[email protected] ~]#

Lea también: 14 ejemplos de comandos SCP para transferir archivos de forma segura en Linux

Ejemplo:8) Copie la estructura del directorio sin copiar archivos

Hay algunos escenarios en los que queremos copiar la estructura de directorios saltando archivos solo de la máquina local a la remota o viceversa.

Supongamos que queremos copiar la estructura de directorios de "/home/pkumar" de la máquina local a la máquina remota (192.168.1.29) en la carpeta /opt.

[email protected] ~]# rsync -av -f"+ */" -f"- *" /home/pkumar [email protected]:/opt/
[email protected]'s password:
building file list ... done
………………………………………………
pkumar/

sent 43 bytes  received 19 bytes  17.71 bytes/sec
total size is 0  speedup is 0.00
[[email protected] ~]#

Ejemplo:9) Reanudar la transferencia de archivos grandes después de fallar en scp

Hay algunos escenarios en el perfil de administrador de Linux en los que comenzamos a copiar un archivo más grande usando el comando scp, pero terminó en el medio y no podemos permitirnos comenzar a copiarlo nuevamente usando scp debido a su gran tamaño y consumo de tiempo.

Entonces, en esta situación, el comando rsync se puede usar, ya que puede comenzar a copiar el archivo desde donde lo dejó o terminó, o en otras palabras, rsync puede transferir los archivos que se copiaron parcialmente usando el comando scp. El ejemplo se muestra a continuación,

[[email protected] ~]# scp [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso                   28%  526MB  61.5MB/s   00:21 ETA
^CKilled by signal 2.
[[email protected] ~]#
[[email protected] ~]# rsync -P --rsh=ssh [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso
  1,921,843,200 100%   18.47MB/s    0:01:39 (xfr#1, to-chk=0/1)
[[email protected] ~]#

Ejemplo:10) Eliminar archivos en el destino si no está presente en el origen (–delete)

Si ya ha sincronizado archivos desde el origen al destino y desde el origen ha eliminado los archivos, entonces puede forzar el comando rsync para eliminar los archivos en el destino usando la opción –delete, el ejemplo se muestra a continuación

[[email protected] ~]# rsync -avz --delete /opt/rpms_db [email protected]:/tmp/rpms_db
[email protected]'s password:
sending incremental file list
deleting rpms_db/apr-util-1.5.2-6.el7.x86_64.rpm
deleting rpms_db/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpms_db/

sent 862 bytes  received 105 bytes  276.29 bytes/sec
total size is 15,947,152  speedup is 16,491.37
[[email protected] ~]#

Ejemplo:11) Poner límite en el tamaño de transferencia de archivos (–max-size)

Si no desea transferir o copiar los archivos grandes usando rsync, use la opción '–max-size={specify-size-here}' , supongamos que no queremos transferir los archivos cuyo tamaño es superior a 500K,

Nota:Para especificar el tamaño en MB use M y para GB use G.

[[email protected] ~]# rsync -avz --max-size='500K' /opt/rpms_db [email protected]:/tmp

Ejemplo:12) No sincronizar/copiar el archivo modificado en el destino

Hay algunos escenarios en los que modificamos los archivos en el destino y no queremos sobrescribir los archivos modificados desde el origen durante la sincronización, por lo que esto se puede lograr fácilmente usando -u opción en el comando rsync

[[email protected] ~]# rsync -avzu [email protected]:/opt/techi /home/pkumar/techi
[email protected]'s password:
receiving incremental file list

sent 37 bytes  received 4,960 bytes  1,427.71 bytes/sec
total size is 37,771,649  speedup is 7,558.87
[[email protected] ~]#

Ejemplo:13) Eliminar archivos del origen después de la sincronización (–remove-source-files)

Supongamos que desea eliminar archivos de la fuente una vez que se completa la sincronización con el comando rsync. En el siguiente ejemplo, carpeta del sistema local “/home/pkumar/techi.tgz ” está sincronizado con el sistema remoto (192.168.1.29), una vez que se completa la sincronización, eliminará el archivo de la fuente.

[[email protected] ~]# rsync --remove-source-files -zvh /home/pkumar/techi.tgz [email protected]:/opt
[email protected]'s password:
techi.tgz
sent 597 bytes  received 43 bytes  182.86 bytes/sec
total size is 518  speedup is 0.81
[[email protected] ~]#
[[email protected] ~]# ls -l /home/pkumar/techi.tgz
ls: cannot access /home/pkumar/techi.tgz: No such file or directory
[[email protected] ~]#

Ejemplo:14) Ejecutar en seco el comando rsync antes de la sincronización real

Puede haber algunas situaciones en las que no estamos sobre el comportamiento del comando rsync, por lo que en tales casos es mejor hacer una ejecución en seco de rsync

[[email protected] ~]# rsync --dry-run --remove-source-files -zvh /home/pkumar/projects.tar  [email protected]:/opt
[email protected]'s password:
projects.tar

sent 51 bytes  received 19 bytes  7.37 bytes/sec
total size is 981.24M  speedup is 14,017,682.29 (DRY RUN)
[[email protected] ~]#

Ejemplo:15) Incluir y excluir archivos durante la sincronización con rsync

Hay algunas situaciones en las que queremos copiar o sincronizar archivos y directorios de un tipo específico y queremos excluir archivos o directorios de un tipo específico. El comando Rsync admite opciones de inclusión y exclusión.

En el siguiente ejemplo, desea copiar los archivos de tipo pdf y rpm y excluir los tipos de archivo png.

[[email protected] ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
techi/postfix-2.10.1-7.el7.x86_64.rpm

sent 9,469,912 bytes  received 96 bytes  2,705,716.57 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Ejemplo:16) Poner restricción en la velocidad de transferencia de datos en rsync (–bwlimit=)

En el comando rsync podemos establecer el límite de ancho de banda para la transferencia de datos de una máquina a otra, use '–bwlimit= ‘ opción en el comando rsync para poner límite a la velocidad de transferencia de datos.

Supongamos que queremos establecer una tasa máxima de transferencia de datos (velocidad) de 600 KB/s con rsync, el ejemplo se muestra a continuación

[[email protected] ~]# rsync -avz --progress --bwlimit=600 /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
6,153,239 100%  910.02kB/s    0:00:06 (xfr#1, to-chk=6/8)
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
2,844,028 100%  615.28kB/s    0:00:04 (xfr#2, to-chk=5/8)
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
92,504 100%  507.51kB/s    0:00:00 (xfr#3, to-chk=4/8)
techi/pkumar-2.png
0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/8)
techi/pkumar-3.png
0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=2/8)
techi/pkumar.png
0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/8)
techi/postfix-2.10.1-7.el7.x86_64.rpm
2,558,136 100%  594.80kB/s    0:00:04 (xfr#7, to-chk=0/8)

sent 9,470,087 bytes  received 153 bytes  485,653.33 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Ejemplo:17) Ver la diferencia en archivos y directorios entre origen y destino

Usa “-i ” opción en el comando rsync para enumerar la diferencia en archivos y directorios entre el origen y el destino. El ejemplo se muestra a continuación

[[email protected]teway ~]# rsync -avzi /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
.d..t...... techi/
<f.st...... techi/projects.txt

sent 438 bytes  received 45 bytes  138.00 bytes/sec
total size is 11,648,064  speedup is 24,116.07
[[email protected] ~]#

Según el resultado del comando anterior, hay una diferencia en el archivo llamado "projects.txt" en el destino. Los siguientes son el significado de las palabras clave en la salida anterior,

  • d:indica un cambio en el archivo de destino
  • f:indica un archivo
  • t:indica cambios en las marcas de tiempo
  • s:indica cambio de tamaño

Eso es todo de este tutorial, en caso de que estos ejemplos le ayuden a comprender el comando rsync de manera más eficiente, comparta sus comentarios y opiniones

Leer también17 comandos tar útiles con ejemplos prácticos en Linux

Leer también :Cómo rotar y comprimir archivos de registro en Linux con Logrotate


Linux
  1. Comando Rsync:20 ejemplos útiles en Linux

  2. 12 ejemplos útiles de comandos Wget en Linux

  3. Comando ls en Linux:17 ejemplos útiles explicados

  4. Ejemplos prácticos del comando rsync en Linux

  5. 14 ejemplos útiles de comandos "cat" en Linux

15 ejemplos útiles de comandos táctiles en el sistema Linux

15 ejemplos prácticos del comando Rsync en Linux

9 ejemplos útiles de Touch Command en Linux

10 ejemplos útiles del comando Sort en Linux

Ejemplos de comandos rsync de Linux

12 ejemplos útiles de comandos de fecha de Linux