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=
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 anche : 17 utili comandi tar con esempi pratici in Linux
Leggi anche :Come ruotare e comprimere i file di registro in Linux con Logrotate