GNU/Linux >> Linux Esercitazione >  >> Linux

Esempi pratici di comando rsync in Linux

Rsync (Remote Sync) è uno strumento di sincronizzazione per la copia di file e directory in un sistema o tra sistemi. Il più grande vantaggio di rsync è che copia solo i file modificati, riducendo così il consumo di CPU e risparmiando larghezza di banda e tempo durante la copia dei file.

Vantaggi di rsync su scp

Ti ho già mostrato alcuni esempi pratici del comando scp. scp, abbreviazione di copia sicura, viene utilizzato anche per copiare file tra due sistemi remoti su ssh.

Ma rsync ha alcuni vantaggi rispetto a scp che lo rendono una scelta migliore.

  • rsync copia solo i file che sono stati modificati mentre scp copia tutti i file e li sovrascrive se necessario. Quindi una migliore velocità è garantita in rsync.
  • rsync può funzionare anche senza crittografia. Questo può ridurre il sovraccarico. Ma questo dovrebbe essere considerato quando non vi è alcun rischio per la sicurezza del trasferimento senza crittografia.
  • Si può riprendere il trasferimento incompleto in rsync mentre scp non lo consente.

Se non hai rsync installato, puoi installarlo utilizzando il tuo gestore di pacchetti.

In Ubuntu e Debian, puoi installare rsync con il seguente comando.

sudo apt install rsync

Esempi pratici del comando rsync in Linux

La rsync comando ha la seguente struttura

rsync [OPTIONS] Source Destination

Dove fonte e destinazione possono essere percorsi locali o remoti nel formato [email protected]:path/to/file

Vediamo come utilizzare il comando rsync con alcuni esempi utili.

🗒️Se hai una directory A, usa "A" per menzionarla non "A/". L'uso di A/ farà riferimento a tutti i file nella directory A e non alla directory A stessa. Quindi la copia di A creerà una nuova directory nella destinazione e quindi copierà i file in A. Ma la copia di A/ copierà solo i file in A nella destinazione.

1. Sincronizza file locali [Sincronizzazione unidirezionale]

Per copiare file locali dalla directory A in Backup-A-dir ,

rsync A/ Backup-A-dir/

Questo comando copia i file (se sono state trovate modifiche) della directory A in Backup-A-dir. Questo non copierà alcun file aggiuntivo in Backup-A-dir in A che inizialmente non si trova in A. Questo è il motivo per cui viene chiamata sincronizzazione unidirezionale.

2. Sincronizza file remoti [Sincronizzazione unidirezionale]

Per sincronizzare i file tra un sistema remoto e un sistema locale, il comando è simile. Tieni presente che il percorso di origine e il percorso di destinazione possono essere percorsi di file system locali o percorsi di sistema (ssh) remoti.

rsync dev/build [email protected]:~/Backup

3. Sincronizzazione bidirezionale

Il comando precedente copia i file dall'origine alla destinazione. Ma se il sistema aveva alcuni file extra che non erano nella fonte, quelli non verranno eliminati dalla sincronizzazione unidirezionale. Se lo desideri, dovrai utilizzare la sincronizzazione bidirezionale.

Per mantenere entrambi gli endpoint (directory o file) nello stesso stato con gli stessi file e senza extra su entrambi i lati, basta aggiungere il –delete opzione al comando originale.

rsync A/ Backup-A-dir/ --delete

4. Elimina i file di origine dopo la copia

Se è necessario eliminare i file nel codice sorgente una volta completato il trasferimento, –remove-source-files l'opzione dovrebbe tornare utile.

rsync A/ Backup-A-dir/ --remove-source-files

Dovresti stare attento con il comando sopra. Dovresti eliminare l'origine solo se vengono eseguite copie sufficienti e i dati non sono più necessari nell'origine.

5. Includi ed escludi file

Se hai bisogno (o non hai bisogno) di trasferire file il cui nome corrisponde a uno schema,
–includi e –escludi è possibile utilizzare l'opzione. A ciascuna opzione dovrebbe essere assegnato uno schema dopo il segno '='.

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

Il comando precedente copia tutti i file con estensione .py ad eccezione di quelli con estensione .tmp.py.

È possibile utilizzare l'espressione regolare come modello. Scopri di più qui.

Suggerimento:se l'elenco dei pattern per una delle opzioni è enorme, puoi salvarlo in un file e passare i loro nomi a –include-from e –exclude-from opzione.

