logo

Comando rsync en Linux con ejemplos

sincronización o sincronización remota es una utilidad de software para sistemas tipo Unix que sincroniza eficientemente archivos y directorios entre dos hosts o máquinas. Uno es la fuente o el host local desde el que se sincronizarán los archivos, el otro es el host remoto, en el que se realizará la sincronización. Hay básicamente dos maneras en que sincronización puede copiar/sincronizar datos:

  • Copiar/sincronizar hacia/desde otro host a través de cualquier shell remoto como ssh , rsh .
  • Copiar/Sincronizar a través del demonio rsync usando TCP.

Rsync es famoso por su algoritmo de transferencia delta , en el que copia solo las diferencias entre los archivos de origen presentes en el host local y los archivos existentes en el destino o el host remoto.



Ejemplo:

rsync local-file user@remote-host:remote-file>

Qué pasa aquí:

Rsync usará primero SSH para conectarse comouser>al host remoto y le pediráuser's>contraseña. Una vez conectado, invocará el rsync del host remoto y luego los dos programas determinarán qué partes del archivo local deben copiarse para que el archivo remoto coincida con el local. Tenga en cuenta el siguiente comportamiento de rsync:



  • Se copian los archivos que no existen en el host remoto.
  • Los archivos que se hayan actualizado se sincronizarán, rsync copiará solo las partes modificadas de los archivos al host remoto.
  • Los archivos que son exactamente iguales no se copian al host remoto.

Sintaxis del comando `rsync` en Linux

rsync [options] source [destination]>

Opción disponible en el comando `rsync` en Linux

Opciones

Descripción

a, –archivo



Esto equivale a utilizar -rlptgoD . El modo de archivo incluye todas las opciones necesarias, como copiar archivos de forma recursiva, conservando casi todo (como enlaces simbólicos, permisos de archivos, propiedad de usuarios y grupos y marcas de tiempo).

-v, –detallado

De forma predeterminada, rsync funciona de forma silenciosa. El uso de una única opción -v proporciona información sobre los archivos transferidos y un resumen al final. Agregar dos opciones -v brinda actualizaciones de estado sobre la transmisión delta y los archivos omitidos, junto con más información al final. Normalmente se utilizan varias opciones -v para depurar rsync.

-h, –formato legible por humanos

Salidas en un formato legible por humanos.

-z, –comprimir

Comprimir datos de archivos durante la transferencia

Ejemplos

Usando `rsync` como comando de lista

Si solo se especifica la ruta de origen, el contenido del origen se enumera en un formato de salida similar als -l>.

rsync foo/>

El comando anterior enumerará los archivos y directorios presentes en el directorio. foo .

Producción:

devolver matrices en java

Copiar/sincronizar archivos y directorios localmente

Si ni la ruta de origen ni la de destino especifican un host remoto, los comandos rsync se comportan como un comando de copia.

rsync -avh foo/ bar/>

El comando anterior copiará/sincronizará todos los archivos y directorios presentes en el directoriofoo>al directorio bar . Si el directorio de destino no está presente (aquíbar>), rsync crea uno automáticamente y copia todos los datos que contiene.

Producción:

Rsync usando ssh

Hay dos formas diferentes para que rsync se comunique con un sistema remoto:

  • Usar un programa de shell remoto como transporte (comossh>(Shell seguro) orsh>(Shell remoto)).
  • Contactar con un demonio rsync directamente a través de TCP.

Aquí discutiremos rsync sobre ssh.

rsync -avhze ssh /foo user@remote-host:/tmp/>

Para especificar el tipo de protocolo a utilizar,-e>Se utiliza la opción.

Producción:

Rsync con permisos de archivos particulares

Si queremos sincronizar archivos con el host local o remoto con los permisos de los archivos que se están cambiando. Se debe utilizar el siguiente comando.

rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>

El comando anterior sincronizará todos los archivos presentes en el directorio /foo con los archivos presentes en el directorio /tmp en elremote-host>con todos los archivos propiedad del USUARIO con el grupo GRUPO.

Producción:

descargar xvideoservicethief ubuntu 14.04

Nota: Eluser>ygroup>ya debe estar creado en el host remoto.

Rsync con --ignore-existing-files>

