Comando rsync en Linux con ejemplos

rsync o sincronización remota es una utilidad de software para sistemas similares a Unix que sincroniza de manera eficiente archivos y directorios entre dos hosts o máquinas. Uno de ellos 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. Básicamente, hay dos formas en que rsync puede copiar/sincronizar datos:

  • Copiar/sincronizar a/desde otro host a través de cualquier shell remoto como ssh , rsh .
  • Copiando/sincronizando 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é sucede aquí: Rsync primero usará SSH para conectarse usera un host remoto y le pedirá una user'scontraseñ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 han 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 en absoluto en el host remoto.

Sintaxis de rsync:

rsync [options] source [destination]

Opciones:

  • -a, –archive: Esto es equivalente a usar -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).
    -a, --archive
    

    Nota: el modo de archivo no conserva los enlaces duros, porque encontrar archivos con enlaces múltiples es costoso. Las opciones A -H deben especificarse explícitamente para enlaces duros.

  • -v, –verbose: de forma predeterminada, rsync funciona en silencio. Una sola -v nos dará información sobre qué archivos se están transfiriendo y un breve resumen sobre los datos transferidos al final. Dos opciones -v nos darán información sobre el estado de la transmisión delta y sobre qué archivos están actualizados para omitirlos y un poco más de información al final. Por lo general, se utilizan más de dos opciones -v para depurar rsync.
    -v, --verbose
    
  • -h, –formato legible por humanos: Salidas en un formato legible por humanos.
    -h, --human-readable format
    
  • -z, –compress: comprime los datos del archivo durante la transferencia
    -z, --compress
    

Ejemplos:

  • Uso de rsync como un comando de lista: si solo se especifica la ruta de la fuente, el contenido de la fuente se enumera en un formato de salida similar a ls -l.
    rsync foo/ 

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

    Producción:

    rsync behaving as a list command

  • Copiar/sincronizar archivos y directorio 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 directorio fooa la barra de directorios . Si el directorio de destino no está presente (aquí bar), rsync crea uno automáticamente y copia todos los datos en él.

    Producción:

    rsync copies locally

  • Rsync usando ssh: hay dos formas diferentes para que rsync se comunique con un sistema remoto:
    • Usar un programa de shell remoto como transporte (como ssh(Secure Shell) o rsh(Remote Shell)).
    • Ponerse en contacto 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, -ese utiliza la opción.

    Producción:

    rsync synchronize

  • 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 modificando. Se debe usar 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 con remote-hosttodos los archivos propiedad del USUARIO con el grupo GRUPO.

    Producción:

    rsync chown

    Nota: El usery groupya 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 la opción -link-dest , mientras continuamos con 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 la geeksforgeekscarpeta del directorio foo, por lo que debería copiar solo el geeksforgeeksdirectorio.

    Nota: Esto no ignora los directorios existentes, o no se haría 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:

    rsync ignore existing

  • Mostrar el progreso durante la transferencia: para mostrar el progreso mientras se transfieren los datos del host local al host remoto, podemos usar la -–progressopció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:

    rsync progress

    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 para todo el archivo fue de 42,97 kilobytes por segundo durante los 0:00:00 segundos que tardó en completarse.
    • Fue la segunda transferencia durante la sesión actual de rsync .
    • Quedan 10 archivos más para que el host remoto 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 sobre el host remoto que se han actualizado más recientemente en el sistema de archivos local. Se hace con el indicador de actualización . El comportamiento ahora es así:
    • Se copian los archivos que no existen en el host remoto.
    • Los archivos que existen tanto en el 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 más antigua no se copian).

    Aquí, hice algunos cambios en file1 y file2 , pero los cambios en file2 se realizaron recientemente. Entonces solo, el archivo 2 se sincronizará.

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

    Producción:

    rsync update

  • Eliminar archivos automáticamente del host local después de una transferencia exitosa: ahora, supongamos que tenemos un servidor web y un servidor de respaldo y creamos un respaldo diario y lo sincronizamos con nuestro servidor de respaldo y luego no queremos conservar la copia local del copia de seguridad en nuestro servidor web. Entonces, en lugar de eliminarlo manualmente después de una transferencia exitosa, podemos usar la --remove-source-filesbandera para eliminar automáticamente los archivos del servidor web.
    rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp
    

    Producción:

    rsync remove source files

    Nota: Esto eliminará solo los archivos y no los directorios.

  • Elimine los archivos que se han eliminado en el host local: si hay algunos archivos que se eliminaron en el host local y queremos que también se actualicen en el host remoto, entonces debemos usar la --deleteopción.
    rsync -avhe ssh  /foo --delete user@remote-host:/tmp/
    

    Producción:

    rsync delete

    Entonces, aquí file1 , file2 , file3 se eliminaron en el host local y, como se puede ver, también se actualizaron en el host remoto.

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

  • Realización de una ejecución en seco 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:

    rsync dry run

  • Publicación traducida automáticamente

    Artículo escrito por abhayTiwari2 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *