GNU/Linux >> Linux Esercitazione >  >> Linux

17 utili esempi di comandi rsync (sincronizzazione remota) in Linux

Come suggerisce il nome, il comando rsync viene utilizzato per sincronizzare (o copiare) file e directory in locale e in remoto. Una delle caratteristiche importanti di rsync è che funziona su "algoritmo di trasferimento delta ”, significa che sincronizzerà o copierà solo le modifiche dall'origine alla destinazione invece di copiare l'intero file che alla fine ridurrà la quantità di dati inviati sulla rete. I fanatici di Linux generalmente usano il comando rsync per gestire le attività quotidiane di backup, mirroring e ripristino. Utilizza una shell remota come SSH durante la sincronizzazione dei file dalla macchina locale alla macchina remota e qualsiasi utente nel sistema può utilizzare il comando rsync in quanto non richiede i privilegi di root o sudo..

In questo articolo discuteremo 17 utili esempi di comandi rsync in Linux, questi esempi aiuteranno specialmente i principianti di Linux a gestire le loro attività di sincronizzazione, mirroring e backup in modo più efficiente.

Il comando Rsync è disponibile per tutti i sistemi operativi UNIX e Linux. Quando eseguiamo un'installazione minima di CentOS e RHEL OS, il pacchetto rsync non fa parte dell'installazione predefinita, quindi per installare rsync su CentOS e RHEL, esegui il comando yum sottostante

~]# yum install rsync -y

Nei sistemi operativi Debian Like (Ubuntu e Linux Mint) usa il comando apt di seguito per installare lo strumento rysnc,

~]# apt install rsync -y

Sintassi del comando rsync:

Sincronizzazione locale:# rsync {opzioni} {Sorgente} {Destinazione}

Pull sincronizzazione remota:# rsync {opzioni}  @: 

Push di sincronizzazione remota:# rsync       @:

Di seguito sono elencate alcune delle opzioni comunemente utilizzate nel comando rsync:

  • -v, –verbose                             Output dettagliato
  • -q, –quiet                                 sopprime l'output del messaggio
  • -a, –archive                             file di archivio e directory durante la sincronizzazione ( -a uguale alle seguenti opzioni -rlptgoD)
  • -r, –ricorsivo                          sincronizza file e directory in modo ricorsivo
  • -b, –backup                             esegui il backup durante la sincronizzazione
  • -u, –update                             non copiare i file dall'origine alla destinazione se i file di destinazione sono più recenti
  • -l, –links                                  copia i collegamenti simbolici come collegamenti durante la sincronizzazione
  • -n, –dry-run                            esegui una corsa di prova senza sincronizzazione
  • -e, –rsh=COMMAND            menziona la shell remota da utilizzare in rsync
  • -z, –compress                         comprime i dati del file durante il trasferimento
  • -h, –leggibile dall'uomo            visualizza i numeri di output in un formato leggibile dall'uomo
  • –avanzamento                                mostra l'avanzamento della sincronizzazione durante il trasferimento

Passiamo agli utili esempi del comando rsync

Esempio:1) Copia o sincronizza file in locale (rsync -zvh)

Supponiamo di voler copiare un file dalla directory home dell'utente pkumar alla cartella /opt/back, eseguire il comando rsync sottostante

[[email protected] ~]# rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes  received 35 bytes  2.73M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

In precedenza abbiamo usato opzioni come -z per la compressione, -v per output dettagliato e -h per output leggibile dall'uomo.

Esempio:2) Copia o sincronizza la directory in locale (rsync -zavh)

Supponiamo di voler copiare o sincronizzare la home directory dell'utente pkumar nella cartella /opt/backup, eseguire il comando rsync seguente con le opzioni -zavh ,

[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup
sending incremental file list
pkumar/
pkumar/.bash_logout
pkumar/.bash_profile
pkumar/.bashrc
pkumar/OpenStack-Networking.pdf

sent 4.09M bytes  received 96 bytes  8.19M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

Verifichiamo se la directory è stata copiata o meno, esegui il comando seguente

[[email protected] ~]# ls -ld /opt/backup/*
-rwx------. 1 root   root   6153239 Apr  7 00:25 /opt/backup/OpenStack-Networking.pdf
drwx------. 2 pkumar pkumar      90 Apr  7 00:25 /opt/backup/pkumar
[[email protected] ~]#

Come possiamo vedere, la directory "pkumar" viene creata nella cartella di destinazione e anche il suo contenuto viene copiato. Nell'esempio sopra, se si usa trail / dopo la cartella di origine (/home/pkumar/), il comando rsync non creerà la directory pkumar sulla destinazione ma copierà solo il contenuto.

[[email protected] ~]# rsync -zavh /home/pkumar/ /opt/backup

Esempio:3) Copia file e directory ricorsivamente in locale (rsync -zrvh o rsync -zavh)

