Rsync (Remote Sync) è il comando più comunemente utilizzato per copiare e sincronizzare file e directory in remoto così come localmente nei sistemi Linux/Unix.
Con l’aiuto del comando rsync, puoi copiare e sincronizzare i tuoi dati in remoto e localmente tra directory, dischi e reti, eseguire backup dei dati e specchiare tra due macchine Linux.
Questo articolo spiega 16 utilizzi di base e avanzati del comando rsync per trasferire i tuoi file in remoto e localmente nelle macchine basate su Linux. Non è necessario essere un utente root per eseguire il comando rsync.
Indice
Vantaggi del comando Rsync
Offre diversi vantaggi, tra cui:
- Trasferimento efficiente dei file – rsync utilizza un algoritmo di trasferimento delta, il che significa che trasferisce solo le differenze tra i file di origine e di destinazione, riducendo significativamente la quantità di dati trasferiti, rendendolo efficiente per la sincronizzazione di file o directory di grandi dimensioni.
- Sincronizzazione remota dei file – rsync supporta sia trasferimenti di file locali che remoti tramite SSH, consentendo la sincronizzazione tra sistemi locali e remoti o la replica di directory su più macchine.
- Backup incrementali – rsync è adatto per i backup incrementali, poiché crea e aggiorna i backup in modo efficiente trasferendo solo file nuovi o modificati.
- Preserva i permessi dei file – rsync può preservare vari attributi dei file, come i permessi, la proprietà, i timestamp e i collegamenti simbolici, garantendo che i file copiati mantengano le loro caratteristiche originali sulla destinazione.
- Controllo della larghezza di banda – rsync ti consente di limitare l’utilizzo della larghezza di banda durante il trasferimento dei file, poiché utilizza il metodo di compressione e decompressione durante l’invio e la ricezione dei dati su entrambi i lati.
- Più veloce – rsync può essere più veloce di scp (Copia Sicura) per il trasferimento dei file, specialmente quando sincronizza directory di grandi dimensioni o quando si tratta di file che sono già stati parzialmente trasferiti o esistono sulla destinazione.
Sintassi del Comando Rsync
Il comando rsync segue la seguente sintassi:
# rsync [OPTIONS] SOURCE DESTINATION
Ecco una spiegazione dei diversi componenti e delle opzioni utilizzate con i comandi rsync:
-v
– Output verboso, visualizza informazioni dettagliate sul trasferimento.-r
– copia i dati in modo ricorsivo (ma non preserva timestamp e permessi durante il trasferimento dei dati).-a
– modalità archivio, che consente di copiare file in modo ricorsivo e preserva anche collegamenti simbolici, permessi di file, proprietà utente e gruppo e timestamp.-z
– Comprimi i file durante il trasferimento per ridurre l’utilizzo della rete.-h
– leggibile dall’utente, output numeri in un formato leggibile dall’utente.-P
– Mostra il progresso durante il trasferimento.SOURCE
– Specifica il file o la directory di origine da trasferire, che può essere una posizione locale o remota.DESTINATION
– Specifica il percorso di destinazione in cui verranno copiati i file o le directory. Simile alla sorgente, può essere un percorso locale o una posizione remota.
Installare Rsync nel sistema Linux
Possiamo installare il pacchetto rsync con l’aiuto del seguente gestore di pacchetti in base alla tua distribuzione Linux.
$ sudo apt install rsync [On Debian, Ubuntu and Mint] $ sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] $ sudo emerge -a sys-apps/rsync [On Gentoo Linux] $ sudo apk add rsync [On Alpine Linux] $ sudo pacman -S rsync [On Arch Linux] $ sudo zypper install rsync [On OpenSUSE]
1. Copia/Sincronizza File in Locale
Per copiare o sincronizzare un file in locale, è possibile utilizzare il seguente comando che sincronizzerà un singolo file su una macchina locale da una posizione all’altra.
Qui in questo esempio, un file chiamato backup.tar deve essere copiato o sincronizzato nella cartella /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/ created directory /tmp/backups backup.tar.gz sent 224.54K bytes received 70 bytes 449.21K bytes/sec total size is 224.40K speedup is 1.00
Nell’esempio precedente, puoi vedere che se la destinazione non esiste già, rsync creerà automaticamente una directory per la destinazione.

