Introduzione
Rsync, o Remote Sync, è uno strumento da riga di comando gratuito che consente di trasferire file e directory a destinazioni locali e remote. Rsync viene utilizzato per eseguire il mirroring, eseguire backup o migrare i dati su altri server.
Questo strumento è veloce ed efficiente, copia solo le modifiche dalla fonte e offre opzioni di personalizzazione.
Segui questo tutorial per imparare a usare rsync con 20 esempi di comandi per coprire la maggior parte dei casi d'uso in Linux.
Prerequisiti
- Utente con sudo o root privilegi
- Accesso a un terminale/riga di comando
- Accesso SSH per esempi di rsync remoti
Sintassi del comando Rsync
La sintassi per rsync
il comando cambia a seconda dell'uso dello strumento. Tratteremo tutti gli scenari nei seguenti esempi. La sintassi di Rsync nella sua forma più semplice è simile a questa:
rsync options SOURCE DESTINATION
I trasferimenti di dati remoti richiedono di specificare l'indirizzo di un host, ma ne parleremo più avanti.
Opzioni Risincronizzazione
Lo strumento rsync include molte opzioni. Puoi inserire rsync
nel tuo terminale e ottieni tutti i dettagli. Elencheremo alcune delle opzioni di rsync più comuni.
Questi includono:
-r | Consente di sincronizzare i dati in modo ricorsivo ma non mantiene la proprietà di utenti e gruppi, autorizzazioni, timestamp o collegamenti simbolici. |
-a | La modalità archivio si comporta come la modalità ricorsiva ma mantiene tutti i permessi sui file, i collegamenti simbolici, la proprietà dei file, ecc. |
-z | Utilizzato per comprimere i dati durante i trasferimenti per risparmiare spazio. |
-b | Esegue un backup durante la sincronizzazione dei dati. |
-h | Mostra i numeri nell'output in un formato leggibile. |
-n | Fa una corsa a secco. Utilizzato per il test prima che avvenga la sincronizzazione effettiva. |
-e | Indica a rsync di utilizzare il protocollo SSH per i trasferimenti remoti. |
-progress | Visualizza l'avanzamento del trasferimento durante la sincronizzazione. |
-v | Risultato dettagliato. Visualizza i dettagli del trasferimento. |
-q | Utilizzato per sopprimere l'output per il comando e le opzioni rsync. |
Esempi di comando Rsync
Rsync è uno strumento di sincronizzazione versatile che puoi personalizzare per adattarlo al tuo uso specifico. In questa guida utilizzeremo l'archivio (-a
) e prolisso (-v
) opzioni quando necessario.
Fare riferimento agli esempi di rsync di seguito per coprire la maggior parte dell'utilizzo di rsync.
1. Copia un singolo file in locale
Per copiare un file in un'altra directory su un computer locale, digita il percorso completo del file di origine, seguito dalla destinazione di destinazione.
Ad esempio:
rsync -v /home/test/Desktop/sample.txt /home/test/Desktop/rsync/
Il comando trasferisce il sample.txt file nel rsync directory. Se la directory di destinazione non esiste, aggiungi una barra alla fine e rsync la creerà, come nel nostro esempio.
Se desideri copiare un file dalla directory di lavoro corrente, puoi inserire il nome del file, non il percorso completo.
2. Copia più file in locale
Per copiare più file con rsync, aggiungi i percorsi completi dei file di origine:
rsync -v /home/test/Desktop/sample.txt /home/test/Desktop/sample2rs.txt /home/test/Desktop/rsync
Dovresti usare questo metodo per un numero limitato di file. Se l'elenco è più grande, puoi fare riferimento a --exclude
opzione.
3. Copia una directory e tutte le sottodirectory in locale (copia file e directory in modo ricorsivo)
Per copiare una directory e il suo contenuto in un'altra posizione sul tuo computer, usa il -a
o -r
opzione. Abbiamo utilizzato l'archivio opzione :
rsync -av /home/test/Desktop/Linux /home/test/Desktop/rsync
L'esempio sopra mostra come copiare Linux nella directory rsync directory. Nota che non abbiamo usato la barra finale dopo Linux . Quindi, lo strumento rsync ha creato Linux directory e il suo contenuto all'interno di rsync directory.
4. Copia un file o una directory da una macchina locale a una remota
Per copiare la directory /home/test/Desktop/Linux su /home/test/Desktop/rsync su una macchina remota, è necessario specificare l'indirizzo IP della destinazione.
Aggiungi l'indirizzo IP e la destinazione dopo la directory di origine. Ricordati di inserire i due punti (:
) dopo l'indirizzo IP dell'host remoto, senza spazi prima della destinazione.
Il comando si presenta così:
rsync -av /home/test/Desktop/Linux 192.168.56.100:/home/test/Desktop/rsync
Immettere la password per l'utente corrente per continuare. Se desideri utilizzare un altro account per la connessione remota, specificalo prima dell'indirizzo IP:
rsync -a /home/test/Desktop/Linux [email protected]:/home/test/Desktop/rsync
Per copiare un singolo file su un host remoto, specifica il percorso completo del file e la destinazione.
Ad esempio:
rsync -av /home/test/Desktop/sample_file.txt 192.168.56.100:/home/test/Desktop/rsync
5. Copia più file o directory da una macchina locale a una remota
Simile alla copia dei dati in locale, elenca più file o più percorsi di directory che desideri copiare su un server remoto. Segui la stessa sintassi della copia di un singolo file o directory.
Ad esempio:
rsync -av /home/test/Desktop/Linux/ /home/test/Music 192.168.56.100:/home/test/Desktop/rsync
6. Specifica il protocollo rsync per i trasferimenti remoti
Lo strumento rsync può essere istruito con il -e
opzione utilizzare un protocollo specifico per i trasferimenti di file. Per utilizzare Rsync su SSH per trasferire file in remoto, aggiungi -e ssh
al rsync
comando.
Ad esempio, per trasferire sample.txt dal desktop al desktop di una macchina remota:
rsync -e ssh /home/test/Desktop/sample.txt 192.168.56.100:/home/test/Desktop
7. Copia un file o una directory da un telecomando a un computer locale
Rsync supporta il trasferimento di file da un server remoto al tuo computer locale.
Per estrarre una directory da un server, specifica il suo indirizzo IP prima dell'origine.
Ad esempio:
rsync -av 192.168.56.100:/home/test/Desktop/DirM /home/test/Desktop
Questo comando ha copiato la DirM directory da 192.168.56.100 a /home/test/Desktop su un server locale.
Per copiare un file specifico da un host remoto, immettere il percorso completo del file di origine e la destinazione sul computer locale. Ad esempio:
rsync -v 192.168.56.100:/home/test/Desktop/testfile.txt /home/test/Desktop
8. Copia più file o directory da una macchina locale a una remota
Per trasferire più file o più directory da un server remoto, elencare i percorsi tra parentesi graffe dopo l'indirizzo IP del server. Separa i percorsi con una virgola.
Ad esempio:
rsync -av 192.168.56.100:{/home/test/Desktop/DirM,/home/test/Desktop/Dir1} /home/test/rsync
Lo stesso vale per i file. Elenca tutti i file di cui hai bisogno tra parentesi graffe.
9. Mostra l'avanzamento della rsync durante il trasferimento dei dati
Quando esegui un backup di dati di grandi dimensioni, potresti voler visualizzare l'avanzamento del trasferimento.
Aggiungi il --progress
segnala al rsync
comando per visualizzare la quantità di dati trasferiti, la velocità di trasferimento e il tempo rimanente.
Ad esempio, per eseguire il backup di Dir1 su un server remoto e mostra lo stato di avanzamento, inserisci:
rsync -av --progress /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync
10. Elimina un file sorgente o una directory inesistente dalla destinazione
Usa il --delete
opzione per mantenere sincronizzati l'origine e la destinazione.
Questa opzione dice a rsync di eliminare qualsiasi file o directory nella destinazione se l'origine non ce l'ha.
rsync -av --delete /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync
11. Elimina i file di origine dopo il trasferimento
In alcuni scenari, potresti voler eliminare i file di origine dopo il trasferimento. Ad esempio, potresti spostare un backup settimanale su un nuovo server. Una volta terminato il trasferimento, non avrai più bisogno dei file di origine sul vecchio server.
In tal caso, utilizza il --remove-source-files
flag per eliminare il file di origine specificato.
Ad esempio, questo comando trasferisce il file di backup weekly.zip e quindi lo elimina dalla fonte:
rsync -v --remove-source-files /home/test/backup/weekly.zip 192.168.56.100:/home/test/Desktop/rsync/
12. Rsync Dry Run
Rsync è un potente strumento di sincronizzazione. Poiché questo strumento ti consente di copiare ed eliminare i dati, ti consigliamo di eseguire prima una prova a secco per verificare se rsync fa ciò che volevi.
L'opzione di prova è particolarmente utile quando si desidera eliminare i file. Per eseguire una prova a secco, utilizza il --dry-run
opzione e segui la normale sintassi di rsync.
Ad esempio:
rsync -av --dry-run --delete /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync
L'output ha lo stesso aspetto di quando stai effettivamente sincronizzando i file. Tuttavia, questa volta i dati non verranno sincronizzati. A conferma dell'avvenuto test e non dell'effettivo trasferimento, il terminale mostra (DRY RUN) in basso.
13. Imposta la dimensione massima del file per il trasferimento
Per determinare la dimensione massima del file che rsync trasferirà, utilizza il --max-size=add_size
.
Ad esempio, per trasferire file di dimensioni non superiori a 500 KB, utilizzare questo comando:
rsync -av --max-size=500k /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync/
14. Imposta la dimensione minima del file per il trasferimento
Usa --min-size=add_size
con rsync quando non si desidera trasferire file di dimensioni inferiori alla dimensione specificata. Questa opzione è utile, ad esempio, quando vuoi saltare piccoli file di registro o miniature.
Per saltare qualsiasi file di dimensioni inferiori a 10 KB, esegui questo comando:
rsync -av --min-size=10k /home/test/Desktop/ 192.168.56.100:/home/test/Desktop/rsync/
15. Imposta il limite di larghezza di banda di rsync
Se vuoi determinare il limite di larghezza di banda durante il trasferimento di dati tra macchine, usa --bwlimit=KB/s
.
Questa opzione è utile quando non vuoi intasare il throughput della tua rete.
Per impostare la velocità di trasferimento massima su 50 KB/s, inserisci:
rsync -av --bwlimit=50 --progress /home/test/Desktop/Dir1 192.168.56.100:/home/test/Desktop/rsync/
Abbiamo anche usato il --progress
opzione per dimostrare l'utilizzo di --bwlimit
.
16. Copia tipo di file specifico
Puoi usare rsync per copiare solo un tipo di file specifico. Per farlo, usa l'asterisco (*
) al posto del nome del file e aggiungi l'estensione.
Ad esempio, per copiare solo file .txt, inserisci:
rsync -v /home/test/Documents/*.txt /home/test/Desktop/rsync/
Questo rsync
Il comando trasferisce tutti i file di testo dai Documenti nella directory rsync directory sul desktop.
17. Copia la struttura della directory ma salta i file
Rsync ti consente di trasferire solo la struttura delle directory se non hai bisogno dei file in un'altra posizione.
Per farlo, aggiungi -f"+ */" -f"- *"
prima della directory di origine.
Ad esempio, per copiare la struttura di Linux directory in Documenti , inserisci:
rsync -av -f"+ */" -f"- *" /home/test/Desktop/Linux /home/test/Documents
18. Aggiungi il timbro della data al nome della directory
Puoi facilmente aggiungere una data al nome di una directory se desideri apporre un timbro della data ai tuoi trasferimenti.
Aggiungi $(date +%Y-%m-%d)
al nome della directory di destinazione che si desidera creare. Questa opzione è utile quando vuoi tenere traccia di quando sono avvenuti i trasferimenti senza aprire le proprietà della directory.
Ad esempio:
rsync -av /home/test/Desktop/Linux /home/test/Desktop/rsync$(date +%Y-%m-%d)
19. Non copiare il file di origine se viene modificato lo stesso file di destinazione
Se mantieni sincronizzate due directory, rsync non copia un file se lo stesso esiste nella destinazione.
A volte può succedere che modifichi un file nella destinazione e non desideri che rsync lo sovrascriva.
Per evitare di sovrascrivere i file di destinazione modificati, utilizza il -u
opzione.
Ad esempio:
rsync -avu /home/test/Desktop/Linux/ /home/test/Desktop/rsync
20. Mostra la differenza tra i file di origine e di destinazione
Quando inizi a trasferire i dati, puoi utilizzare il -i
flag con rsync per verificare se c'è una differenza tra la sorgente e la destinazione.
Ad esempio:
rsync -avi /home/test/Desktop/Linux/ /home/test/Desktop/rsync
L'esempio sopra mostra il sample2rs.txt manca il file nella destinazione.
Le possibili lettere nell'output sono:
f
– sta per filed
– mostra che il file di destinazione è in questionet
– mostra che il timestamp è cambiatos
– mostra che la dimensione è cambiata