GNU/Linux >> Tutoriales Linux >  >> Linux

Ejemplos de Rsync para transferir archivos en Linux

En el sistema operativo Linux, 'rsync' significa R emoción S sincronizado Es una utilidad utilizada para sincronizar (copiar) archivos y directorios desde un origen (SRC) a un destino (DEST).

Los archivos y directorios se pueden sincronizar en un host local o hacia/desde un host remoto. En el SRC, se sincronizarán archivos y directorios. Mientras que, en 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, conservar (permisos, grupo, tiempo de modificación y propiedad) la identidad del archivo.

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

  • Usar 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 analizará muchas formas de usar el comando rsync a través de prácticas y ejemplos. También explicaremos detalladamente 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. Copie/sincronice el 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

donde:

-z :comprimir

-v :detallada la salida

-h :legible por humanos

2. Copie/sincronice el 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

donde:

-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 puerto específico

Puede usar ssh (shell seguro) para copiar/sincronizar datos, sus datos se transferirán en una conexión segura con encriptación. Nadie puede leer sus datos mientras se transfieren a Internet. Cuando usa el comando rsync, debe proporcionar la contraseña de usuario/raíz para realizar la tarea en particular. El uso de la opción SSH enviará sus inicios de sesión de forma cifrada 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 del 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" [email protected]:/home/cas/deploy.yaml /home/linoxide/
[email protected]'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 desde la máquina local a la máquina remota

Supongamos 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 '[email protected]', ejecute el comando:

$ rsync -azrvh /home/linoxide/computer-networking.pdf [email protected]: 
[email protected]'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

donde:

-r :copia recursiva

5. Copie/sincronice archivos y directorios desde la máquina remota a la máquina local

El comando rsync lo ayuda a transferir un 'documento' de directorio remoto para copiarlo en su host local.

Suponiendo que desea copiar/sincronizar archivos/directorios desde un host remoto '[email protected]' al directorio de inicio del usuario 'linoxide'.

Por ejemplo:

$ rsync -zavhr [email protected]:document /home/linoxide
[email protected]'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 inclusión y exclusión de Rsync

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

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 '*' [email protected]: /home/linoxide

[email protected]'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 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' [email protected]: /home/linoxide
[email protected]'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. Eliminar archivos de origen después de una transferencia exitosa

Ahora, suponga que tiene un servidor web y un servidor de respaldo de datos, creó un respaldo diario y lo 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 copia de seguridad local manualmente? Claro que no. Esta eliminación automática se puede realizar mediante 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 [email protected]:
[email protected]'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. Encuentra la diferencia en archivos y directorios entre SRC y DEST

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

$ rsync -avzi /home/linoxide/cloud [email protected]:
[email protected]'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. Limite 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 tasa de transferencia de datos a 300 KB/s, ejecute el comando:

$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png [email protected]:

[email protected]'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 falle en scp

A veces, tiene que transferir un archivo muy grande a través del comando scp, pero obtiene un error al copiar y no puede 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 desde donde obtuvo el error. Por ejemplo, copiar un archivo ISO grande en el directorio de inicio al host remoto '[email protected]'

$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso [email protected]:

[email protected]'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 [email protected]:

[email protected]'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

12. Mostrar 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/ [email protected]:
[email protected]'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

Conclusión

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

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


Linux
  1. 25 ejemplos prácticos útiles del comando find en Linux

  2. 14 ejemplos de comandos SCP para transferir archivos de forma segura en Linux

  3. Cómo transferir archivos en Linux con SCP y Rsync

  4. Comando rsync de Linux con ejemplos prácticos

  5. Linux equivalente a robocopy?

Comando Find de Linux con ejemplos prácticos

Comando lsof en Linux (10 ejemplos)

15 ejemplos prácticos del comando Rsync en Linux

Ejemplos de comandos rsync de Linux

Comando lsof en Linux con ejemplos

Comando Linux comm con ejemplos