5.9 KiB
Rsync
Rsync
può essere utilizzato per il mirroring dei dati (in locale o remoto), i backup incrementali, la copia di file tra i sistemi e come un sostituto per i comandi scp, sftpe cp.
Installare Rsync
Rsync
è preinstallato nelle maggiori distribuzioni GNU/Linux, ma si può sempre verificare che sia presente nel sistema col seguente comando:
rsync --version
Se non fosse installato, si può installare facilmente usando il gestore pacchetti della distribuzione.
Per esempio su Debian e derivati:
sudo apt install rsync
Sintassi
Local to Local: rsync [OPTION]... [SRC]... DEST
Local to Remote: rsync [OPTION]... [SRC]... HOST:DEST
Remote to Local: rsync [OPTION]... HOST:SRC... [DEST]
dove:
SRC
- Directory sorgente o di origine;
DEST
- Directory di destinazione;
HOST
- Hostname remoto o indirizzo IP.
Rsync
fornisce una serie di opzioni che controllano ogni aspetto del suo comportamento. Le opzioni più utilizzate sono:
-n
, avvia come simulazione, ovvero mostra solo quello che farebbe senza modificare realmente alcunché. Quest'opzione è FONDAMENTALE, in quanto permette di identificare eventuali comportamenti e/o risultati anomali e quindi di correggere il comando. Si ricordi che un errore nella definizione del comando può comportare la perdita dei dati nella cartella di destinazione o anche in quella sorgente se per esempio si invertono accidentalmente le due. Chiaramente una volta verificato il risultato della sincronizzazione quest'opzione andrà eliminata in modo da far effettivamente sincronizzare le directory;
-r
, sincronizza anche le sottodirectory e tutti i relativi file;
-t
, aggiorna anche la data di "Ultima modifica" dei file copiati nella cartella di destinazione;
-p
, imposta per i file nella cartella di destinazione lo stesso schema di permessi
di quelli sorgenti;
-o
, imposta per i file nella cartella di destinazione lo stesso proprietario
di quelli sorgenti, ove possibile;
-g
, imposta per i file nella cartella di destinazione lo stesso gruppo
di quelli sorgenti, ove possibile;
-a
, (modalità archivio) è equivalente a impostare tutte le opzioni precedenti (-rtpog
), e inoltre mantiene link simbolici, file speciali e (solo se eseguito come root) file dispositivo. Si possono invece trasformare tutti i link simbolici nei file a cui puntano con l'opzione i -L
;
-v
, aumenta il numero di informazioni stampate a video (verbose);
-P
o --progress
, mostra un indicatore percentuale del progresso delle operazioni. Implica l'opzione -v, pertanto se si specifica --progress è ridondante specificare anche -v;
--delete
, elimina nella directory di destinazione tutti i file che non sono presenti nella directory sorgente;
--exclude-from
, specifica il percorso di un file contenente un elenco di file e cartelle da non includere nelle operazioni di sincronizzazione. Maggiori informazioni nell'apposita sezione.
-z
, --compress. Questa opzione forzerà Rsync
a comprimere i dati;
Utilizzo di base di Rsync
Per copiare un singolo file localmente
è necessario eseguire il comando seguente:
rsync -az /opt/filename.zip /tmp/newfilename.zip
Se la directory di destinazione non esiste verrà creata.
Vale la pena ricordare che, aggiungendo /
alla directory di origine, verrà copiato solo il contenuto della directory nella directory di destinazione. Se omessa, Rsync
copierà la directory di origine all'interno della directory di destinazione.
Utilizzare Rsync per sincronizzare i dati da e verso una macchina remota
Quando si utilizza Rsync
per il trasferimento remoto, deve essere installato sia sul computer di origine che su quello di destinazione. Le nuove versioni di Rsync
sono configurate per utilizzare SSH come shell remota predefinita.
Nel seguente esempio, vine trasferita una directory da un computer locale a un computer remoto:
rsync -a /opt/media/ host_or_ip:/opt/media/
Se non è impostato un accesso SSH senza password al computer remoto, verrà chiesto di inserire la password dell'utente.
Se si desidera trasferire i dati da un server remoto a un computer locale, è necessario utilizzare la posizione remota come sorgente:
Se SSH sull'host remoto è in ascolto su una porta diversa dalla 22, è possibile specificare la porta utilizzando l'opzione -e
:
rsync -a -e "ssh -p 2322" /opt/media/ host_or_ip:/opt/media/
Quando si trasferiscono grandi quantità di dati, si consiglia di eseguire il comando Rsync
all'interno di screen
o di utilizzare l'opzione -P
.
Escludere file e directory
Esistono due opzioni per escludere file e directory. La prima opzione è utilizzare l'argomento --exclude
e specificare i file e le directory.
Nel seguente esempio, vengono escluse le directory node_modules
e tmp
che si trovano all'interno di src_directory
:
rsync -a --exclude=node_modules --exclude=tmp /src_directory/ /dst_directory/
La seconda opzione è usare l'argomento --exclude-from
e specificare i file e le directory che si desidera escludere in un file.
nano exclude-file.txt
node_modules
tmp
Quindi:
rsync -a --exclude-from='/exclude-file.txt' /src_directory/ /dst_directory/
Backup locale
Ecco un esempio di come utilizzare Rsync
per un backup locale:
rsync -aPz --delete --exclude-from='~/exlude.txt' ~/.config ~/bk_config