6. rsync su SSH

Se desideri trasferire i file su SSH, devi specificare ssh con -e opzione.

rsync -e ssh A/ [email protected]:~/Backup-A-dir/

Questo è il modo più preferito per trasferire file su un sistema remoto poiché è crittografato. Si dovrebbe notare che ci sarà un sovraccarico dovuto alla crittografia. Quindi potrebbe volerci più tempo del normale trasferimento.

Affinché funzioni, è necessario abilitare gli accessi ssh configurati sul lato server. Anche la chiave pubblica e la chiave privata devono trovarsi nei rispettivi percorsi.

Per ulteriori informazioni su ssh e sulla sua configurazione, leggi questi articoli di LinuxHandBook sulla configurazione SSH lato client e SSH lato server.

7. Modalità dettagliata

La maggior parte dei comandi in Linux ha un'opzione dettagliata per registrare l'azione del comando nel terminale. risincronizzazione non fa eccezione.

Passa -v opzione o —dettagliato opzione per dettagliare il comando. Elencherà le azioni che vengono eseguite e il relativo avanzamento. Questo sarà molto utile durante il debug.

rsync A/ Backup-A-dir/ -v -r

L'output sarà simile a quello qui sotto

$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00

8. Prova a secco:esegui ma non copiare

Nel caso in cui desideri conoscere i file che verranno copiati senza eseguire effettivamente il trasferimento, puoi utilizzare –dry-run ( o -n ) opzione.

Esegue tutte le operazioni come il normale rsync comando fa eccezione per la parte da copiare. Elencherà i file che verranno copiati o eliminati (se necessario) e quindi si fermerà appena prima della copia.

rsync -v A/ Backup-A-dir/ --dry-run

Che si tradurrà in

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

Tieni presente che devi utilizzare -v opzione per vedere l'output sopra del comando dry run. In caso contrario, si verificherà il ciclo di prova, ma non verranno visualizzati i risultati.

9. Visualizza l'avanzamento del trasferimento

Se desideri visualizzare lo stato di avanzamento del trasferimento, utilizza il –avanzamento opzione.

rsync A/ Backup-A-dir/ --progress

Il comando sopra mostrerà una barra di avanzamento simile a quella seguente:

$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. Comprimi e trasferisci dati

Se desideri risparmiare tempo e larghezza di banda della rete, puoi comprimere i dati da trasferire utilizzando -z opzione. Verrà decompresso automaticamente nella destinazione.

Questo trucco può far risparmiare molto tempo e costi di rete quando i dati da trasferire sono enormi. Dovrebbe essere evitato per file di piccole dimensioni poiché il sovraccarico di elaborazione supera il tempo totale.

rsync -z A/ Backup-A-dir/
Nota che dovresti evitare di usare -z opzione durante i trasferimenti locali e file di piccole dimensioni. Rallenta le cose inutilmente.

11. Copia ricorsivamente i file e le directory

Tutti i comandi precedenti copiano solo i file, non le sottodirectory (lo stesso caso con ogni comando Linux). Di conseguenza, i file all'interno di tali sottodirectory non vengono copiati. Questo può essere eliminato con la copia ricorsiva.

Per copiare ricorsivamente i file e le directory, -r è possibile utilizzare l'opzione.

rsync -r A/ Backup-A-dir/

12. Archivia e conserva i metadati

Se desideri preservare i collegamenti simbolici, i timestamp, i permessi dei file, la proprietà di utenti e gruppi dei file, -a è possibile utilizzare l'opzione.

rsync -a A/ Backup-A-dir/

Questa opzione include anche la funzionalità di -r opzione. Quindi copia ricorsivamente i file e conserva i metadati dei file copiati.

13. Imposta limite dimensione file

Per evitare il trasferimento di file di grandi dimensioni, puoi impostare un limite per le dimensioni dei file con l'aiuto di –max-size opzione. Questo ti aiuta a tenere sotto controllo la dimensione del file che verrà copiato.

rsync --max-size='100K' A/ Backup-A-dir/ 

14. Imposta limite di larghezza di banda

Se hai dei vincoli sulla velocità della rete, puoi specificarli con l'aiuto di –bwlimit opzione. bwlimit dovrebbe essere espresso in kbps .

rsync --bwlimit=100 A/ Backup-A-dir/

15. Riprendi il download con rsync

