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.