En Linux hay muchas herramientas que puedes usar desde la terminal y una de ellas es el comando linux rsync, este comando te permite sincronizar directorios y archivos entre dos ubicaciones, ya sean carpetas locales en un equipo o entre dos equipos ya sean uno local y otro remoto o entre equipos remotos. Con rsync puedes hacer un respaldo local o remoto entre 2 equipos o entre dos rutas. Descubre como usar el comando linux rsync.
Comandos Linux: rsync
El comando linux rsync es una herramienta rápida y muy versátil para copiar archivos de forma local o remota. Así se describe este comando cuando ves la ayuda del comando man respecto al comando rsync. Este comando permite realizar una copia exacta de un archivo o directorio, en este último caso incluyendo todos los elementos dentro de este directorio, incluyendo todas las rutas y archivos, incluidos sus permisos y propiedades.
Una de las ventajas mas interesantes de este comando es que puede comprobar las dos rutas y actualizar solo los archivos nuevos y los que han cambiado de una ruta a otra. Si se interrumpiera el comando antes de concluir, solo basta con ejecutar de nuevo el comando y detectará cuales archivos faltaron para continuar donde se interrumpió.
Entre las características de este comando se encuentran:
- Rápida y extraordinariamente versátil copia de archivos
- Copia local de archivos
- Copia local/remota o remota/remota
- Algoritmo Delta-transfer que reduce la cantidad de datos enviados por la red al enviar solo las diferencias entre el archivo origen y el contenido del archivo en el host destino
- Detecta archivos que han sido modificados en fecha, tamaño para mejorar la sincronización de archivos
- Soporta copia de: enlaces suaves/duros, dispositivos, propietarios, grupos y permisos
- puede excluir archivos o rutas mediante la opción exclude o exclude-from similar al comando tar
- Puede usar shells transparentes, incluyendo ssh y rsh
- no requiere privilegios de root para funcionar
- soporta daemons rsync autenticados o anónimos que son útiles para hacer mirrors o repositorios espejos
Formas de usar rsync
La forma mas sencilla de usar el comando rsync es para realizar la copia de una ruta o un archivo de forma local, la sintaxis es muy sencilla y se puede resumir de la siguiente forma:
rsync [opciones] origen destino
Las opciones son importantes en rsyn pues en general son necesarias para indicar lo que deseas hacer. Las opciones de rsync más comunes son:
-v : muestra información en pantalla sobre las acciones que se realizan
-r : recursivo, realiza la copia de archivos de forma recursiva dentro de los directorios, pero no copia los permiso, los datos de las fechas de accesos o modificación de los archivos.
-a : modo archivo, este modo permite copiar archivos de forma recursiva aceptando enlaces simbólicos, permisos, propiedad del usuario y grupo, así como las fechas de acceso
-z : comprime los datos antes de enviarlos, lo que puede hacer más rápidas las transferencias entre hosts remotos, para rutas locales no proporciona ninguna ventaja usar esta opción.
Algunos ejemplos sencillos con los que puedes utilizar el comando linux rsync. El siguiente ejemplo se copia un archivo llamado respaldo.tar dentro de un directorio en la ruta definida como /tmp/backup/ si este ultimo directorio no existe, se crea.
rsync -zv respaldo.tar /tmp/backup/
Otro ejemplo del comando rsync permite realizar una copia del directorio rpmpkgs para hacer un rsync backup, es decir que se crea una copia completa del directorio, y se creará un directorio llamado /tmp/backup/rpmspkgs/. Es importante destacar que en el origen no se usa la diagonal «/» al final del directorio haciendo referencia a que se desea copiar ese directorio, no solo su contenido.
rsync -avz /root/rpmpkgs /tmp/backup/
Si se desea sincronizar el contenido de dos directorios y además ver el progreso de las transferencias se puede utilizar el siguiente comando
rsync -avP /home/usuario/Descargas/ /tmp/Downloads/
Como en el ejemplo anterior es importante hacer notar la diagonal al final de /home/usuario/Descargas/ que tiene por objetivo indicar que se desea copiar el contendio del directorio, dentro del destino. En este caso no se creará un directorio llamado «Descargas» dentro de /tmp/Downloads/, solo se sincronizarán los archivos y directorios dentro de estos.
Para acceder a hosts remotos usando ssh se utiliza la siguiente sintaxis:
rsync [opciones] -e ssh origen usuario@host:/ruta/
Para mostrar un ejemplo de como hacer un respaldo con rsync desde una carpeta local hacia un host remoto en una ruta de respaldos, puedes usar un comando como este:
rsync -avz -e ssh /home/usuario/Documentos/ luis@10.10.120.20:/nas1/respaldo/
Asi tendrás un respaldo del contenido de la carpeta documentos en la carpeta /nas1/respaldo/ en el equipo que tiene configurada la IP 10.10.120.20 y para conectarte se ha usado ssh con el usuario «luis» y su contraseña.
Hay muchos ejemplos prácticos de rsync con los que puedes aprender a usarlo para hacer respaldos o backups, para hacer un espejo o mirror de una carpeta o repositorio y en general para copiar información con bastante ventas y mucha mayor flexibilidad que usando otros comandos.
Lo importante es saber que te permite hacer y cuando es conveniente usar una de las muchas opciones que tiene, por esto es importante que las vayas conociendo y probando. Este es un resumen de las opciones de rsync:
-v, –verbose : incremente la información mostrada en pantalla
–info=FLAGS : opciones específicas de información en pantalla
–debug=FLAGS : opciones específicas de información de depuración en pantalla
–msgs2stderr : manejo especial de la salida para depuración
-q, –quiet suppress : no mostrar mensajes que no sean errores
–no-motd : suprimir el modo daemon MOTD (ver caveat)
-c, –checksum : excluir en base a checksum, en ves de tiempo de modificación y tamaño
-a, –archive : modo archivo; igual a -rlptgoD (no -H,-A,-X)
–no-OPCION : desactiva una opción (por ejemplo.: –no-D)
-r, –recursive : recorre los directorio de forma recursiva
-R, –relative : usa rutas relativas en los nombres de archivos
–no-implied-dirs : no envía los directorio implícitos con –relative
-b, –backup : hace respaldo de los archivos antes de remplazarlos (ver –suffix y –backup-dir)
–backup-dir=DIRECTORIO : hacer respaldos a la jerarquía de archivos en un directorio dado como DIRECTORIO
–suffix=SUFFIX : caracter sufijo de los respaldos ( por default ~ sin –backup-dir)
-u, –update : omite los archivos que son mas nuevos en el host o ruta de destino
–inplace : update destination files in-place
–append append data onto shorter files
–append-verify –append w/old data in file checksum
-d, –dirs : transferir directorio sin ser revursivo
-l, –links : copia los enlaces simbólicos tal cual
-L, –copy-links : transformar enlaces simbólicos en archivos/directorios a que hacen referencia
–copy-unsafe-links : solo los enlaces simbólicos inseguros son trasnformados
–safe-links : ignora enlaces simbólicos que apuntan fuera del arbol del systema de archivos
–munge-links : convierte los enlaces simbólicos para hacerlos mas seguros
-k, –copy-dirlinks : transforma los enlaces simbólicos en directorios en el origen
-K, –keep-dirlinks : tratar los enlaces simbólicos en el destino como directorios
-H, –hard-links : preservar enlaces duros
-p, –perms : preservar los permisos de los archivos
-E, –executability : preservar los permisos de ejecución de los archivos
–chmod=CHMOD : afecta los permisos de archivos / directorios
-A, –acls : preserva las ACLs (queda implícito -p)
-X, –xattrs : preserva atributos extendidos de archivos
-o, –owner : preserva el propietarios de los archivos (solo super-usuario)
-g, –group : preserva el groupo de los archivos
–devices : preserva los archivos de dispositivos (solo como super-usuario)
–specials : preserva archivos especiales
-D : lo mismo que –devices –specials
-t, –times : preserva el tiempo de modificacion de los archivos
-O, –omit-dir-times : omite los directorios del efecto de –times
-J, –omit-link-times : omite los enlaces simbolicos del efecto de –times
–super receiver attempts super-user activities
–fake-super store/recover privileged attrs using xattrs
-S, –sparse handle sparse files efficiently
–preallocate allocate dest files before writing
-n, –dry-run perform a trial run with no changes made
-W, –whole-file copy files whole (w/o delta-xfer algorithm)
-x, –one-file-system don’t cross filesystem boundaries
-B, –block-size=SIZE force a fixed checksum block-size
-e, –rsh=COMMAND : especifica el shell remoto a usar
–rsync-path=PROGRAM specify the rsync to run on remote machine
–existing skip creating new files on receiver
–ignore-existing skip updating files that exist on receiver
–remove-source-files sender removes synchronized files (non-dir)
–del : un alias para –delete-during
–delete : Elimina archivos extraños del directorio destino
–delete-before : El destino primero borra la lista de archivos ausentes en el orígen y los borra antes de la transferencia
–delete-during : El destino borra los archivos durante la transferencia
–delete-delay : Encuentra los archivos a borrar durante la transferencia y los borra después
–delete-after : El destino borra los archivos después de la transferencia
–delete-excluded : También borra los archivos excluidos en el destino
–ignore-missing-args ignore missing source args without error
–delete-missing-args delete missing source args from destination
–ignore-errors delete even if there are I/O errors
–force force deletion of dirs even if not empty
–max-delete=NUM don’t delete more than NUM files
–max-size=SIZE : no transfiere cualquier archivo mayor al tamaño indicado
–min-size=SIZE : no transfiere cualquier archivo menor al tamaño indicado
–partial keep partially transferred files
–partial-dir=DIR put a partially transferred file into DIR
–delay-updates put all updated files into place at end
-m, –prune-empty-dirs prune empty directory chains from file-list
–numeric-ids don’t map uid/gid values by user/group name
–usermap=STRING custom username mapping
–groupmap=STRING custom groupname mapping
–chown=USER:GROUP simple username/groupname mapping
–timeout=SECONDS set I/O timeout in seconds
–contimeout=SECONDS set daemon connection timeout in seconds
-I, –ignore-times : no excluye archivos que tiene mucho tamaño y misma fecha
–size-only : excluye archivos que tienen el mismo tamaño
–modify-window=NUM compare mod-times with reduced accuracy
-T, –temp-dir=DIR create temporary files in directory DIR
-y, –fuzzy find similar file for basis if no dest file
–compare-dest=DIR also compare received files relative to DIR
–copy-dest=DIR … and include copies of unchanged files
–link-dest=DIR hardlink to files in DIR when unchanged
-z, –compress : comprime los datos durante la trasnferencia
–compress-level=NUM : establese un nivel de compresión explísito
–skip-compress=LIST skip compressing files with suffix in LIST
-C, –cvs-exclude auto-ignore files in the same way CVS does
-f, –filter=RULE add a file-filtering RULE
-F same as –filter=’dir-merge /.rsync-filter’
repeated: –filter=’- .rsync-filter’
–exclude=PATTERN exclude files matching PATTERN
–exclude-from=FILE read exclude patterns from FILE
–include=PATTERN don’t exclude files matching PATTERN
–include-from=FILE read include patterns from FILE
–files-from=FILE read list of source-file names from FILE
-0, –from0 all *from/filter files are delimited by 0s
-s, –protect-args no space-splitting; wildcard chars only
–address=ADDRESS bind address for outgoing socket to daemon
–port=PORT : una alternativa del número de puerto a la opción de indicarlo con dos puntos (:port)
–sockopts=OPTIONS : especificar opciones personalizadas de TCP
–blocking-io : usar el bloqueo de I/O para el shell remoto
–outbuf=N|L|B : establece el uso del buffer a Ninguno, Lineal, o Bloque
–stats : muestra algunas estadísticas de la transferencia de archivos
-8, –8-bit-output : mantiene en la salida a los bits altos de caracteres sin filtrar
-h, –human-readable : muestra los números de forma mas legible para para las personas
–progress : muestra el progreso de la transferencia
-P : mismo comportamiento que –partial –progress
-i, –itemize-changes output a change-summary for all updates
-M, –remote-option=OPTION send OPTION to the remote side only
–out-format=FORMAT output updates using the specified FORMAT
–log-file=FILE log what we’re doing to the specified FILE
–log-file-format=FMT log updates using the specified FMT
–password-file=FILE read daemon-access password from FILE
–list-only list the files instead of copying them
–bwlimit=RATE limit socket I/O bandwidth
–write-batch=FILE write a batched update to FILE
–only-write-batch=FILE like –write-batch but w/o updating dest
–read-batch=FILE read a batched update from FILE
–protocol=NUM force an older protocol version to be used
–iconv=CONVERT_SPEC request charset conversion of filenames
–checksum-seed=NUM set block/file checksum seed (advanced)
-4, –ipv4 : se da preferencia al uso de IPv4
-6, –ipv6 : se da preferencia al uso de IPv6
–version : mostrar el número de versión de rsync
(-h) –help : muestra la ayuda del comando
Rsync puede funcionar con un daemon, en tal caso las siguientes opciones son aceptadas:
–daemon : correr rsync como un daemon
–address=ADDRESS : enlazar con una dirección específica
–bwlimit=RATE limit socket I/O bandwidth
–config=FILE specify alternate rsyncd.conf file
-M, –dparam=OVERRIDE override global daemon config parameter
–no-detach do not detach from the parent
–port=PORT listen on alternate port number
–log-file=FILE override the «log file» setting
–log-file-format=FMT override the «log format» setting
–sockopts=OPTIONS specify custom TCP options
-v, –verbose : muestra mayor información en pantalla
-4, –ipv4 : se da preferencia al uso de IPv4
-6, –ipv6 : se da preferencia al uso de IPv6
-h, –help : muestra la ayuda del comando
Recuerda que siempre puedes ver todas las opciones y documentación de un comando con el comando man y el nombre del comando a consultar.
Como puedes ver las opciones que tiene rsync son muchas y de ahí proviene su versatilidad, no queda mas que practicar y encontrar la forma en que sea sencillo y práctico de usar para la tarea que necesites.