Come utilizzare l’utilità rsync in Linux per gestire i file in rete

rsync (Remote Sync) è un’utilità potente ed efficiente di Linux utilizzata per sincronizzare file e directory tra due posizioni in rete. È comunemente usata per i backup, il mirroring dei dati e il trasferimento efficiente dei file copiando solo le differenze tra origine e destinazione.

Questa guida vi guiderà attraverso l’installazione, l’uso di base e le tecniche avanzate di rsync per aiutarvi a gestire efficacemente i file in rete.

Installazione di rsync

La maggior parte delle distribuzioni Linux ha rsync preinstallato. Per verificare se è installato, eseguire

rsync --versione

Se non è installato, è possibile installarlo utilizzando il gestore di pacchetti della propria distribuzione:

  • Debian/Ubuntu:
    sudo apt install rsync
  • RHEL/CentOS:
    sudo yum install rsync
  • Fedora:
    sudo dnf install rsync
  • Arch Linux:
    sudo pacman -S rsync

📌 Come trasferire file da Windows a un server remoto usando rsync via PuTTY SSH?
Per utilizzare rsync su Windows tramite PuTTY SSH, è necessario aver installato:

PuTTY per la connessioneSSH
rsync e OpenSSH su Windows
Pagent (opzionale) per l’autenticazione automatica con la chiave SSH

Installare rsync su Windows utilizzando MSYS2

Se avete scaricato MSYS2, potete installare facilmente rsync usando pacman, il gestore di pacchetti di MSYS2.

  • Aggiornare MSYS2 e i pacchetti esistenti
    Nel terminale di MSYS2, eseguire:

pacman -Syu

  • Se MSYS2 si chiude automaticamente dopo l’aggiornamento, riaprirlo ed eseguirlo:

pacman -Su
questo passo assicura che sia disponibile l’ultima versione del gestore di pacchetti.

  • Installare rsync
    Installare ora rsync utilizzando:

pacman -S rsync


💡 Se avete bisogno di openssh per il trasferimento SSH, installate anche quello:

pacman -S openssh

Verifica dell’installazione
Per verificare che rsync sia stato installato correttamente, eseguire:

rsync --versione

Sintassi di base di rsync

La sintassi di base di rsync è:

rsync [opzioni] sorgente destinazione

Opzioni comunemente usate

  • a: Modalità di archiviazione (conserva i collegamenti simbolici, i permessi, i timestamp, ecc.)
  • v: output dettagliato
  • z : Comprimere i dati del file durante il trasferimento
  • P: Mostra l’avanzamento durante il trasferimento
  • r: Copia ricorsiva delle directory
  • e : Specifica la shell remota (come SSH)

Utilizzo di rsync per la sincronizzazione dei file locali

Per sincronizzare i file tra due directory locali:

rsync -av /sorgente/directory/ /destinazione/directory/

Il trattino / nell’origine assicura che venga copiato solo il contenuto della directory e non la directory stessa.

Utilizzo di rsync in rete

Trasferimento di file a un server remoto

Per trasferire file da un sistema locale a un server remoto:

rsync -avz /locale/directory/ user@remote_host:/remote/directory/

*Dopo aver aggiunto il comando in MSYS2, aggiungeremo i dati SSH per connetterci al server remoto e il risultato verrà visualizzato:

Questo comando copia in modo sicuro i file sul server remoto utilizzando SSH.

Verificare se il comando è stato eseguito con successo sul server remoto:

ls -lah /home/user/test_backup/ [put_your_directory]

Trasferimento di file da un server remoto a un computer locale

Per copiare i file da un server remoto al computer locale. Per impostazione predefinita, rsync utilizza SSH per la comunicazione sicura. È possibile specificare esplicitamente SSH con:

rsync -avz -e ssh /locale/directory/ user@remote_host:/remote/directory/

Se SSH utilizza una porta non predefinita (ad esempio, 2222), specificarla in questo modo:

rsync -avz -e "ssh -p 2222" /locale/directory/ user@remote_host:/remote/directory/

Sincronizzazione ed eliminazione dei file extra

Per eliminare i file extra nella destinazione che non sono presenti nell’origine:

Per prima cosa aggiungiamo i file extra nel terminale PuttySSH:

cd /home/user/test_backup/

toccare file1.txt file2.log file3.jpg

mkdir extra_files

toccare extra_files/file_vecchio.txt

Ora sincronizzate la directory senza alcuni file e rsync cancellerà i file che non sono più presenti nella sorgente:

rsync -av --delete /source/directory/ /destination/directory/

cosa fa?
Tutti i file presenti sul server ma NON in test/locale vengono eliminati.

Risultato MSYS2

Risultato PuttySSH

Attenzione: Usare con cautela il comando –cancella, che rimuove in modo permanente i file dalla destinazione.

Esclusione di file e directory

Per escludere file o directory specifiche:

rsync -av --exclude 'file_o_directory' /source/ user@remote_host:/destination/
Risultato MSYS2

Risultato PuttySSH

Per esclusioni multiple, utilizzare:

rsync -av --exclude={'file1','dir1','*.log'} /sorgente/ utente@host_remoto:/destinazione/

Esecuzione di rsync come processo in background

È possibile eseguire rsync in background utilizzando nohup:

nohup rsync -avz /source/ user@remote_host:/destination/ &

In questo modo il processo continua anche dopo il logout.

Nella direttiva local abbiamo aggiunto un nuovo file new_file.txt33333333, poi abbiamo disconnesso il terminale PuttySSH e il comando precedente ci permette di inviare i file anche quando il server è disconnesso.

Automatizzare i trasferimenti di file con Cron Jobs

Per pianificare la sincronizzazione automatica utilizzando cron, aprire crontab:

crontab -e

Aggiungere un lavoro per eseguire rsync ogni giorno a mezzanotte:

0 0 * * * rsync -avz /source/ user@remote_host:/destination/

Conclusione

rsync è uno strumento versatile e potente per la sincronizzazione e il trasferimento di file in rete. Che si tratti di backup di dati, mirroring di directory o migrazione di file tra server, rsync offre una soluzione efficiente e affidabile. Sfruttando le sue varie opzioni e capacità di automazione, è possibile gestire efficacemente i file in ambienti Linux.