LINUX

Ejemplos de Rsync para transferir archivos en Linux

ejemplos de rsync

En el sistema operativo Linux, ‘rsync’ significa Rser emocionado Sync. Es una utilidad que se utiliza para sincronizar (copiar) archivos y directorios desde una fuente (SRC) a un destino (DEST).

Los archivos y directorios se pueden sincronizar en un host local o desde / hacia un host remoto. En el SRC, los archivos y directorios se sincronizarán. Mientras que, en el DEST, se llevarán a cabo los archivos y directorios sincronizados.

Además, el comando rsync puede copiar archivos y directorios de forma recursiva, copiar enlaces simbólicos, preservar (permisos, grupo, tiempo de modificación y propiedad) la identidad del archivo.

Rsync puede usar dos formas diferentes para sincronizar / copiar archivos o directorios:

  • Utilice shell remoto: ssh o rsh
  • Utilice el demonio rsync directamente a través de TCP

Aún más, rsync usa un algoritmo de transferencia delta que solo copia / sincroniza los diferentes datos entre SRC y DEST.

Este tutorial explicará muchas formas de usar el comando rsync a través de prácticas y ejemplos. También explicaremos en detalle las opciones más comunes del comando rsync.

Sintaxis del comando Rsync

Antes de profundizar en las formas de usar el comando rsync, echemos un vistazo a su sintaxis:

$ rsync [options] <SRC_PATH> <DEST_PATH>

1. Copiar / sincronizar archivo en la máquina local

El comando Rsync se puede usar para copiar / sincronizar archivos en su máquina local.

Suponiendo que desea copiar un archivo del directorio de inicio del usuario ‘linoxide’ llamado ‘/ home / linoxide’ a la carpeta ‘/ opt / test’.

$ sudo rsync -zvh /home/linoxide/computer-networking.pdf /opt/test/
computer-networking.pdf

sent 1.01K bytes  received 35 bytes  2.10K bytes/sec
total size is 3.03K  speedup is 2.89

Dónde:

-z: comprimir

-v: verbose la salida

-h: legible por humanos

2. Copiar / sincronizar directorio en la máquina local

Para transferir todos los archivos del directorio local SRC al directorio DEST, ejecute el comando rsync con la opción -zavh.

Suponiendo que desea copiar el directorio de inicio del usuario ‘linoxide’ llamado ‘/ home / linoxide’ a la carpeta ‘/ opt / backup’.

$ sudo rsync -zavh /home/linoxide/ /opt/backup/

sending incremental file list
./
.bash_history
.bash_logout
.bashrc
.lesshst
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
.ssh/
.ssh/known_hosts

sent 4.85K bytes  received 198 bytes  10.10K bytes/sec
total size is 9.59K  speedup is 1.90

Dónde:

-a: archivar datos durante el proceso de copia / sincronización

¿Puede verificar si el comando rsync fue exitoso o no? Ejecute el siguiente comando:

$ ls /opt/backup/ -la
total 40
drwxr-xr-x 3 linoxide linoxide 4096 Thg 6 15 16:02 .
drwxr-xr-x 4 root     root     4096 Thg 6 15 16:25 ..
-rw------- 1 linoxide linoxide  817 Thg 6 15 16:01 .bash_history
-rw-r--r-- 1 linoxide linoxide  220 Thg 6 11 15:58 .bash_logout
-rw-r--r-- 1 linoxide linoxide 3771 Thg 6 11 15:58 .bashrc
-rw-rw-r-- 1 linoxide linoxide 3028 Thg 2 25  2017 computer-networking.pdf
-rw------- 1 linoxide linoxide   40 Thg 6 15 15:51 .lesshst
-rw-r--r-- 1 linoxide linoxide  807 Thg 6 11 15:58 .profile
drwx------ 2 linoxide linoxide 4096 Thg 6 13 17:58 .ssh
-rw-r--r-- 1 linoxide linoxide    0 Thg 6 15 16:02 .sudo_as_admin_successful
-rw------- 1 linoxide linoxide  680 Thg 6 14 16:50 .viminfo

3. Rsync sobre ssh con un puerto específico

Puede usar ssh (shell seguro) para copiar / sincronizar datos, sus datos se transferirán en una conexión segura con cifrado. Nadie puede leer sus datos mientras se transfieren a Internet. Cuando usa el comando rsync, debe proporcionar la contraseña de usuario / root para realizar la tarea en particular. El uso de la opción SSH enviará sus inicios de sesión de manera encriptada para que su contraseña esté segura.

