Come utilizzare il comando Rsync in Linux: 16 esempi pratici

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.

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.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/