También podemos omitir los archivos ya existentes en el destino. Esto generalmente se puede usar cuando estamos realizando copias de seguridad usando el –enlace-destino opción, mientras continúa una ejecución de copia de seguridad que se interrumpió.

rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>

Por lo tanto, se copiarán todos los archivos que no existan en el destino. Aquí he eliminado elgeeksforgeeks>carpeta del directoriofoo>, por lo que debería copiar sólo elgeeksforgeeks>directorio.

Nota: Esto no ignora los directorios existentes o no se hará nada. Incluso si hay algunos cambios en un archivo en el host local, aún no se sincronizará si está presente en el host remoto.

Producción:

Mostrar progreso durante la transferencia

Para mostrar el progreso al transferir los datos del host local al host remoto, podemos usar-–progress>opción.

rsync -avhe ssh --progress /foo user@remote-host:/tmp/>

Cuando se completa la transferencia de un archivo en particular, rsync genera una línea de resumen como se muestra a continuación.

Producción:

En la imagen de arriba, si miramos el archivo/foo/file2>, nos dice que

  • El archivo tenía una longitud total de 44 bytes.
  • La velocidad promedio de transferencia de todo el archivo fue de 42,97 kilobytes por segundo durante los 0:00:00 segundos que tardó en completarse.
  • Fue el segundo traspaso durante la actual sincronización sesión.
  • Quedan 10 archivos más para que el host remoto los verifique (para ver si están actualizados o no) de los 13 archivos totales en la lista de archivos.
  • Actualice el control remoto solo si hay una versión más nueva en el sistema de archivos local:
    Si queremos copiar archivos en el host remoto que se actualizaron más recientemente en el sistema de archivos local. se hace con -actualizar bandera. El comportamiento ahora es así:
    • Se copian los archivos que no existen en el host remoto.
    • Los archivos que existen tanto en el host local como en el remoto pero que tienen una marca de tiempo más reciente en el host local se copian en el host remoto. (Por el contrario, los archivos que tienen una marca de tiempo anterior no se copian).

    Aquí, hice algunos cambios en archivo1 y archivo2 , pero los cambios en archivo2 fueron hechos recientemente. tan solo archivo2 se sincronizará.

    rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>

    Producción: actualización de sincronización

    Eliminar automáticamente archivos del host local después de una transferencia exitosa

    Ahora, supongamos que tenemos un servidor web y un servidor de respaldo y creamos una copia de seguridad diaria y la sincronizamos con nuestro servidor de respaldo y luego no queremos conservar la copia local de la copia de seguridad en nuestro servidor web. Entonces, en lugar de eliminarlo manualmente después de una transferencia exitosa, podemos usar el--remove-source-files>bandera para eliminar automáticamente los archivos del servidor web.

    rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>

    Producción:

    Nota: Esto eliminará sólo los archivos y no los directorios.

    Eliminar los archivos que se han eliminado en el host local

    Si hay algunos archivos que se eliminan en el host local y queremos que también se actualicen en el host remoto, entonces debemos usar el--delete>opción.

    rsync -avhe ssh /foo --delete user@remote-host:/tmp/>

    Producción:

    Entonces, aquí archivo1 , archivo2 , archivo3 se eliminaron en el host local y, como se puede ver, también se actualizan en el host remoto.

    Nota: ` rsync` no elimina los archivos automáticamente para sincronizar los directorios presentes en ambos lados.

    Realizar un ensayo con `rsync`

    Una ejecución en seco hace que `rsync` realice una ejecución de prueba que no realiza ningún cambio y muestra casi el mismo resultado que una ejecución real. Generalmente se usa con las opciones -v, –verbose y/o -i, –itemize-changes para ver qué haría un comando `rsync` antes de ejecutarlo.

    rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>

    Producción:

    Conclusión

    En este artículo analizamos el comando rsync en Linux, que es una herramienta versátil y poderosa para sincronizar archivos y directorios entre hosts o máquinas. Con su algoritmo de transferencia delta y varias opciones, ofrece sincronización de datos eficiente, capacidades de copia de seguridad y gestión de transferencia de archivos. Al dominar el comando rsync, los usuarios de Linux pueden garantizar la coherencia de los archivos, optimizar la transmisión de datos y optimizar sus flujos de trabajo de gestión de datos.