Copie un archivo de un remoto a un local con un puerto ssh específico. Para especificar un protocolo con el comando rsync, debe usar -e opción con el nombre de protocolo que desea utilizar.

Por ejemplo, el siguiente comando rsync copiará el archivo ‘deploy.yaml’ a través de un shell remoto desde una máquina remota al directorio de inicio del usuario ‘linoxide’.

$ rsync -avz -e "ssh -p 22" cas@10.9.8.41:/home/cas/deploy.yaml /home/linoxide/
cas@10.9.8.41's password: 
receiving incremental file list

sent 20 bytes  received 60 bytes  32.00 bytes/sec
total size is 239  speedup is 2.99

4. Copie / sincronice archivos y directorios de la máquina local a la máquina remota

Suponiendo que desea copiar / sincronizar la carpeta ‘test-data’ en el directorio de inicio del usuario ‘linoxide’ en el host local al directorio de inicio de una máquina remota ‘cas@10.9.8.41’, ejecute el comando:

$ rsync -azrvh /home/linoxide/computer-networking.pdf cas@10.9.8.41: 
cas@10.9.8.41's password: 
sending incremental file list
computer-networking.pdf

sent 1.04K bytes  received 35 bytes  430.80 bytes/sec
total size is 3.03K  speedup is 2.81

Dónde:

-r: copia recursiva

5. Copie / sincronice archivos y directorios de una máquina remota a una máquina local

El comando rsync le ayuda a transferir un ‘documento’ de directorio remoto para ser copiado en su host local.

Suponiendo que desea copiar / sincronizar archivos / directorios desde un host remoto ‘cas@10.9.8.41’ al directorio de inicio del usuario ‘linoxide’.

Por ejemplo:

$ rsync -zavhr cas@10.9.8.41:document /home/linoxide
cas@10.9.8.41's password: 
receiving incremental file list
document/
document/kubernetes.txt

sent 47 bytes  received 139 bytes  74.40 bytes/sec
total size is 0  speedup is 0.00  

6. Opciones de Rsync -include y -exclude

Estas dos opciones nos permiten incluir y excluir archivos especificando parámetros con esta opción nos ayuda a especificar aquellos archivos o directorios que desea incluir en su sincronización y excluir archivos y carpetas que no desea que se transfieran.

Aquí, en este ejemplo, el comando rsync incluirá solo aquellos archivos y directorios que comiencen con ‘k’ y excluirá todos los demás archivos y directorios.

$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' cas@10.9.8.41: /home/linoxide

cas@10.9.8.41's password: 
receiving incremental file list
./
k8s.yaml
kubernetes.yaml
kuber/

sent 88 bytes  received 280 bytes  147.20 bytes/sec
total size is 73  speedup is 0.20

7. Establecer el tamaño máximo de los archivos

Puede especificar el tamaño máximo de archivo que se va a transferir o sincronizar. Puede hacerlo con la opción ‘–max-size’.

En el siguiente ejemplo, el tamaño máximo de archivo es 200k, por lo que este comando transferirá solo aquellos archivos que sean iguales o menores a 200k.

$ rsync -zavhr --max-size="200k" cas@10.9.8.41: /home/linoxide
cas@10.9.8.41's password: 
receiving incremental file list
.bash_history
.bash_logout
.bashrc
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf

sent 2.58K bytes  received 51.60K bytes  21.67K bytes/sec
total size is 113.24K  speedup is 2.09

8. Elimine los archivos de origen después de una transferencia exitosa.

Ahora, suponga que tiene un servidor web y un servidor de respaldo de datos, creó una copia de respaldo diaria y la sincronizó con su servidor de respaldo, ahora no desea mantener esa copia local de respaldo en su servidor web. Entonces, ¿esperará a que se complete la transferencia y luego eliminará ese archivo de respaldo local manualmente? Claro que no. Esta eliminación automática se puede hacer usando la opción ‘–remove-source-files’.

$ ls /home/directory
computer-networking.pdf  deploy.yaml  document  k8s.yaml  kuber  kubernetes.yaml

------
$ rsync -azvh --remove-source-files /home/linoxide/deploy.yaml cas@10.9.8.41:
cas@10.9.8.41's password: 
sending incremental file list

sent 70 bytes  received 20 bytes  36.00 bytes/sec
total size is 239  speedup is 2.66

Ejecute el comando ‘ls’ nuevamente, puede ver que el archivo ‘deploy.yaml’ se eliminó en SRC.