2. Copia/Sincronizza Directory Localmente
Il seguente comando trasferirà o sincronizzerà tutti i file da una directory a un’altra directory nella stessa macchina.
In questo esempio, /root/rpmpkgs contiene alcuni file di pacchetti rpm e desideri che quella directory venga copiata all’interno della cartella /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/ sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.47M bytes received 96 bytes 2.32M bytes/sec total size is 3.74M speedup is 1.08

3. Copia di una Directory da Locale a Server Remoto
Per copiare una directory da un server locale a un server remoto, è possibile utilizzare il seguente comando, che sincronizzerà una directory da locale a una macchina remota.
Ad esempio, se c’è una cartella sul tuo computer locale “rpmpkgs” che contiene alcuni pacchetti RPM e se desideri che il contenuto di quella directory locale venga inviato a un server remoto, puoi utilizzare il seguente comando.
# rsync -avzh /root/rpmpkgs [email protected]:/root/ The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established. ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c. This key is not known by any other names Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts. [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 3.74M bytes received 96 bytes 439.88K bytes/sec total size is 3.74M speedup is 1.00

4. Copia di una Directory da Server Remoto a Locale
Questo comando ti aiuterà a sincronizzare una directory remota con una directory locale. In questo esempio, una directory /root/rpmpkgs che si trova su un server remoto viene copiata sul tuo computer locale in /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'s password: receiving incremental file list created directory /tmp/myrpms rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm sent 104 bytes received 3.49M bytes 997.68K bytes/sec total size is 3.74M speedup is 1.07

5. Rsync tramite SSH
Con rsync, possiamo utilizzare SSH (Secure Shell) per il trasferimento dei dati, utilizzando il protocollo SSH mentre trasferiamo i nostri dati puoi essere sicuro che i tuoi dati vengano trasferiti in una connessione sicura con crittografia in modo che nessuno possa leggere i tuoi dati mentre vengono trasferiti su Internet.
Inoltre, quando usiamo rsync, dobbiamo fornire l’utente/root password per completare quella particolare attività, quindi utilizzando l’opzione SSH invierà i tuoi accessi in modo crittografato in modo che la tua password sarà al sicuro.
Per utilizzare rsync su SSH, è possibile utilizzare l’opzione -e
per specificare il comando shell remoto, che è tipicamente ssh come mostrato.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Copia un file da un server remoto a un server locale con SSH
Per sincronizzare un file da un server remoto a un server locale, è possibile specificare un protocollo con rsync utilizzando l’opzione “-e” con il nome del protocollo che si desidera utilizzare.
Qui in questo esempio, utilizzeremo il “ssh” con l’opzione “-e” e effettueremo il trasferimento dei dati.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'s password: receiving incremental file list anaconda-ks.cfg sent 43 bytes received 1.10K bytes 325.43 bytes/sec total size is 1.90K speedup is 1.67

7. Copia un file da un server locale a un server remoto con SSH
Per sincronizzare un file da un server locale a un server remoto usando SSH, puoi sfruttare il seguente comando come mostrato.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'s password: sending incremental file list created directory /backups backup.tar.gz sent 224.59K bytes received 66 bytes 64.19K bytes/sec total size is 224.40K speedup is 1.00

8. Mostra il Progresso Durante il Trasferimento dei Dati con Rsync
Per mostrare il progresso durante il trasferimento dei dati da una macchina a un’altra, possiamo utilizzare l’opzione ‘--progress'
, che visualizza i file e il tempo rimanente per completare il trasferimento.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'s password: sending incremental file list rpmpkgs/ rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5) rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm 138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5) rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm 2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5) rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm 120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5) sent 3.74M bytes received 96 bytes 1.50M bytes/sec total size is 3.74M speedup is 1.00

