Ricerca nel sito web

16 esempi pratici di comando Rsync in Linux


Rsync (Remote Sync) è il comando più comunemente utilizzato per copiare e sincronizzare file e directory in remoto e localmente nei sistemi Linux/Unix.

Con l'aiuto del comando rsync, puoi copiare e sincronizzare i tuoi dati in remoto e localmente su directory, dischi e reti, eseguire backup dei dati ed eseguire il mirroring tra due macchine Linux.

Questo articolo spiega 16 usi di base e avanzati del comando rsync per trasferire i tuoi file in remoto e localmente su 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 file efficiente: rsync utilizza un algoritmo di trasferimento delta, il che significa che trasferisce solo le differenze tra file di origine e destinazione, riducendo significativamente la quantità di dati trasferiti, rendendolo efficiente per la sincronizzazione di file o directory di grandi dimensioni.
  • Sincronizzazione file remota: rsync supporta trasferimenti di file sia locali che remoti su SSH, consentendo la sincronizzazione tra sistemi locali e remoti o il mirroring di directory su più macchine.
  • Backup incrementali: rsync è particolarmente adatto per i backup incrementali, poiché crea e aggiorna i backup in modo efficiente trasferendo solo file nuovi o modificati.
  • Preserva le autorizzazioni dei file: rsync può preservare vari attributi dei file, come autorizzazioni, proprietà, timestamp e collegamenti simbolici, garantendo che i file copiati mantengano le loro caratteristiche originali nella destinazione.
  • Controllo della larghezza di banda: rsync ti consente di limitare l'utilizzo della larghezza di banda durante i trasferimenti di file, poiché utilizza il metodo di compressione e decompressione durante l'invio e la ricezione di dati su entrambe le estremità.
  • Più veloce: rsync può essere più veloce di scp (Secure Copy) per il trasferimento di file, soprattutto quando si sincronizzano directory di grandi dimensioni o quando si ha a che fare con file che sono già stati parzialmente trasferiti o esistono nella destinazione.

Sintassi del comando Rsync

Il comando rsync segue la seguente sintassi:

rsync [OPTIONS] SOURCE DESTINATION

