Sul sistema operativo Linux, 'rsync' sta per R emoticon S sinc. È un'utilità utilizzata per sincronizzare (copiare) file e directory da un'origine (SRC) a una destinazione (DEST).
I file e le directory possono essere sincronizzati su un host locale o su/da un host remoto. Sull'SRC, i file e le directory verranno sincronizzati. Mentre, sul DEST, avranno luogo i file e le directory sincronizzati.
Inoltre, il comando rsync può copiare ricorsivamente file e directory, copiare collegamenti simbolici, preservare l'identità del file (autorizzazioni, gruppo, tempo di modifica e proprietà).
Rsync può utilizzare due modi diversi per sincronizzare/copiare file o directory:
- Usa shell remota:ssh o rsh
- Usa il demone rsync direttamente tramite TCP
Inoltre, rsync utilizza un algoritmo di trasferimento delta che copia/sincronizza solo i diversi dati tra SRC e DEST.
Questo tutorial esaminerà molti modi per utilizzare il comando rsync attraverso pratiche ed esempi pratici. Spiegheremo anche il dettaglio delle opzioni più comuni del comando rsync.
Sintassi del comando Rsync
Prima di approfondire i modi di utilizzare il comando rsync, diamo un'occhiata alla sua sintassi:
rsync [options] <SRC_PATH> <DEST_PATH>
1. Copia/Sincronizza file sul computer locale
Il comando Rsync può essere utilizzato per copiare/sincronizzare file sul tuo computer locale.
Supponendo che tu voglia copiare un file dalla directory home dell'utente 'linoxide' chiamato '/home/linoxide' nella cartella '/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
Dove:
-z
:comprimi
-v
:dettaglia l'output
-h
:leggibile dall'uomo
2. Copia/Sincronizza directory sul computer locale
Per trasferire tutti i file dalla directory locale SRC alla directory DEST, eseguire il comando rsync con l'opzione -zavh
.
Supponendo che tu voglia copiare la directory home dell'utente 'linoxide' denominata '/home/linoxide' nella cartella '/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
Dove:
-a
:archivia i dati durante il processo di copia/sincronizzazione
Puoi verificare se il comando rsync ha avuto successo o meno? Esegui il comando seguente:
$ 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 su ssh con una porta specifica
Puoi usare ssh (secure shell) per copiare/sincronizzare i dati, i tuoi dati verranno trasferiti in una connessione sicura con crittografia. Nessuno può leggere i tuoi dati mentre vengono trasferiti su Internet. Quando si utilizza il comando rsync, è necessario fornire la password utente/root per eseguire l'attività particolare. L'utilizzo dell'opzione SSH invierà i tuoi accessi in modo crittografato in modo che la tua password sia al sicuro.
Copia un file da un remoto in locale con una porta ssh specifica. Per specificare un protocollo con il comando rsync, devi usare -e
opzione con il nome del protocollo che desideri utilizzare.
Ad esempio, il seguente comando rsync copierà il file 'deploy.yaml' tramite una shell remota da una macchina remota nella directory home dell'utente '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. Copia/Sincronizza file e directory dalla macchina locale alla macchina remota
Supponendo di voler copiare/sincronizzare la cartella 'test-data' nella directory home dell'utente 'linoxide' nell'host locale nella directory home di una macchina remota '[email protected]', eseguire il 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
Dove:
-r
:copia ricorsiva
5. Copia/Sincronizza file e directory dalla macchina remota alla macchina locale
Il comando rsync ti aiuta a trasferire un "documento" di directory remota da copiare nel tuo host locale.
Supponendo che tu voglia copiare/sincronizzare file/directory da un host remoto '[email protected]' nella home directory dell'utente 'linoxide'.
Ad esempio:
$ 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. Opzioni Rsync -include e -exclude
Queste due opzioni ci consentono di includere ed escludere file specificando parametri con queste opzioni ci aiutano a specificare quei file o directory che desideri includere nella sincronizzazione ed escludere file e cartelle con cui non desideri essere trasferiti.
Qui in questo esempio, il comando rsync includerà solo quei file e directory che iniziano con 'k' ed escluderà tutti gli altri file e directory.
$ 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. Imposta la dimensione massima dei file
È possibile specificare la dimensione massima del file da trasferire o sincronizzare. Puoi farlo con l'opzione '--max-size'.
Nell'esempio seguente, la dimensione massima del file è 200k, quindi questo comando trasferirà solo i file uguali o inferiori 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. Elimina i file di origine dopo il trasferimento riuscito
Ora, supponiamo che tu abbia un server web e un server di backup dei dati, hai creato un backup giornaliero e lo hai sincronizzato con il tuo server di backup, ora non vuoi mantenere quella copia locale del backup nel tuo server web. Quindi, aspetterai il completamento del trasferimento e quindi eliminerai manualmente il file di backup locale? Ovviamente no. Questa eliminazione automatica può essere eseguita utilizzando l'opzione '--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
Esegui di nuovo il comando 'ls', puoi vedere che il file 'deploy.yaml' è stato eliminato su SRC.
$ ls
computer-networking.pdf document k8s.yaml kuber kubernetes.yaml
9. Trova la differenza di file e directory tra SRC e DEST
Per trovare qualsiasi differenza nei file delle directory tra SRC e DEST, puoi eseguire il comando rsync con l'opzione '-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. Limita la larghezza di banda
Puoi impostare la limitazione della larghezza di banda durante l'esecuzione del comando rsync con l'opzione '--bwlimit=
Supponendo che tu voglia limitare la velocità di trasferimento dei dati a 300 KB/s, esegui il 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. Riprendi il trasferimento in caso di errore in scp
A volte, è necessario trasferire un file molto grande tramite il comando scp ma si è verificato un errore durante la copia e non è stato possibile riavviare il trasferimento utilizzando il comando scp a causa delle grandi dimensioni del file e del consumo di tempo.
In questa situazione, puoi usare il comando rsync per iniziare a copiare il file da dove ha ottenuto l'errore. Ad esempio, copiare un file ISO di grandi dimensioni nella directory home sull'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
Il processo è stato terminato dall'utente. A quel tempo, il 32% del file è stato trasferito. Ora puoi continuare il lavoro corrente eseguendo 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. Visualizza i progressi durante il trasferimento dei dati
Se vuoi vedere l'avanzamento del trasferimento durante l'esecuzione del comando rsync, puoi utilizzare l'opzione '--progress'.
Mostrerà i file e il tempo rimanente per completare la copia.
Ad esempio:
$ 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
Conclusione
In questo tutorial, abbiamo imparato come usare il comando rsync con alcuni esempi per copiare o sincronizzare file/directory.
Grazie per la lettura e per favore lascia il tuo suggerimento nella sezione commenti qui sotto.