Comando rsync di Linux: opzioni ed esempi d'uso

Se ricopi ogni volta l'intera cartella per tenere allineati due server, il trasferimento ha la dimensione totale anche se è cambiato un solo file. Il comando rsync è l'abbreviazione di remote sync. Confronta origine e destinazione e invia solo i file diversi, e funziona allo stesso modo tra cartelle locali e tra server collegati via SSH. Questo articolo spiega l'uso di base, le opzioni ed esempi dei due metodi di connessione: SSH e il demone rsync.
L'output di questo articolo viene da rsync 3.2.7 su AlmaLinux 9.8. Se rsync non è installato, installalo con il gestore di pacchetti.
# famiglia RHEL
dnf -y install rsync
# famiglia Debian
apt -y install rsync✅ Uso di base
La sintassi di base è la seguente.
rsync -opzioni origine destinazioneCome con il comando cp, scrivi prima l'origine e poi la destinazione. Con una barra [/] alla fine dell'origine nella destinazione va solo il contenuto della cartella; senza, ci va la cartella stessa.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngEsegui di nuovo lo stesso comando e l'elenco dei file è vuoto, con i byte sent scesi a qualche centinaio. I file con stessa dimensione e ora di modifica vengono saltati.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Con il solo -r e senza -a le ore di modifica non vengono conservate, quindi alla volta successiva si inviano di nuovo gli stessi file. Quando sincronizzi cartelle, usa -a come base.
L'opzione -n mostra solo quali file cambierebbero, senza trasferire nulla, e l'output termina con [(DRY RUN)]. Le opzioni che cancellano file nella destinazione, come --delete, controllale prima con -n e poi eseguile davvero.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Opzioni del comando rsync & simulatore
| Opzione | Descrizione | |
|---|---|---|
| -a | --archiveCopia anche le sottodirectory e conserva permessi, proprietario, ora di modifica e link simbolici (come -rlptgoD) | |
| -v | --verboseStampa il nome di ogni file trasferito e i totali | |
| -z | --compressComprime i dati dei file durante il trasferimento | |
| -r | --recursiveCopia anche le sottodirectory (incluso in -a) | |
| -t | --timesConserva le ore di modifica (incluso in -a). È ciò che decide quali file saltare la volta successiva | |
| -n | --dry-runMostra solo i file che cambierebbero, senza trasferire, e segna la fine con (DRY RUN) | |
| -u | --updateSalta i file più recenti nella destinazione | |
| -h | --human-readableStampa i byte in K, M e G | |
| -P | Come --partial --progress. Mostra l'avanzamento per file e riprende i trasferimenti interrotti | |
| -i | --itemize-changesStampa cosa è cambiato in ogni file come codice>f+++++++++ file nuovo · >f.st...... dimensione e ora cambiate · *deleting eliminato | |
| -e | --rsh=COMMANDSpecifica la shell remota-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Elimina dalla destinazione i file che non esistono più nell'origine (serve -r o -a) | |
| --exclude=PATTERN | Esclude file e directory che corrispondono al modello--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Messo prima di --exclude, tiene solo quel modello fuori dall'esclusione | |
| --max-size=SIZE | Non trasferisce file più grandi della dimensione indicata (--min-size per quelli più piccoli)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Limita la velocità di trasferimento, in KiB/s | |
| --stats | Stampa il numero di file e le statistiche di trasferimento |
✅ Metodi di connessione: SSH e il demone rsync
Ci sono due modi per collegarsi a un server remoto. Un due punti [:] dopo l'host passa da SSH; un doppio due punti [::] si collega direttamente al demone rsync sulla porta 873.
| Tipo | Metodo SSH (:) | Metodo del demone rsync (::) |
|---|---|---|
| Sintassi | rsync -opzioni user@host:/percorso /percorso/locale | rsync -opzioni host::modulo/percorso /percorso/locale |
| Porta | Porta SSH (predefinita 22) | 873 |
| Crittografia | Crittografato da SSH | Nessuna crittografia |
| Autenticazione | Chiave SSH o password | hosts allow in rsyncd.conf; account e password facoltativi |
| Configurazione lato server | Nessuna (funziona appena l'accesso SSH funziona) | Installare rsync-daemon, /etc/rsyncd.conf, aprire la porta 873 |
| Uso | Backup e distribuzione tra server (la scelta predefinita) | Mirroring su rete interna senza distribuire account SSH |
🔲 Metodo SSH
Se raggiungi il server via SSH, funziona senza configurazioni lato server. Se la porta è diversa o usi un file della chiave, metti il comando ssh così com'è nell'opzione -e.
# locale → remoto
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# remoto → locale
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# porta SSH e file della chiave
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Per escludere certi file o directory, aggiungi --exclude una volta per modello, oppure raggruppa i modelli tra parentesi graffe e scrivili una volta sola.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Metodo del demone rsync
Il demone rsync consente l'accesso per modulo sulla porta 873 senza account SSH. Il traffico non è crittografato, quindi si usa tra server della stessa rete interna.
Su AlmaLinux 9 installa il pacchetto rsync-daemon e avvia il servizio. Sui server con firewalld apri la porta 873; sui server cloud aprila nel firewall della console. Il metodo xinetd usato su RHEL 8 e precedenti non c'è più nella 9.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadNel file di configurazione [/etc/rsyncd.conf] imposta nome del modulo, percorso e host consentiti. Con read only su yes, i client remoti possono solo scaricare.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Dal lato remoto, un doppio due punti da solo dopo l'host elenca i moduli; aggiungendo il nome del modulo si vedono i file al suo interno.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataLa copia usa la forma [host::modulo/percorso]. --delete elimina dalla destinazione i file che non sono nell'origine, e --include tiene fuori dall'esclusione solo gli elementi messi prima di --exclude.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

Su un server con SELinux attivo l'accesso al percorso del modulo può essere bloccato con [Permission denied (13)]. Nel test è passato dopo aver disattivato SELinux con [setenforce 0].
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see precedente errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit limita la velocità di trasferimento in KiB/s, e aggiungendo -P vedi anche l'avanzamento di ogni file. --max-size e --min-size trasferiscono solo i file entro l'intervallo di dimensioni indicato.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.