GNU/Linux >> Linux Esercitazione >  >> Linux

Esempi di Rsync per trasferire file in Linux

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.


Linux
  1. 25 Utili comandi find Esempi pratici in Linux

  2. 14 Esempi di comandi SCP per trasferire file in modo sicuro in Linux

  3. Come trasferire file in Linux con SCP e Rsync

  4. Esempi di comandi diff in Linux

  5. Linux equivalente a robocopy?

Comando Trova Linux con esempi pratici

lsof Command in Linux (10 esempi)

15 esempi pratici di comando Rsync in Linux

Esempi di comandi Linux rsync

lsof Command in Linux con esempi

Comando di comunicazione Linux con esempi