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 {opciones}
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, –quit suprimir mensaje de salida
- -a, –archivar archivos y directorios mientras se sincroniza (-a igual a las siguientes opciones -rlptgoD)
- -r, –recursive sincronizar archivos y directorios recursivamente
- -b, –backup realiza la copia de seguridad durante la sincronización
- -u, –update no copia los archivos de origen a destino si los archivos de destino son más nuevos
- -l, –links copia 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 comprimir 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 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 trail/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 una opción para lo siguiente:
- copia recursiva de archivos y directorios
- copiar enlaces simbólicos como enlaces simbólicos
- preservar permisos
- preservar grupo
- preservar el tiempo 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 “/inicio/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 una 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) Mostrar 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 «-Progreso“, 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={especificar-tamaño-aquí}’, 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 -tu 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 de la fuente 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=
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
Usar «-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] ~]# 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 cambio en el archivo de destino
- f: indica un archivo
- t: indica cambio 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én : 17 comandos tar útiles con ejemplos prácticos en Linux
Leer también: Cómo rotar y comprimir archivos de registro en Linux con Logrotate