rsync es una herramienta de línea de comandos de uso gratuito que le permite sincronizar archivos de forma local y remota. Con él, puede transferir archivos y directorios.
Esto lo hace muy útil para migrar datos, realizar copias de seguridad y duplicar, lo que lo hace ideal para webmasters y administradores para tareas recurrentes de transferencia de datos.
Este artículo nos enseñará cómo funciona Rysnc y dará algunos ejemplos útiles.
Tabla de contenido
¿Cómo funciona rsync?
rsync es una utilidad de línea de comandos de sincronización remota para sistemas tipo Unix. Brinda al usuario la capacidad de transferir/sincronizar archivos entre máquinas o dos hosts sin problemas.
Debajo del capó, rsync usa el algoritmo de transferencia delta. Este algoritmo implica copiar las diferencias entre los dos archivos en dos hosts (origen y destino). El origen y el destino pueden ser locales o remotos. El comando rsync puede realizar tareas de copia/sincronización de datos de dos formas. Estos son:
- Use ssh, rsh para copiar/sincronizar entre dos hosts.
- Use el demonio TCP rsync para copiar/sincronizar.
Como está diseñado para funcionar en sistemas tipo Unix, también funciona en Linux.
El proceso paso a paso que usa rsync es el siguiente:
- Rsync usa SSH para conectarse al host remoto y solicita una contraseña.
- Una vez conectado, el rsync del host remoto se comunica con la fuente.
- Estos programas luego determinarán los archivos y directorios que necesitan sincronización. Utiliza un algoritmo de transferencia delta para verificar la diferencia entre los archivos.
Si el comando rsync no encuentra un archivo en el control remoto pero no en el host, lo copiará y transferirá al sistema host. De manera similar, para los archivos ya existentes (tanto en el host como en el remoto), copiará la diferencia entre ellos (es decir, las partes modificadas). Por último, ignorará los archivos existentes en ambos sistemas sin modificaciones.
El comando rsync logra actualizaciones incrementales al almacenar la diferencia en un archivo temporal antes de enviarlo al destino.
Antes de que empieces:
- Necesitas tener privilegios de root o sudo
- Tener acceso a la terminal/línea de comando
- Acceso SSH para ejecutar comandos rsync de forma segura
- También necesita dos máquinas para hacer rsync.
Para el tutorial, usaremos Linux Mint 21.1 Vera. Puede seguir fácilmente la guía sin problemas utilizando cualquier otra distribución de Linux.
¿Por qué usar rsync sobre Scp?
Scp (copia segura) es un popular protocolo de línea de comandos que permite a los usuarios copiar archivos. Sigue un enfoque lineal para copiar. Esto significa que simplemente copia los archivos del origen al destino. Para hacerlo de forma segura, utiliza SSH.
La sintaxis del comando scp es la siguiente:
scp option SOURCE DESTINATION
Sin embargo, la pregunta sigue siendo, ¿por qué usar rsync sobre scp?
Bueno, hay múltiples beneficios de usar rsync. Estos beneficios incluyen:
- Ejecución más rápida: rsync es más rápido que scp porque utiliza un protocolo de actualización remota. Esto le permite transferir solo las diferencias en lugar de todo el archivo. Por lo tanto, si configura una sincronización regular a lo largo del tiempo, solo necesita hacer una copia completa la primera vez. A partir de la próxima vez, solo copia las partes actualizadas con la ayuda del algoritmo de transferencia delta.
- Menos consumo de ancho de banda: como rsync no tiene que copiar todo el archivo nuevamente, conduce a un menor consumo de ancho de banda. Además, también utiliza algoritmos de compresión/descompresión para minimizar el tamaño del archivo durante la transferencia.
- Más opciones de línea de comandos: rsync también supera a scp en la cantidad de opciones de línea de comandos. Esto significa que puede ajustar rsync más que scp.
En conclusión, rsync es una excelente herramienta de sincronización incremental. La herramienta scp también es útil para transferir/sincronizar archivos de forma segura. En un escenario del mundo real, scp es adecuado para las tareas diarias si busca un enfoque más directo. Sin embargo, para tareas recurrentes, use rsync.
Sintaxis del comando rsync
El comando rsync es el siguiente:
Aquí, los términos se definen a continuación:
- OPCIÓN: estas son las opciones de rsync
- FUENTE – Directorio de origen
- DEST – Directorio de destino
- USUARIO: nombre de usuario remoto
- HOST: nombre de host remoto o dirección IP
Las opciones son parámetros que ofrecen funcionalidad adicional al comando. Por ejemplo, puede sincronizar datos recursivamente con la opción -r. Sin embargo, la opción -r no sincroniza la propiedad de grupos y usuarios, marcas de tiempo, permisos o enlaces simbólicos. En su lugar, puede usar la opción -a, que ejecuta el comando en modo de archivo, asegurándose de que todos los enlaces simbólicos, permisos y propiedad del archivo se mantengan al copiar.
Otras opciones de rsync incluyen:
- -z: comprimir datos para ahorrar espacio
- -h: proporciona salida en formato legible por humanos
- -b: realiza una copia de seguridad durante el proceso de sincronización de datos
- -e: usa el protocolo SSH para transferencias remotas de datos
- -progreso: muestra el progreso de sincronización de datos
- -v: pide a rsync que muestre una salida detallada
- –n: realiza un ensayo para probar la configuración y la configuración para la sincronización de datos
- -q: suprime la salida y las opciones del comando rsync
Instalando rsync
La mayoría de los sistemas Unix y Linux vienen con rsync instalado. Si su sistema no tiene rsync, puede instalarlo usando los siguientes comandos.
Para Debian/Ubuntu y Mint
sudo apt-get install rsync
Para Arch Linux
pacman -S rsync
En Gentoo
emerge sys-apps/rsync
En CentOS/Fedora/REHL
sudo yum install rsync
en openSUSE
sudo zypper install rsync
Como tenemos Linux Mint, rsync venía preinstalado. Entonces puede ejecutar el comando rsync en la terminal para ver si está instalado. Explicará sus capacidades, opciones y otra información vital si está presente.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Ahora veamos rsync en acción con diferentes casos de uso.
Para el tutorial, vamos a hacer dos directorios.
- directorio fuente
- directorio destino
Para eso, debe escribir los siguientes comandos.
mkdir source-directory mkdir dest-directory
Además, necesitaremos generar archivos para que rsync funcione. Así que vamos a crear algunos archivos de prueba con el siguiente comando.
touch source-directory/file{1..100}
Esto crea 100 archivos vacíos en el directorio de origen. Puede confirmarlo ingresando el siguiente comando.
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Nota: hemos mantenido el directorio de destino vacío.
Copiar directorios localmente de forma recursiva
Aunque rsync apunta principalmente a copiar archivos entre un servidor local y remoto, es igualmente útil para copiar archivos localmente.
En este caso, usaremos la siguiente sintaxis de rsync.
opción rsync ORIGEN DESTINO
Copie los archivos en nuestro directorio de origen al directorio de destino ejecutando el siguiente comando.
rsync -r source-directory/ dest-directory
Aquí, el comando copia «recursivamente» los archivos del directorio de origen al directorio de destino.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Esto copia todos los archivos del directorio de origen al directorio de destino.
Copiar un solo archivo localmente
Ahora que hemos aprendido a sincronizar dos directorios, aprenderemos a copiar un solo archivo.
Para este propósito, editaremos el archivo vacío file1 en el directorio de origen y luego lo sincronizaremos con el mismo archivo presente en el directorio de destino.
Para editar un archivo, escriba el siguiente comando.
nano source-directory/file1
Ahora copie y pegue el siguiente texto en el editor nano.
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
Agregar contenido a un archivo
Ahora, cierre y guarde el archivo.
Ahora copiemos el archivo usando rsync.
sudo rsync -v --existing source-directory/file1 /dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
Como habrás notado, usamos la opción existente. Esto actualiza los archivos existentes. Si ejecuta el comando sin existir, no se actualizará, aunque se ejecute correctamente.
Si el único archivo que está copiando no existe en la carpeta de destino, debe ejecutar el siguiente comando.
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Copiar varios archivos
Si tiene la intención de copiar varios archivos, debe mencionar las rutas de origen de ambos archivos, seguidas del directorio de destino.
Para ello, crearemos dos nuevos archivos: newfile2 y newfile3, en el directorio fuente. Ejecute el siguiente comando para hacerlo.
touch source-directory/newfile{2..3}
Ahora, use el siguiente comando para sincronizar varios archivos.
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
Copiar archivo o directorio de local a remoto
La sintaxis de rsync para la transferencia local a remota es la siguiente.
rsync option SOURCE [email protected]:DEST
Como puede ver, necesita saber la dirección IP de la máquina remota para que esto funcione. Además, debe agregar la dirección IP después del archivo de origen.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Antes de iniciar la transferencia, te pedirá la contraseña. Introdúcelo para continuar. Además, si el usuario es diferente en la máquina remota, debe mencionarlo antes de la dirección IP seguida de @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Si tiene la intención de copiar varios archivos o directorios, debe enumerar las rutas de los archivos o directorios. La sintaxis para ello está a continuación.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Protocolos específicos de transferencia remota
rsync le permite especificar protocolos de transferencia de archivos específicos. Para hacerlo, debe usar la opción -e, seguida del protocolo.
Por ejemplo, si desea utilizar el protocolo ssh, debe agregar -e ssh al comando rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copiar un archivo o directorio de remoto a local
La sintaxis de rsync para la transferencia local a remota es la siguiente.
sync option [email protected]:SRC DEST
Esto actúa como una solicitud de extracción. Por lo tanto, para obtener los archivos/directorios necesarios desde un servidor remoto a su máquina local, debe ejecutar el siguiente comando.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
El comando extrae los archivos dentro del directorio de destino de la máquina remota al directorio de origen de la máquina local.
Del mismo modo, puede extraer un archivo específico mencionándolo a través de su ruta completa.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Para copiar varios archivos o directorios de local a remoto, debe especificar la ruta entre corchetes (separados por comas) después de la dirección IP del servidor.
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
Del mismo modo, también puede mencionar archivos.
Mostrar progreso en vivo durante la transferencia
Es una buena idea ver el progreso en vivo para copias de seguridad de datos más grandes. Para eso, necesita usar el indicador de progreso. Agréguelo al comando rsync y podrá ver la velocidad de transferencia, el tiempo restante y la cantidad de datos transferidos.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Eliminar archivos de origen una vez que se complete la transferencia
Puede usar el indicador -remove-source-files para eliminar los archivos de origen después de la transferencia completa. Esto puede ayudarte en muchos escenarios, especialmente cuando se trata de asegurar tus archivos sin dejar ningún rastro o simplemente usarlos para liberar espacio.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
ejecución en seco de rsync
Rysnc también le permite evaluar antes de realizar una ejecución real. El simulacro le permite ver si está haciendo lo correcto. Después de todo, no desea actualizar los archivos por error o incluso eliminarlos.
Necesita usar la opción –dry-run para hacer una ejecución en seco. Agréguelo al comando, seguido del origen y el destino.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
El resultado es similar a cómo lo ejecutamos antes. Sin embargo, notará una mención de (DRY RUN) al final de la salida.
Establecer tamaño de archivo mínimo y máximo
Rysnc también le permite establecer un tamaño de archivo mínimo o máximo durante la transferencia.
Entonces, si desea transferir con un tamaño mínimo de 15 KB, debe usar –min-size=15K.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
El comando solo copiará archivos con un tamaño de archivo mínimo de 15 KB. Si el tamaño del archivo es inferior, lo ignorará.
De manera similar, puede usar el indicador –max-size para establecer el tamaño máximo de archivo.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Aquí, rsync ignorará los archivos por encima del tamaño de 450K.
Establecer límite de ancho de banda
Si está realizando otras tareas que requieren mucho ancho de banda, puede configurar rysnc para establecer el límite de ancho de banda para la transferencia. Para hacerlo, use –bwlimit=KB/s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Aquí, configuramos el ancho de banda a 100 Kb/s durante la transferencia.
Ultimas palabras
Esto nos lleva al final de nuestra guía de comandos rsync. Aprendimos a usar rysnc y cubrimos muchos comandos de manera efectiva.
Sin embargo, rysnc ofrece mucho más de lo que cubrimos. Es por eso que también puede consultar la página de manual de rsync, donde se tratan todos los aspectos de rsync.
A continuación, consulte las hojas de trucos de la línea de comandos para Windows, Linux y macOS.