Comando rsync di Linux: opzioni ed esempi d'uso

Informativa sull'affiliazione v3.1
Informativa sull'affiliazione v3.2 (solo mobile)
Ambiente di testFamiglia RHELAlmaLinux 9.8account rootVerificato il 07/10/2026

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 destinazione

Come 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.png

Esegui 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.84

Con 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

OpzioneDescrizione
-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
-PCome --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'
--deleteElimina dalla destinazione i file che non esistono più nell'origine (serve -r o -a)
--exclude=PATTERNEsclude file e directory che corrispondono al modello--exclude '*.tmp' --exclude 'cache/'
--include=PATTERNMesso prima di --exclude, tiene solo quel modello fuori dall'esclusione
--max-size=SIZENon trasferisce file più grandi della dimensione indicata (--min-size per quelli più piccoli)--max-size=3M --min-size=10k
--bwlimit=RATELimita la velocità di trasferimento, in KiB/s
--statsStampa il numero di file e le statistiche di trasferimento
Simulatore del comando rsyncrsync 3.2.7
[root@server work]#
Funziona solo nel tuo browser e non tocca file reali. La cartella www è l'origine e la cartella backup è il backup precedente. Digita rsync con opzioni diverse e controlla il risultato con ll, cat e diff. Gli indirizzi remoti (user@host:percorso) sono accettati solo per la sintassi; non viene fatta alcuna connessione. Premi [Start over] per annullare le modifiche. Usa i tasti ↑↓ per richiamare i comandi precedenti e digita uknew help per vedere i comandi disponibili.

✅ 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.

TipoMetodo SSH (:)Metodo del demone rsync (::)
Sintassirsync -opzioni user@host:/percorso /percorso/localersync -opzioni host::modulo/percorso /percorso/locale
PortaPorta SSH (predefinita 22)873
CrittografiaCrittografato da SSHNessuna crittografia
AutenticazioneChiave SSH o passwordhosts allow in rsyncd.conf; account e password facoltativi
Configurazione lato serverNessuna (funziona appena l'accesso SSH funziona)Installare rsync-daemon, /etc/rsyncd.conf, aprire la porta 873
UsoBackup 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
Comando rsync: risultato da remoto a locale

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
Comando rsync: da remoto a locale, escludendo file e directory specifici

🔲 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 --reload

Nel 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 = 30

Dal 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_data

La 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/
Comando rsync: da remoto a locale con l'opzione delete
Comando rsync: da remoto a locale con le opzioni delete, include ed exclude

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/
Comando rsync: da remoto a locale, banda limitata a 100kb e avanzamento con -P

ℹ️ 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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 8   +   2   =