Supponiamo di avere più file e directory all'interno della home directory dell'utente pkumar, utilizzare il comando rsync di seguito per copiare file e directory in modo ricorsivo, utilizzare l'opzione -a o -r per copiare file e directory in modo ricorsivo.

Nota :nel comando rsync -a opzione viene utilizzata per l'archiviazione durante la copia o la sincronizzazione e, oltre all'archiviazione, viene utilizzata anche un'opzione per quanto segue:

  • copia ricorsivamente file e directory
  • copia i link simbolici come link simbolici
  • conserva le autorizzazioni
  • gruppo di conservazione
  • conserva il tempo di modifica
  • preserva la proprietà
[[email protected] ~]# rsync -zrvh /home/pkumar /opt/backup
or
[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup

Esempio:4) Copia o sincronizza file e directory dal sistema locale a quello remoto

Supponiamo di voler copiare la cartella “/home/pkumar/techi ” da macchina locale a macchina remota (192.168.1.29) sotto /opt

[[email protected] ~]# rsync -zarvh /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
…………………………………………………………
techi/OTRS/
techi/OTRS/Database-Selection-OTRS-Installation-CentOS7.jpg
techi/OTRS/Install-OTRS-Accept-License.png
techi/OTRS/Install-OTRS-CentOS7-RHEL7.jpg
techi/OTRS/mysql-secure-installation-centos7-part2.jpg

sent 34.85M bytes  received 2.65K bytes  6.34M bytes/sec
total size is 37.77M  speedup is 1.08
……………………………………………………………
[[email protected] ~]#

Esempio:5) Copia o sincronizza file e directory dalla macchina remota al sistema locale

Supponiamo di voler copiare file e directory dalla macchina remota (192.168.1.29) al nostro sistema locale, nell'esempio seguente sto copiando la cartella remota “/opt/rpms_db ” nel mio computer locale in /tmp cartella

[[email protected] ~]# rsync -zarvh [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.07M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

Il comando precedente creerà automaticamente una cartella "rpms_db" nella cartella /tmp nella nostra macchina locale.

[[email protected] ~]# ls -l /tmp/
total 8
-rwx------. 1 root root  827 Apr  6 12:54 ks-script-avmuxw
drwxr-xr-x. 2 root root 4096 Apr  7 01:42 rpms_db
-rw-------. 1 root root    0 Apr  6 12:35 yum.log
[[email protected] ~]# ls -l /tmp/rpms_db/
total 16028
……………………………………
-rw-r--r--. 1 root root 2844028 Nov 12 09:28 httpd-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root   92504 Nov 12 09:28 httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root 2558136 Nov 12 09:44 postfix-2.10.1-7.el7.x86_64.rpm
-rw-r--r--. 1 root root   17404 Nov 12 09:44 pytalloc-2.1.13-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  696472 Nov 12 09:46 samba-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 5070800 Nov 12 09:46 samba-client-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  210984 Nov 12 10:19 samba-common-4.8.3-4.el7.noarch.rpm
-rw-r--r--. 1 root root  167512 Nov 12 09:46 samba-common-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  458380 Nov 12 09:46 samba-common-tools-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  282332 Nov 12 09:46 samba-libs-4.8.3-4.el7.x86_64.rpm
……………………………………
[[email protected] ~]#

Esempio:6) Specificare la shell remota durante la sincronizzazione (rsync -e ssh)

Nel comando rsync possiamo specificare la shell remota come ssh durante la sincronizzazione, supponiamo di voler utilizzare la comunicazione sicura tra la macchina di origine e di destinazione tramite rsync, quindi dovremmo usare ssh come shell remota, l'esempio è mostrato di seguito

[[email protected] ~]# rsync -zarvh -e ssh  [email protected]:/opt/rpms_db  /tmp
[email protected]'s password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

Esempio:7) Visualizza l'avanzamento della sincronizzazione nell'output del comando rsync

Se vuoi vedere l'avanzamento della sincronizzazione o della copia nel comando rsync, usa "–progress ", l'esempio è mostrato di seguito