$ ls
computer-networking.pdf  document  k8s.yaml  kuber  kubernetes.yaml

9. Encuentre la diferencia en archivos y directorios entre SRC y DEST

Para encontrar alguna diferencia en los archivos de directorios entre SRC y DEST, puede ejecutar el comando rsync con la opción ‘-i’.

$ rsync -avzi /home/linoxide/cloud cas@10.9.8.41:
cas@10.9.8.41's password: 
sending incremental file list
cd+++++++++ cloud/
<f+++++++++ cloud/computer-networking.pdf
<f+++++++++ cloud/k8s.yaml
<f+++++++++ cloud/kubernetes.yaml
cd+++++++++ cloud/document/
<f+++++++++ cloud/document/kubernetes.txt
cd+++++++++ cloud/kuber/
<f+++++++++ cloud/kuber/test.txt

sent 1,472 bytes  received 127 bytes  1,066.00 bytes/sec
total size is 3,101  speedup is 1.94

10. Limita el ancho de banda

Puede establecer la limitación del ancho de banda al ejecutar el comando rsync con la opción ‘–bwlimit = ‘.

Suponiendo que desea limitar la velocidad de transferencia de datos a 300 KB / s, ejecute el comando:

$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png cas@10.9.8.41:

cas@10.9.8.41's password: 
sending incremental file list
coursera.png

sent 2.93M bytes  received 35 bytes  234.48K bytes/sec
total size is 3.00M  speedup is 1.02

11. Reanude la transferencia cuando falló en scp

A veces, debe transferir un archivo muy grande a través del comando scp, pero obtuvo un error al copiar y no pudo comenzar a transferir nuevamente usando el comando scp debido al gran tamaño del archivo y al consumo de tiempo.

En esta situación, puede usar el comando rsync para comenzar a copiar el archivo de donde obtuvo el error. Por ejemplo, copiar un archivo ISO grande en el directorio de inicio al host remoto ‘cas@10.9.8.41’

$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41:

cas@10.9.8.41's password: 
ubuntu-18.04.4-live-server-amd64.iso                                                                                                                                              32%  278MB  86.7MB/s   00:06 ETA^

El proceso ha sido eliminado por el usuario. En ese momento, se transfirió el 32% del archivo. Ahora, puede continuar con el trabajo actual ejecutando rsync:

$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso cas@10.9.8.41:

cas@10.9.8.41's password: 
sending incremental file list
ubuntu-18.04.4-live-server-amd64.iso
        912.26M 100%   15.89MB/s    0:00:54 (xfr#1, to-chk=0/1)

sent 541.25M bytes  received 132.44K bytes  9.25M bytes/sec
total size is 912.26M  speedup is 1.69
Comando Rsync para reanudar la transferencia de archivos
comando rsync para reanudar la transferencia del archivo

12. Muestra el progreso durante la transferencia de datos.

Si desea ver el progreso transferido al ejecutar el comando rsync, puede usar la opción ‘–progress’.

Mostrará los archivos y el tiempo restante para completar la copia.

Por ejemplo:

$ rsync -avh --progress /home/linoxide/cloud/ cas@10.9.8.41:
cas@10.9.8.41's password: 
sending incremental file list
./
computer-networking.pdf
          3.03K 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=8/10)
coursera.png
          3.00M 100%  114.38MB/s    0:00:00 (xfr#2, to-chk=7/10)
k8s.yaml
             39 100%    1.52kB/s    0:00:00 (xfr#3, to-chk=6/10)
kubernetes.yaml
             34 100%    1.33kB/s    0:00:00 (xfr#4, to-chk=5/10)
ubuntu-18.04.4-live-server-amd64.iso
        912.26M 100%   89.60MB/s    0:00:09 (xfr#5, to-chk=4/10)
document/
document/kubernetes.txt
              0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/10)
kuber/
kuber/test.txt
              0 100%    0.00kB/s    0:00:00 (xfr#7, to-chk=0/10)

sent 915.49M bytes  received 164 bytes  79.61M bytes/sec
total size is 915.26M  speedup is 1.00
comando rsync con progreso
comando rsync con progreso

Conclusión

En este tutorial, aprendimos cómo usar el comando rsync con algunos ejemplos para copiar o sincronizar archivos / directorios.

Gracias por leer y deje su sugerencia en la sección de comentarios a continuación.

Publicaciones relacionadas

Deja una respuesta

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

Botón volver arriba
Cerrar