rsync
è un’utilità a riga di comando veloce e versatile per sincronizzare file e directory tra due posizioni su una shell remota, o da/a un demone Rsync remoto. Fornisce un veloce trasferimento incrementale di file trasferendo solo le differenze tra la sorgente e la destinazione.
Rsync può essere usato per il mirroring dei dati, i backup incrementali, la copia di file tra sistemi e come sostituzione dei comandi scp
, sftp
e cp
.
Questo articolo spiega come usare rsync
attraverso esempi pratici e spiegazioni dettagliate delle opzioni più comuni rsync
.
Installazione di Rsync #
L’utilità rsync
è preinstallata nella maggior parte delle distribuzioni Linux e macOS. Se non hai rsync
installato sul tuo sistema, puoi facilmente installarlo usando il gestore dei pacchetti della tua distribuzione.
Installare Rsync su Ubuntu e Debian #
sudo apt install rsync
Installare Rsync su CentOS e Fedora #
sudo yum install rsync
Sintassi del comando Rsync #
Prima di andare a vedere come usare il comando rsync
, iniziamo rivedendo la sintassi di base.
Le espressioni dell’utilità rsync
hanno la seguente forma:
Local to Local: rsync ... ... DESTLocal to Remote: rsync ... ... HOST:DESTRemote to Local: rsync ... HOST:SRC...
-
OPTION
– Le opzioni rsync. -
SRC
– Directory sorgente. -
DEST
– Directory destinazione. -
USER
– Nome utente remoto. -
HOST
– Nome host remoto o indirizzo IP.
rsync
fornisce una serie di opzioni che controllano il comportamento del comando. Le opzioni più usate sono:
-
-a
,--archive
, modalità archivio, equivalente a-rlptgoD
. Questa opzione dice arsync
di sincronizzare le directory in modo ricorsivo, trasferire dispositivi speciali e a blocchi, conservare i collegamenti simbolici, i tempi di modifica, i gruppi, la proprietà e i permessi. -
-z
,--compress
. Questa opzione forzarsync
a comprimere i dati mentre vengono inviati alla macchina di destinazione. Usa questa opzione solo se la connessione alla macchina remota è lenta. -
-P
, equivalente a--partial --progress
. Quando si usa questa opzione,rsync
mostra una barra di progresso durante il trasferimento e mantiene i file parzialmente trasferiti. È utile quando si trasferiscono file di grandi dimensioni su connessioni di rete lente o instabili. -
--delete
. Quando si usa questa opzione,rsync
cancella i file estranei dalla posizione di destinazione. È utile per il mirroring. -
-q
,--quiet
. Usa questa opzione se vuoi sopprimere i messaggi non di errore. -
-e
. Questa opzione ti permette di scegliere una diversa shell remota. Per impostazione predefinita,rsync
è configurato per usare ssh.
Uso base di Rsync #
Il caso d’uso più basilare di rsync
è copiare un singolo file da una posizione locale a un’altra. Ecco un esempio:
rsync -a /opt/filename.zip /tmp/
L’utente che esegue il comando deve avere i permessi di lettura sulla posizione sorgente e i permessi di scrittura sulla destinazione.
L’invio del nome del file dalla posizione di destinazione copia il file con il nome corrente. Se vuoi salvare il file con un nome diverso, specifica il nuovo nome nella parte di destinazione:
rsync -a /opt/filename.zip /tmp/newfilename.zip
La vera potenza di rsync
arriva quando si sincronizzano le directory. L’esempio seguente mostra come creare un backup locale dei file del sito web:
rsync -a /var/www/domain.com/public_html/ /var/www/domain.com/public_html_backup/
Se la directory di destinazione non esiste, rsync
la creerà.
Vale la pena menzionare che rsync
riserva un trattamento diverso alle directory di origine con una barra finale (/
). Se la directory di origine ha una barra finale, il comando copierà solo il contenuto della directory nella directory di destinazione. Quando la barra finale è omessa, rsync
copia la directory sorgente all’interno della directory di destinazione.
Usare rsync per sincronizzare i dati da/a una macchina remota #
Quando si usa rsync
per trasferire dati in remoto, deve essere installato sia sulla macchina sorgente che su quella di destinazione. Le nuove versioni di rsync
sono configurate per usare SSH come shell remota predefinita.
Nel seguente esempio, stiamo trasferendo una directory da una macchina locale a una remota:
rsync -a /opt/media/ remote_user@remote_host_or_ip:/opt/media/
Per trasferire dati da una macchina remota a una locale, usa la posizione remota come sorgente:
rsync -a remote_user@remote_host_or_ip:/opt/media/ /opt/media/
Se SSH sull’host remoto è in ascolto su una porta diversa dalla 22 predefinita, specifica la porta usando l’opzione -e
:
rsync -a -e "ssh -p 2322" /opt/media/ remote_user@remote_host_or_ip:/opt/media/
Quando si trasferiscono grandi quantità di dati si raccomanda di eseguire il comando rsync
all’interno di una sessione o di usare l’opzione -P
:
rsync -a -P remote_user@remote_host_or_ip:/opt/media/ /opt/media/
Exclude Files and Directories #
Ci sono due opzioni per escludere file e directory. La prima opzione è usare l’argomento --exclude
e specificare i file e le directory che vuoi escludere sulla linea di comando.
Quando escludi file o directory, devi usare i loro percorsi relativi alla posizione di origine.
Nel seguente esempio mostra come escludere le directory node_modules
e tmp
:
rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
La seconda opzione è quella di usare l’opzione --exclude-from
e specificare i file e le directory che vuoi escludere in un file.
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
node_modulestmp
Conclusione #
Abbiamo mostrato come usare Rsync per copiare e sincronizzare file e directory. C’è molto altro da imparare su Rsync alla Rsync User’s Manualpage.