[[email protected] ~]# rsync -avh --progress [email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………………………………………………..
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
          2.84M 100%   35.22MB/s    0:00:00 (xfr#6, to-chk=18/25)
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
         92.50K 100%    1.13MB/s    0:00:00 (xfr#7, to-chk=17/25)
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
          2.56M 100%   14.44MB/s    0:00:00 (xfr#17, to-chk=7/25)
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
        696.47K 100%    3.71MB/s    0:00:00 (xfr#19, to-chk=5/25)
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
          5.07M 100%   19.90MB/s    0:00:00 (xfr#20, to-chk=4/25)
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
        210.98K 100%  844.42kB/s    0:00:00 (xfr#21, to-chk=3/25)
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
        167.51K 100%  667.70kB/s    0:00:00 (xfr#22, to-chk=2/25)
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
        458.38K 100%    1.77MB/s    0:00:00 (xfr#23, to-chk=1/25)
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm
        282.33K 100%    1.09MB/s    0:00:00 (xfr#24, to-chk=0/25)

sent 484 bytes  received 16.38M bytes  3.64M bytes/sec
total size is 16.37M  speedup is 1.00
[[email protected] ~]#

Leggi anche: 14 esempi di comandi SCP per trasferire file in modo sicuro in Linux

Esempio:8) Copia la struttura della directory senza copiare i file

Ci sono alcuni scenari in cui vogliamo copiare la struttura delle directory saltando i file solo dalla macchina locale a quella remota o viceversa.

Supponiamo di voler copiare la struttura della directory di "/home/pkumar" dalla macchina locale alla macchina remota (192.168.1.29) nella cartella /opt.

[email protected] ~]# rsync -av -f"+ */" -f"- *" /home/pkumar [email protected]:/opt/
[email protected]'s password:
building file list ... done
………………………………………………
pkumar/

sent 43 bytes  received 19 bytes  17.71 bytes/sec
total size is 0  speedup is 0.00
[[email protected] ~]#

Esempio:9) Riprendi il trasferimento di file di grandi dimensioni dopo aver fallito in scp

Ci sono alcuni scenari nel profilo amministratore di Linux in cui abbiamo iniziato a copiare un file più grande usando il comando scp, ma è stato terminato nel mezzo e non possiamo permetterci di ricominciare a copiarlo usando scp a causa delle sue grandi dimensioni e del suo consumo di tempo.

Quindi in questa situazione il comando rsync può essere utilizzato in quanto può iniziare a copiare il file da dove era stato interrotto o terminato, o in altre parole rsync può trasferire i file che sono parzialmente copiati utilizzando il comando scp. L'esempio è mostrato di seguito,

[[email protected] ~]# scp [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso                   28%  526MB  61.5MB/s   00:21 ETA
^CKilled by signal 2.
[[email protected] ~]#
[[email protected] ~]# rsync -P --rsh=ssh [email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso
  1,921,843,200 100%   18.47MB/s    0:01:39 (xfr#1, to-chk=0/1)
[[email protected] ~]#

Esempio:10) Elimina i file a destinazione se non è presente nell'origine (–elimina)

Se hai già sincronizzato i file dall'origine alla destinazione e dall'origine hai eliminato i file, puoi forzare il comando rsync per eliminare i file sulla destinazione utilizzando l'opzione –delete, l'esempio è mostrato di seguito

[[email protected] ~]# rsync -avz --delete /opt/rpms_db [email protected]:/tmp/rpms_db
[email protected]'s password:
sending incremental file list
deleting rpms_db/apr-util-1.5.2-6.el7.x86_64.rpm
deleting rpms_db/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpms_db/

sent 862 bytes  received 105 bytes  276.29 bytes/sec
total size is 15,947,152  speedup is 16,491.37
[[email protected] ~]#

Esempio:11) Limita la dimensione del trasferimento file (–max-size)

Se non desideri trasferire o copiare file di grandi dimensioni utilizzando rsync, utilizza l'opzione '–max-size={specify-size-here}' , supponiamo di non voler trasferire i file la cui dimensione è superiore a 500K,

Nota:per specificare la dimensione in MB utilizzare M e per GB utilizzare G.

[[email protected] ~]# rsync -avz --max-size='500K' /opt/rpms_db [email protected]:/tmp

Esempio:12) Non sincronizzare/copiare il file modificato a destinazione

Ci sono alcuni scenari in cui abbiamo modificato i file a destinazione e non vogliamo sovrascrivere i file modificati dall'origine durante la sincronizzazione, quindi questo può essere ottenuto facilmente usando -u opzione nel comando rsync

[[email protected] ~]# rsync -avzu [email protected]:/opt/techi /home/pkumar/techi
[email protected]'s password:
receiving incremental file list

sent 37 bytes  received 4,960 bytes  1,427.71 bytes/sec
total size is 37,771,649  speedup is 7,558.87
[[email protected] ~]#

Esempio:13) Rimuovere i file dal sorgente dopo la sincronizzazione (–remove-source-files)

Supponiamo di voler eliminare i file dall'origine una volta completata la sincronizzazione utilizzando il comando rsync. Nell'esempio seguente, cartella dal sistema locale "/home/pkumar/techi.tgz ” viene sincronizzato con il sistema remoto (192.168.1.29), una volta completata la sincronizzazione, cancellerà il file dalla sorgente.

[[email protected] ~]# rsync --remove-source-files -zvh /home/pkumar/techi.tgz [email protected]:/opt
[email protected]'s password:
techi.tgz
sent 597 bytes  received 43 bytes  182.86 bytes/sec
total size is 518  speedup is 0.81
[[email protected] ~]#
[[email protected] ~]# ls -l /home/pkumar/techi.tgz
ls: cannot access /home/pkumar/techi.tgz: No such file or directory
[[email protected] ~]#

Esempio:14) Comando dry run rsync prima della sincronizzazione effettiva

Ci possono essere alcune situazioni in cui non si tratta del comportamento del comando rsync, quindi in questi casi è meglio eseguire il dry run di rsync

[[email protected] ~]# rsync --dry-run --remove-source-files -zvh /home/pkumar/projects.tar  [email protected]:/opt
[email protected]'s password:
projects.tar

sent 51 bytes  received 19 bytes  7.37 bytes/sec
total size is 981.24M  speedup is 14,017,682.29 (DRY RUN)
[[email protected] ~]#

Esempio:15) Includi ed escludi file durante la sincronizzazione con rsync

Ci sono alcune situazioni in cui vogliamo copiare o sincronizzare file e directory di tipo specifico e vogliamo escludere file o directory di tipo specifico. Il comando Rsync supporta sia le opzioni di inclusione che di esclusione.

Nell'esempio seguente vuoi copiare i file di tipo pdf e rpm ed escludere i tipi di file png.

[[email protected] ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
techi/postfix-2.10.1-7.el7.x86_64.rpm

sent 9,469,912 bytes  received 96 bytes  2,705,716.57 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Esempio:16) Limita la velocità di trasferimento dei dati in rsync (–bwlimit=)

Nel comando rsync possiamo impostare il limite di larghezza di banda per il trasferimento dei dati da una macchina all'altra, utilizzare '–bwlimit= ' opzione nel comando rsync per limitare la velocità di trasferimento dei dati.

Supponiamo di voler impostare la velocità di trasferimento dati massima (velocità) di 600 KB/s con rsync, l'esempio è mostrato di seguito

[[email protected] ~]# rsync -avz --progress --bwlimit=600 /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
6,153,239 100%  910.02kB/s    0:00:06 (xfr#1, to-chk=6/8)
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
2,844,028 100%  615.28kB/s    0:00:04 (xfr#2, to-chk=5/8)
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
92,504 100%  507.51kB/s    0:00:00 (xfr#3, to-chk=4/8)
techi/pkumar-2.png
0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/8)
techi/pkumar-3.png
0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=2/8)
techi/pkumar.png
0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/8)
techi/postfix-2.10.1-7.el7.x86_64.rpm
2,558,136 100%  594.80kB/s    0:00:04 (xfr#7, to-chk=0/8)

sent 9,470,087 bytes  received 153 bytes  485,653.33 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Esempio:17) Visualizza la differenza di file e directory tra origine e destinazione

Usa "-i ” opzione nel comando rsync per elencare la differenza di file e directory tra origine e destinazione. L'esempio è mostrato di seguito

[[email protected]teway ~]# rsync -avzi /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
.d..t...... techi/
<f.st...... techi/projects.txt

sent 438 bytes  received 45 bytes  138.00 bytes/sec
total size is 11,648,064  speedup is 24,116.07
[[email protected] ~]#

Come per l'output del comando sopra, c'è una differenza nel file chiamato "projects.txt" sulla destinazione. Di seguito è riportato il significato delle parole chiave nell'output sopra,

  • d:indica la modifica nel file di destinazione
  • f:indica un file
  • t:indica la modifica dei timestamp
  • s:indica il cambio di taglia

Questo è tutto da questo tutorial, nel caso in cui questi esempi tu capisca il comando rsync in modo più efficiente, condividi il tuo feedback e commenti

Leggi anche17 utili comandi tar con esempi pratici in Linux

Leggi anche :Come ruotare e comprimere i file di registro in Linux con Logrotate


Linux
  1. Comando Rsync:20 utili esempi in Linux

  2. 12 utili esempi di comandi Wget in Linux

  3. ls Command in Linux:17 esempi utili spiegati

  4. Esempi pratici di comando rsync in Linux

  5. 14 Utili esempi di comandi "cat" in Linux

15 esempi utili di comando touch nel sistema Linux

15 esempi pratici di comando Rsync in Linux

9 Esempi utili di Touch Command in Linux

10 esempi utili del comando di ordinamento in Linux

Esempi di comandi Linux rsync

12 Esempi utili di comandi data di Linux