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.