Se il download/trasferimento è incompleto, puoi utilizzare il comando rsync per mantenere i download incompleti in modo che il trasferimento possa riprendere la prossima volta che viene emesso lo stesso comando.

Per riprendere il trasferimento, –aggiungi è possibile utilizzare l'opzione.

rsync --append A /Backup-A-dir/

Questo thread di StackExchange è un'ottima risorsa per saperne di più su questo argomento.

Tutti i comandi precedenti sono di base e copiano il file in un unico flusso o processo. Se sono presenti 5 TB di dati e il trasferimento di 1 TB richiede 2 ore, l'intero trasferimento durerà 10 ore. Ma c'è un altro modo per velocizzare il trasferimento

Suggerimento bonus:accelerare Rsync/Trasferimento parallelo

parallelo è un'utilità GNU utilizzato per eseguire lavori in parallelo. Rsync può essere facilmente accoppiato con rsync .

Installa GNU parallel nel sistema Ubuntu/Debian usando

sudo apt install parallel

Prima di andare oltre, cerchiamo di capire come funziona il parallelo. Consideriamo un'analogia.

Supponiamo che ci siano 1000 uova e 100 cesti ciascuno con un drone. Il compito è consegnarlo ai clienti. Il manager assegna a ogni cestino 10 uova e ordina al drone di consegnare. Ogni drone esegue un'operazione (nel nostro caso un processo di rsync di 10 file). Il manager supervisiona tutti i droni. Nota che i droni non sapranno mai che ci sono altri lavori in parallelo. Solo il Manager lo fa.

Allo stesso modo, rsync esegue il trasferimento di file come un drone. parallel agisce come gestore.

parallelo divide i file da inviare e genera un numero specificato di processi di rsync ciascuno con un diverso elenco di file. parallel gestisce solo tutto il processo. rsync non ha alcuna conoscenza di altri processi in parallelo né ha una funzionalità di trasferimento parallelo. Parallel fornisce il trasferimento parallelo raggruppando le attività.

Quindi il comando parallelo è costituito da due parti che sono convogliate. Uno sono gli argomenti (uova/file) e l'altro è il comando parallelo (gestore).

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

Nel comando precedente, ogni file/directory in output come risultato del primo comando prima del simbolo '|' agisce come argomento. {} rappresenta l'argomento da sinistra nel comando parallelo.

-j n – Viene utilizzato per impostare n numero di lavori o lavoratori. Nel nostro caso, n è 20.
la parte successiva è il solito comando rsync per ogni argomento.
Dopo che i comandi sono stati generati, verranno raggruppati in 20 processi e verranno eseguiti in parallelo.

Nota che puoi aggiungere qualsiasi opzione al comando rsync sopra come faresti senza parallel. Basta aggiungere le opzioni rsync (come -z,-a,-e ssh) dopo la parola rsync nel comando precedente.

Se vuoi saperne di più sul parallelo, fai riferimento a questa pagina.

Errori comuni con rsync

Potresti riscontrare errori durante l'utilizzo di rsync. Di seguito sono riportati alcuni comuni insieme ai suggerimenti per la risoluzione dei problemi.

1. autorizzazione rsync negata

Questo è un errore che potrebbe verificarsi quando utilizzi percorsi per i quali non disponi dei diritti appropriati. Ad esempio:

rsync B/ /home/

Il comando precedente causerà un errore di autorizzazione negata, se non disponi delle autorizzazioni di scrittura su /home/ (gli utenti normali di solito non lo fanno)

2. rsync non è riuscito a impostare gli orari su

Ciò accade quando il file system non è in grado di gestire i tempi di modifica per file e directory. Puoi saperne di più su questa pagina.

Spero che tu abbia imparato alcuni buoni esempi di comando di sincronizzazione in questo articolo. Se hai suggerimenti o commenti, non esitare a scriverli qui sotto.


Linux
  1. Comando cp in Linux:7 esempi pratici

  2. Comando di arresto di Linux:5 esempi pratici

  3. 5 Esempi pratici del comando dd in Linux

  4. 10 esempi pratici di comandi Linux nm

  5. Comando Linux rsync con esempi pratici

12 Esempi pratici di In Command in Linux

15 esempi pratici di comando Rsync in Linux

5 esempi pratici di Tail Command in Linux

echo Command in Linux:7 esempi pratici

Esempi di comandi Linux rsync

Pratico comando Ping negli esempi di Linux