Ecco una spiegazione dei diversi componenti e opzioni utilizzati con i comandi rsync:

  • -v – Output dettagliato, che mostra informazioni dettagliate sul trasferimento.
  • -r – copia i dati in modo ricorsivo (ma non conserva timestamp e autorizzazione durante il trasferimento dei dati.
  • -a – modalità archivio, che consente di copiare file in modo ricorsivo e preserva anche collegamenti simbolici, autorizzazioni di file, proprietà di utenti e gruppi e timestamp.
  • -z – Comprimi i file durante il trasferimento per ridurre l'utilizzo della rete.
  • -h – numeri di output leggibili dall'uomo in un formato leggibile dall'uomo.
  • -P – Mostra l'avanzamento durante il trasferimento.
  • SOURCE – Specifica i file di origine o la directory 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. Similmente all'origine, può essere un percorso locale o una posizione remota.

Installa Rsync nel sistema Linux

Possiamo installare il pacchetto rsync con l'aiuto del seguente gestore di pacchetti secondo la 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 il file localmente

Per copiare o sincronizzare un file localmente, puoi utilizzare il seguente comando che sincronizzerà un singolo file su un computer locale da una posizione a un'altra posizione.

In questo esempio, il nome file 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 sopra, puoi vedere che se la destinazione non esiste già, rsync creerà automaticamente una directory per la destinazione.

2. Copia/Sincronizza la directory localmente

Il seguente comando trasferirà o sincronizzerà tutti i file da una directory a una directory diversa nella stessa macchina.

In questo esempio, /root/rpmpkgs contiene alcuni file del pacchetto RPM e desideri che la directory venga copiata nella 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. Copiare una directory dal server locale al server remoto

Per copiare una directory da un server locale a un server remoto, è possibile utilizzare il comando seguente, che sincronizzerà una directory da un computer locale a uno remoto.

Ad esempio, se nel tuo computer locale è presente una cartella "rpmpkgs " che contiene alcuni pacchetti RPM e se desideri che il contenuto di quella directory locale venga inviato a un server remoto, è possibile utilizzare il seguente comando.

rsync -avzh /root/rpmpkgs [email :/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 '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. Copiare una directory dal server remoto al server 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 nel tuo computer locale in /tmp/myrpms.

rsync -avzh [email :/root/rpmpkgs /tmp/myrpms

[email '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 su SSH

Con rsync, possiamo utilizzare SSH (Secure Shell) per il trasferimento dei dati, utilizzando il protocollo SSH durante il trasferimento dei nostri dati puoi essere certo che i tuoi dati vengono trasferiti in una connessione protetta con crittografia in modo che nessuno possa leggere i tuoi dati mentre vengono trasferiti via cavo su Internet.

Inoltre, quando utilizziamo rsync dobbiamo fornire la password utente/root per eseguire quella particolare attività, quindi utilizzando SSH invierà i tuoi dati di accesso in modo crittografato in modo che la tua password sia al sicuro.

Per utilizzare rsync su SSH, puoi utilizzare l'opzione -e per specificare il comando della shell remota, che in genere è 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, puoi specificare un protocollo con rsync utilizzando l'opzione “-e” con il nome del protocollo che desideri utilizzare.

In questo esempio utilizzeremo "ssh " con l'opzione "-e" ed eseguiremo il trasferimento dei dati.

rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp

[email '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 utilizzando SSH, puoi sfruttare il seguente comando come mostrato.

rsync -avzhe ssh backup.tar.gz [email :/backups/

[email '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 i progressi durante il trasferimento dei dati con Rsync

Per mostrare l'avanzamento durante il trasferimento dei dati da una macchina a un'altra macchina, possiamo utilizzare l'opzione '--progress', che visualizza i file e il tempo rimanente per completare il trasferimento.

rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs

[email '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 estensione particolare con Rsync

Per includere file o pattern specifici durante un'operazione di rsync, puoi utilizzare l'opzione --include con un'estensione che corrisponda 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 /path/to/source/ durante il trasferimento.

10. Escludi file con estensione particolare con Rsync

Allo stesso modo, per escludere un'estensione specifica durante un'operazione di rsync, puoi utilizzare l'opzione --exclude con un modello di caratteri jolly.

rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/

Nell'esempio fornito, rsync escluderà i file con l'estensione specificata (*.ext) durante il trasferimento, includendo tutti gli altri file e directory.

11. Includi ed escludi file con Rsync

Per includere ed escludere file o modelli specifici durante un'operazione di rsync, puoi utilizzare entrambe le opzioni --include e --exclude con modelli di caratteri jolly appropriati.

Queste due opzioni ci consentono di includere ed escludere i file specificando i parametri. Queste opzioni ci aiutano a specificare i file o le directory che desideri includere nella sincronizzazione ed escludere file e cartelle con il quale non vuoi essere trasferito.

In questo esempio, il comando rsync includerà solo i file e le directory che iniziano con 'R' ed escluderà tutti gli altri file e directory.

rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm

12. Utilizzo dell'opzione –delete con Rsync

Se un file o una directory non esiste nell'origine, ma esiste già nella destinazione, potresti voler eliminare il file/directory esistente nella destinazione durante la sincronizzazione.

Possiamo usare l'opzione '--delete' per eliminare i file che non sono presenti nella directory di origine.

L'origine 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 :/var/lib/rpm/ /root/rpm/

[email '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

La destinazione ha il nuovo file chiamato test.txt durante la sincronizzazione con l'origine con l'opzione '–delete', ha rimosso il file test.txt .

13. Imposta il limite di trasferimento file con Rsync

Puoi specificare la dimensione massima del file da trasferire o sincronizzare. Puoi farlo con l'opzione “--max-size”. In questo esempio, la dimensione massima del file è 200k, quindi questo comando trasferirà solo i file uguali o inferiori a 200k.

rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm

[email '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 di avere il server web principale e un server di backup dei dati, di aver creato un backup giornaliero e di averlo sincronizzato con il server di backup, ma ora non vuoi conservare quella copia locale del backup nel tuo server web.

Quindi, aspetterai il completamento del trasferimento e poi eliminerai manualmente il file di backup locale? Ovviamente no. Questa eliminazione automatica può essere eseguita utilizzando l'opzione "--remove-source-files".

rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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. Eseguire un test con Rsync

Se sei un principiante che usa rsync e non sai cosa farà esattamente il tuo comando. Rsync potrebbe davvero rovinare le cose nella cartella di destinazione e quindi annullare 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 mostra esattamente lo stesso che desideri, puoi rimuovere '--dry-run ' dal tuo comando ed eseguilo sul terminale.

rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/

[email '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. Rsync imposta il limite di larghezza di banda e trasferisce il file

Puoi impostare il limite di larghezza di banda durante il trasferimento dei dati da un computer a un altro con l'aiuto dell'opzione "--bwlimit". Questa opzione ci aiuta a limitare la larghezza di banda I/O.

rsync --bwlimit=100 -avzhe ssh  /var/lib/rpm/  [email :/root/tmprpm/
[email '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 desideri esplicitamente sincronizzare l'intero file, utilizza 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 sulle sue capacità. Per un'ulteriore esplorazione delle sue ampie opzioni e funzionalità, ti incoraggio a fare riferimento alle pagine manuali complete (pagine man) disponibili.