9. Includi File con una Particolare Estensione con Rsync
Per includere file specifici o modelli durante un’operazione di rsync, puoi utilizzare l’opzione --include
con un’estensione che corrisponde a tutti i file.
# rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
Nell’esempio fornito, rsync includerà solo i file con estensione .txt
dalla directory /percorso/alla/fonte/ durante il trasferimento.
10. Escludi File con una Particolare Estensione con Rsync
Allo stesso modo, per escludere un’estensione specifica durante un’operazione di rsync, puoi utilizzare l’opzione --exclude
con un modello jolly.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
Ecco un esempio: rsync escluderà i file con l’estensione specificata (*.ext) durante il trasferimento, includendo tutti gli altri file e directory.
11. Includere ed Escludere File con Rsync
Per includere ed escludere file o modelli specifici durante un’operazione rsync, è possibile utilizzare le opzioni --include
e --exclude
con i relativi modelli jolly.
Queste due opzioni ci permettono di includere ed escludere file specificando i parametri. Queste opzioni ci aiutano a specificare i file o le directory che si desidera includere nella sincronizzazione ed escludere file e cartelle che non si desidera trasferire.
Qui, in questo esempio, il comando rsync includerà solo quei file e directory che iniziano con ‘R’
ed escluderà tutti gli altri file e directory.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Utilizzo dell’opzione –delete con Rsync
Se un file o una directory non esiste alla sorgente, ma esiste già alla destinazione, potresti voler eliminare quel file/directory esistente nella destinazione durante la sincronizzazione.
Possiamo utilizzare l’opzione ‘--delete
‘ per eliminare i file che non si trovano nella directory di origine.
La sorgente e la destinazione sono sincronizzate. Ora crea un nuovo file test.txt nella destinazione.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'s password: receiving incremental file list deleting test.txt ./ .dbenv.lock .rpm.lock Basenames Conflictname Dirnames Enhancename Filetriggername Group Installtid Name Obsoletename Packages Providename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.001 __db.002 __db.003 sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec total size is 71,151,616 speedup is 3.84
Il target ha il nuovo file chiamato test.txt quando sincronizzato con la sorgente con l’opzione ‘--delete
‘, ha rimosso il file test.txt.

13. Imposta il limite di trasferimento file con Rsync
Puoi specificare la dimensione massima Max del file da trasferire o sincronizzare. Puoi farlo con l’opzione “--max-size
”. Qui in questo esempio, la dimensione massima del file è 200k, quindi questo comando trasferirà solo i file che sono uguali o più piccoli di 200k.
# rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'s password: sending incremental file list created directory /root/tmprpm ./ .dbenv.lock .rpm.lock Conflictname Enhancename Filetriggername Group Installtid Name Obsoletename Recommendname Requirename Sha1header Sigmd5 Suggestname Supplementname Transfiletriggername Triggername __db.002 sent 129.52K bytes received 396 bytes 28.87K bytes/sec total size is 71.15M speedup is 547.66

14. Elimina automaticamente i file di origine dopo il trasferimento
Ora, supponiamo tu abbia il server web principale e un server di backup dei dati, hai creato un backup giornaliero e sincronizzato con il tuo server di backup, ma ora non vuoi mantenere quella copia locale del backup nel tuo server web.
Quindi, aspetterai il completamento del trasferimento e poi eliminerai manualmente quel file di backup locale? Certo che NO. Questa eliminazione automatica può essere fatta usando l’opzione ‘--remove-source-files
‘.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 795 bytes received 2.33K bytes 894.29 bytes/sec total size is 267.30K speedup is 85.40 [root@tecmint:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Fai una prova a secco con Rsync
Se sei un novizio che usa rsync e non sai esattamente cosa farà il tuo comando. Rsync potrebbe davvero combinare guai nella cartella di destinazione e poi fare un ripristino può essere un lavoro noioso.
L’uso di questa opzione non apporterà alcuna modifica ai file e mostrerà l’output del comando; se l’output corrisponde esattamente a ciò che si desidera fare, è possibile rimuovere l’opzione ‘--dry-run
‘ dal comando e eseguirlo sul terminale.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'s password: backup.tar.gz sent 50 bytes received 19 bytes 19.71 bytes/sec total size is 267.30K speedup is 3,873.97 (DRY RUN)

16. Impostare il limite di larghezza di banda di Rsync e trasferire file
È possibile impostare il limite di larghezza di banda durante il trasferimento dei dati da una macchina a un’altra con l’aiuto dell’opzione ‘--bwlimit
‘. Questa opzione ci aiuta a limitare la larghezza di banda dell’I/O.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'s password: sending incremental file list sent 324 bytes received 12 bytes 61.09 bytes/sec total size is 38.08M speedup is 113347.05
Inoltre, per impostazione predefinita, rsync sincronizza solo i blocchi e i byte modificati; se si desidera esplicitamente sincronizzare l’intero file, è possibile utilizzare l’opzione ‘-W‘ con esso.
# rsync -zvhW backup.tar /tmp/backups/backup.tar backup.tar sent 14.71M bytes received 31 bytes 3.27M bytes/sec total size is 16.18M speedup is 1.10
Conclusione
Questo conclude la nostra panoramica su rsync e le sue capacità. Per ulteriori esplorazioni delle sue ampie opzioni e funzionalità, vi incoraggio a fare riferimento alle dettagliate pagine del manuale (man pages) disponibili.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/