rsync è uno strumento da riga di comando gratuito che ti consente di sincronizzare i file in locale e in remoto. Con esso, puoi trasferire file e directory.
Ciò lo rende molto utile per la migrazione dei dati, l’esecuzione di backup e il mirroring, rendendolo ideale per webmaster e amministratori per le attività ricorrenti di trasferimento dei dati.
Questo articolo ci insegnerà come funziona Rysnc e fornirà alcuni esempi utili.
Sommario:
Come funziona rsync?
rsync è un’utilità della riga di comando per la sincronizzazione remota per sistemi simili a Unix. Offre all’utente la possibilità di trasferire/sincronizzare i file tra macchine o due host senza problemi.
Sotto il cofano, rsync utilizza l’algoritmo di trasferimento delta. Questo algoritmo prevede la copia delle differenze tra i due file su due host (origine e destinazione). L’origine e la destinazione possono essere locali o remote. Il comando rsync può eseguire attività di copia/sincronizzazione dei dati in due modi. Questi sono:
- Usa ssh, rsh per copiare/sincronizzare tra due host.
- Utilizzare il demone TCP rsync per la copia/sincronizzazione.
Poiché è progettato per funzionare in sistemi simili a Unix, funziona anche in Linux.
Il processo passo-passo utilizzato da rsync è il seguente:
- Rsync utilizza SSH per connettersi all’host remoto e richiede una password.
- Una volta connesso, rsync dell’host remoto comunica con l’origine.
- Questi programmi determineranno quindi i file e le directory che devono essere sincronizzati. Utilizza un algoritmo di trasferimento delta per verificare la differenza tra i file.
Se il comando rsync non trova un file sul telecomando ma non sull’host, lo copierà e lo trasferirà sul sistema host. Allo stesso modo, per i file già esistenti (sia sull’host che sul remoto), copierà la differenza tra loro (cioè le parti modificate). Infine, ignorerà i file esistenti su entrambi i sistemi senza modifiche.
Il comando rsync ottiene aggiornamenti incrementali memorizzando la differenza in un file temporaneo prima di inviarlo alla destinazione.
Prima che inizi:
- Devi avere i privilegi di root o sudo
- Avere accesso al terminale/riga di comando
- Accesso SSH per l’esecuzione sicura dei comandi rsync
- Hai anche bisogno di due macchine per creare rsync.
Per il tutorial, useremo Linux Mint 21.1 Vera. Puoi facilmente seguire la guida senza problemi utilizzando qualsiasi altra distribuzione Linux.
Perché usare rsync su Scp?
Scp (secure copy) è un popolare protocollo della riga di comando che consente agli utenti di copiare i file. Segue un approccio lineare alla copia. Ciò significa che copia semplicemente i file dall’origine alla destinazione. Per farlo in modo sicuro, utilizza SSH.
La sintassi del comando scp è la seguente:
scp option SOURCE DESTINATION
Tuttavia, la domanda rimane, perché usare rsync su scp?
Bene, ci sono molti vantaggi nell’usare rsync. Questi vantaggi includono:
- Esecuzione più veloce: rsync è più veloce di scp perché utilizza un protocollo di aggiornamento remoto. Ciò consente di trasferire solo le differenze anziché l’intero file. Pertanto, se imposti una sincronizzazione regolare nel tempo, devi solo eseguire una copia completa la prima volta. Dalla volta successiva in poi, copia solo le parti aggiornate con l’aiuto dell’algoritmo di trasferimento delta.
- Minor consumo di larghezza di banda: poiché rsync non deve copiare nuovamente l’intero file, porta a un minore consumo di larghezza di banda. Inoltre, utilizza anche algoritmi di compressione/decompressione per ridurre al minimo le dimensioni del file durante il trasferimento.
- Altre opzioni della riga di comando: rsync batte anche scp nel numero di opzioni della riga di comando. Ciò significa che puoi ottimizzare rsync più di scp.
In conclusione, rsync è un eccellente strumento di sincronizzazione incrementale. Lo strumento scp è utile anche per trasferire/sincronizzare i file in modo sicuro. In uno scenario reale, scp è adatto per le attività quotidiane se stai cercando un approccio più diretto. Tuttavia, per attività ricorrenti, usa rsync.
Sintassi del comando rsync
Il comando rsync è il seguente:
Qui, i termini sono definiti di seguito:
- OPTION – Queste sono le opzioni di rsync
- FONTE – Directory di origine
- DEST – Directory di destinazione
- USER – Nome utente remoto
- HOST – Nome host remoto o indirizzo IP
Le opzioni sono parametri che offrono funzionalità aggiuntive al comando. Ad esempio, puoi sincronizzare i dati in modo ricorsivo con l’opzione -r. Tuttavia, l’opzione -r non sincronizza la proprietà per gruppi e utenti, timestamp, autorizzazioni o collegamenti simbolici. Invece, puoi utilizzare l’opzione -a, che esegue il comando in modalità archivio, assicurando che tutti i proprietari, i permessi ei collegamenti simbolici del file vengano mantenuti durante la copia.
Altre opzioni di rsync includono:
- -z: comprime i dati per risparmiare spazio
- -h: fornisce un output in formato leggibile dall’uomo
- -b: esegue il backup durante il processo di sincronizzazione dei dati
- -e: utilizza il protocollo SSH per i trasferimenti di dati remoti
- -progress: visualizza l’avanzamento della sincronizzazione dei dati
- -v: chiede a rsync di visualizzare un output dettagliato
- –n: esegue un test di prova per testare le impostazioni e l’impostazione per la sincronizzazione dei dati
- -q: sopprime l’output e le opzioni del comando rsync
Installazione di rsync
La maggior parte dei sistemi Unix e Linux viene fornita con rsync installato. Se il tuo sistema non ha rsync, puoi installarlo usando i seguenti comandi.
Per Debian/Ubuntu e Mint
sudo apt-get install rsync
Per ArcoLinux
pacman -S rsync
Su Gentoo
emerge sys-apps/rsync
Su CentOS/Fedora/REHL
sudo yum install rsync
Su openSUSE
sudo zypper install rsync
Poiché abbiamo Linux Mint, rsync è stato preinstallato. Quindi puoi eseguire il comando rsync nel terminale per vedere se è installato. Spiegherà le sue capacità, opzioni e altre informazioni vitali se presenti.
nitt ~ $ rsync rsync version 3.2.3 protocol version 31 Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others. Web site: https://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes, batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv, symtimes, prealloc, stop-at, no crtimes Optimizations: SIMD, no asm, openssl-crypto Checksum list: xxh128 xxh3 xxh64 (xxhash) md5 md4 none Compress list: zstd lz4 zlibx zlib none rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to redistribute it under certain conditions. See the GNU General Public Licence for details. rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
Vediamo ora rsync in azione con diversi casi d’uso.
Per il tutorial, creeremo due directory.
- directory-origine
- directory-destinazione
Per questo, è necessario digitare i seguenti comandi.
mkdir source-directory mkdir dest-directory
Inoltre, avremo bisogno di generare file per far funzionare rsync. Quindi creiamo alcuni file di test con il comando seguente.
touch source-directory/file{1..100}
Questo crea 100 file vuoti nella directory di origine. Puoi confermarlo inserendo il comando qui sotto.
ls source-directory Output: nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ touch source-directory/file{1..100} nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Nota: abbiamo mantenuto vuota la directory dest.
Copia le directory in locale in modo ricorsivo
Anche se rsync mira principalmente a copiare i file tra un server locale e uno remoto, è ugualmente utile per copiare i file localmente.
In questo caso, useremo la seguente sintassi rsync.
opzione rsync SOURCE DESTINATION
Copia i file nella nostra directory di origine nella directory di destinazione eseguendo il seguente comando.
rsync -r source-directory/ dest-directory
Qui, il comando “ricorsivamente” copia i file dalla directory di origine alla directory di destinazione.
nitt rsync-tutorial $ ls dest-directory source-directory nitt rsync-tutorial $ ls dest-directory nitt rsync-tutorial $ ls source-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99 nitt rsync-tutorial $ rsync -r source-directory/ dest-directory nitt rsync-tutorial $ ls dest-directory file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Questo copia ogni singolo file nella directory di origine nella directory di destinazione.
Copia file singolo in locale
Ora che abbiamo imparato come sincronizzare due directory, impareremo come copiare un singolo file.
A tale scopo, modificheremo il file vuoto file1 nella directory-origine e poi lo sincronizzeremo con lo stesso file presente nella directory-dest.
Per modificare un file, digitare il seguente comando.
nano source-directory/file1
Ora copia e incolla il seguente testo nel nano editor.
We're updating file1 in the source-directory. Once we update, we'll push the new update to the dest-directory. rsync doesn't need to re-copy the file using the delta-transfer algorithm. This algorithm checks the differences and then updates destination files accordingly. So, once you save file1 in the source-directory, open file1 in the dest-directory. It'll be empty. However, if we check it after running rsync, you'll see that file1 in dest-directory is updated.
Aggiunta di contenuto a un file
Ora chiudi e salva il file.
Copiamo ora il file usando rsync.
sudo rsync -v --existing source-directory/file1 /dest-directory
#Output nitt rsync-tutorial $ sudo rsync -v --existing source-directory/file1 dest-directory file1 sent 557 bytes received 35 bytes 1,184.00 bytes/sec total size is 474 speedup is 0.80 nitt rsync-tutorial $
Come avrai notato, abbiamo utilizzato l’opzione –existing. Questo aggiorna i file esistenti. Se esegui il comando senza –existing, non si aggiornerà, anche se viene eseguito correttamente.
Se il singolo file che stai copiando non esiste nella cartella di destinazione, devi eseguire il seguente comando.
rsync -v source-directory/newfile dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile dest-directory newfile sent 82 bytes received 35 bytes 234.00 bytes/sec total size is 0 speedup is 0.00
Copia di più file
Se intendi copiare più file, devi menzionare i percorsi di origine di entrambi i file, seguiti dalla directory di destinazione.
A questo scopo, creeremo due nuovi file: newfile2 e newfile3, nella directory-source. Esegui il seguente comando per farlo.
touch source-directory/newfile{2..3}
Ora, usa il seguente comando per sincronizzare più file.
rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output nitt rsync-tutorial $ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory newfile2 newfile3 sent 135 bytes received 54 bytes 378.00 bytes/sec total size is 0 speedup is 0.00 nitt rsync-tutorial $
Copia file o directory da locale a remoto
La sintassi rsync per il trasferimento da locale a remoto è la seguente.
rsync option SOURCE [email protected]:DEST
Come puoi vedere, devi conoscere l’indirizzo IP della macchina remota per farlo funzionare. Inoltre, è necessario aggiungere l’indirizzo IP dopo il file di origine.
rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Prima di iniziare il trasferimento, chiederà la password. Inseriscilo per continuare. Inoltre, se l’utente è diverso nel computer remoto, è necessario menzionarlo prima dell’indirizzo IP seguito da @.
rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory
Se intendi copiare più file o directory, devi elencare i file o i percorsi delle directory. La sintassi per esso è sotto.
rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Protocolli specifici per il trasferimento remoto
rsync ti consente di specificare specifici protocolli di trasferimento file. Per farlo, devi usare l’opzione -e, seguita dal protocollo.
Ad esempio, se si desidera utilizzare il protocollo ssh, è necessario aggiungere -e ssh al comando rsync.
rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory
Copia di un file o di una directory da remoto a locale
La sintassi rsync per il trasferimento da locale a remoto è la seguente.
sync option [email protected]:SRC DEST
Funziona come una richiesta pull. Quindi, per ottenere i file/directory richiesti da un server remoto al tuo computer locale, devi eseguire il seguente comando.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Il comando estrae i file all’interno della directory di destinazione della macchina remota nella directory di origine della macchina locale.
Allo stesso modo, puoi estrarre un file specifico menzionandolo attraverso il suo percorso completo.
rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory
Per copiare più file o directory da locale a remoto, è necessario specificare il percorso tra parentesi graffe (separate da virgole) dopo l’indirizzo IP del server.
rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory
Allo stesso modo, puoi menzionare anche i file.
Mostra i progressi in tempo reale durante il trasferimento
È una buona idea vedere i progressi in tempo reale per backup di dati più grandi. Per questo, devi usare il flag –progress. Aggiungilo al comando rsync e puoi vedere la velocità di trasferimento, il tempo rimanente e la quantità di dati trasferiti.
rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Elimina i file di origine una volta completato il trasferimento
È possibile utilizzare il flag -remove-source-files per rimuovere i file di origine dopo il trasferimento completo. Questo può aiutarti in molti scenari, soprattutto quando si tratta di proteggere i tuoi file senza lasciare traccia o semplicemente usarli per liberare spazio.
rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
rsync prova a secco
Rysnc ti consente anche di valutare prima di eseguire una corsa effettiva. La corsa a secco ti consente di vedere se stai facendo la cosa giusta. Dopotutto, non vuoi aggiornare i file per errore o addirittura eliminarli.
È necessario utilizzare l’opzione –dry-run per eseguire un funzionamento a secco. Aggiungilo al comando, seguito dall’origine e dalla destinazione.
sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial $ sudo rsync -v --dry-run source-directory/file1 dest-directory file1 sent 43 bytes received 19 bytes 124.00 bytes/sec total size is 474 speedup is 7.65 (DRY RUN) nitt rsync-tutorial
L’output è simile a come lo abbiamo eseguito prima. Tuttavia, noterai una menzione di (DRY RUN) alla fine dell’output.
Imposta la dimensione minima e massima del file
Rysnc ti consente anche di impostare la dimensione minima o massima del file durante il trasferimento.
Quindi, se vuoi trasferire con una dimensione minima di 15KB, devi usare –min-size=15K.
rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Il comando copierà solo i file con una dimensione minima del file di 15 KB. Se la dimensione del file è inferiore, la ignorerà.
Allo stesso modo, puoi usare il flag –max-size per impostare la dimensione massima del file.
rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Qui, rsync ignorerà i file al di sopra della dimensione di 450K.
Imposta il limite di larghezza di banda
Se stai eseguendo altre attività che richiedono molta larghezza di banda, puoi impostare rysnc per impostare il limite di larghezza di banda per il trasferimento. Per farlo, usa –bwlimit=KB/s.
rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory
Qui impostiamo la larghezza di banda a 100Kb/s durante il trasferimento.
Parole finali
Questo ci porta alla fine della nostra guida ai comandi rsync. Abbiamo imparato a usare rysnc e coperto molti comandi in modo efficace.
Tuttavia, rysnc offre molto di più di quello che abbiamo coperto. Ecco perché potresti anche voler consultare la pagina man di rsync, dove è trattato ogni aspetto di rsync.
Successivamente, controlla i cheat sheet della riga di comando per Windows, Linux e macOS.