10 esempi utili del comando Linux rsync

Pubblicato: 2022-10-28
Laptop Linux che mostra un prompt bash
fatmawati achmad zaenuri/Shutterstock.com

Il comando Linux rsync è un potente strumento per la copia di file e la sincronizzazione delle cartelle. Ecco dieci casi d'uso comuni che potrai sfruttare al meglio sui tuoi sistemi.

Sommario

Lo strumento di sincronizzazione

Lo strumento rsync copia file e directory tra due computer. Utilizza un sofisticato algoritmo che esegue la scansione degli alberi di directory per trovare i file sul computer di origine che non esistono sul computer di destinazione. Questi file vengono trasmessi al computer di destinazione. Ciò che rende rync così intelligente è che può capire quali parti di file esistenti sono state modificate e invia solo le parti modificate .

È possibile utilizzare rsync per copiare i file in una posizione diversa sul disco rigido, in un disco rigido diverso nello stesso computer, in un'unità USB collegata esternamente o in qualsiasi altra posizione accessibile dalla rete.

Come eseguire il backup del tuo sistema Linux con rsync
CORRELATI Come eseguire il backup del sistema Linux con rsync

Inoltre, rsync può facoltativamente preservare collegamenti simbolici, collegamenti reali e metadati di file come proprietà del file, autorizzazioni e tempi di accesso. Per supportare tutte queste funzionalità, rsync ha molte opzioni e capirle tutte richiede tempo. Abbiamo raccolto questi 10 esempi per aiutarti a iniziare. Abbiamo già scritto sull'esecuzione di backup con rsync , quindi qui ci stiamo concentrando su altri usi.

Nonostante tutte le sue numerose opzioni, la struttura di un comando rsync è semplice. Dobbiamo fornire la fonte, la destinazione e le opzioni che vogliamo utilizzare. Probabilmente scoprirai che rsync è già installato sul tuo computer Linux - lo era, su tutte le nostre macchine di prova - ma se non lo è sarà sicuramente nei repository della tua distribuzione.

1. Copia i file in una directory diversa

Ecco un semplice esempio per farci andare avanti. Copieremo i file dalla directory "file-progetto" alla directory "Documenti". Stiamo usando due opzioni, l'opzione -a (archivio) e l'opzione -v (dettagliata). L'opzione dettagliata dice a rsync di spiegare cosa sta facendo mentre lo fa. L'opzione archive preserva la proprietà del file e alcuni altri elementi che esamineremo a breve.

Il formato del comando è options source-location destination-location .

 rsync -av /home/dave/file-di-progetto/ /home/dave/Documents/ 

Copia di file in directory diverse sullo stesso computer con rsync

L'utilizzo di ls nella cartella "Documenti" mostra che i file sono stati copiati.

Elencare i file nella directory dei documenti

Mentre rsync funziona, i file vengono elencati mentre vengono copiati. Ci viene detto:

  • Il numero di byte inviati.
  • Il numero di byte ricevuti. Prima che avvenga il trasferimento di file, rsync deve capire quali file devono essere trasferiti. Per fare ciò, alcune informazioni sui file nella destinazione devono essere recuperate da rsync . Queste informazioni sono contenute nei byte ricevuti.
  • La velocità del trasferimento.
  • La dimensione totale dei file copiati.
  • La "accelerazione". Questo è il rapporto tra la dimensione totale divisa per la somma dei byte inviati e ricevuti. Più alto è questo numero, più efficiente sarà il trasferimento.

Abbiamo modificato il file di testo nella directory di origine e ripetuto il comando rsync .

 rsync -av /home/dave/file-di-progetto/ /home/dave/Documents/ 

Copia di file in directory diverse sullo stesso computer con rsync

Questa volta l'unico file che deve essere aggiornato è il file di testo che abbiamo modificato. La cifra dell'accelerazione è ora 30.850. Questo è quanto è molto più efficiente copiare la parte modificata di quel singolo file, piuttosto che copiare tutti i file.

L'opzione -a (archivio) rappresenta in realtà una raccolta di altre opzioni. È come usare tutte queste opzioni:

  • r : lavora ricorsivamente attraverso gli alberi di directory nella directory di origine e copiali nella directory di destinazione, creandoli se non esistono già lì.
  • l : copia i collegamenti simbolici come collegamenti simbolici.
  • p : conserva i permessi dei file.
  • t : Conserva i tempi di modifica dei file.
  • g : conserva le autorizzazioni di gruppo.
  • o : conserva la proprietà del file.
  • D : Copia file speciali e file del dispositivo. I file speciali possono essere elementi incentrati sulla comunicazione trattati come file, come socket e pipe first-in, first-out (fifos). I file di dispositivo sono file speciali che forniscono l'accesso a dispositivi e pseudo-dispositivi.

Questa è una combinazione così usata di frequente che rsync fornisce l'opzione -a (archive) come un modo abbreviato per invocarle tutte.

2. Copiare una directory in una directory diversa

Se guardi il precedente comando rsync vedrai una barra finale "/" sul percorso del file della directory di origine. Questo è significativo. Dice a rsync di copiare il contenuto della directory. Se non fornisci la barra finale, rsync copierà la directory e il suo contenuto.

 rsync -av /home/dave/file-di-progetto /home/dave/Documents/ 

Copiare la directory e il suo contenuto in una directory diversa sullo stesso computer con rsync

Questa volta il nome della directory viene aggiunto al nome del file man mano che vengono elencati. Se guardiamo all'interno della directory di destinazione, vedremo che la cartella di origine è stata copiata con i file al suo interno.

 ls documenti/
 ls Documenti/file-progetto/ 

Elenca i file copiati nella directory trasferita

3. Copiare una directory su un'unità diversa

La copia di file in un'altra posizione sullo stesso disco rigido non offre protezione contro un guasto dell'unità. Se quell'unità rinuncia al fantasma, hai perso le copie di origine e destinazione di quei file. Copiarli su un altro disco rigido è un modo molto più robusto per proteggere i tuoi dati. Tutto ciò che dobbiamo fare è fornire il percorso corretto per l'unità di destinazione.

 rsync -av /home/dave/project-files /run/mount/drive2 

Copia di file su un disco rigido diverso nello stesso computer

Guardare l'altro disco rigido ci mostra che la directory e i file sono stati copiati su di esso.

 ls run/mount/drive2/project-files/ 

Elenca i file che sono stati copiati su un altro disco rigido nello stesso computer

CORRELATI: Cosa fare quando il disco rigido si guasta

4. Fare prima una corsa a secco

Prima di esaminare come rsync può eliminare i file in modo utile per noi, diamo un'occhiata a come possiamo fare in modo che rsync esegua un ciclo di prova.

In una corsa a vuoto, rsync esegue i movimenti per eseguire le azioni che abbiamo chiesto, ma in realtà non le esegue. Riporta cosa sarebbe successo se il comando fosse stato eseguito. In questo modo, possiamo assicurarci che il comando esegua esattamente ciò che ci aspettiamo.

Per forzare una corsa a secco usiamo l' --dry-run .

 rsync -av --dry-run /home/dave/geocoder /run/mount/drive2 

Esecuzione di una corsa a secco di un comando rsync

I file che sarebbero stati copiati vengono elencati per noi e otteniamo le solite statistiche, seguite dal messaggio (DRY RUN) in modo che sappiamo che non è successo nulla.

5. Eliminazione di file nella directory di destinazione

L'opzione --delete dice a rsync di eliminare i file e le directory nella directory di destinazione che non si trovano nella directory di origine. Ciò significa che la directory di destinazione sarà una copia esatta della directory di origine. Saremo prudenti e useremo prima l' --dry-run .

 rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2 

Esecuzione di una corsa a secco di un comando rsync che potrebbe eliminare file

Siamo informati che due file verranno eliminati. Se siamo sicuri che non ci interessa che verranno eliminati, possiamo rimuovere l' --dry-run ed eseguire il comando sul serio.

 rsync -av --delete /home/dave/geocoder /run/mount/drive2 

Copia di file e rimozione di file dalla directory di destinazione che non si trovano nella directory di origine

Questa volta i contenuti delle directory vengono sincronizzati e i due file extra vengono eliminati.

6. Eliminazione dei file di origine

Puoi scegliere di eliminare i file di origine dopo un trasferimento riuscito , facendo in modo che rsync funzioni più come una mossa che come una copia. Se il trasferimento non è andato a buon fine, i file di origine non vengono eliminati. L'opzione che dobbiamo usare è --remove-source-files .

 rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2 

Forzare rsync per eliminare i file di origine dopo un trasferimento riuscito

Si noti che i file possono essere eliminati anche se non vengono trasferiti file. Questo perché se rsync verifica e tutti i file sono già nella directory di destinazione e non c'è nulla da fare per rsync , rsync considera che un trasferimento riuscito.

Inoltre, rsync elimina solo i file dalla directory di origine. Non elimina la directory di origine né le sottodirectory, ma solo i file in esse contenuti. Possiamo vederlo usando l'opzione -R (ricorsiva) con ls , nella directory di origine.

 geocodificatore ls -R 

Un albero di directory vuoto dopo che rsync ha eliminato i file di origine

7. Copia i file su un computer remoto

Per sincronizzare le cartelle con un computer remoto, rsync deve essere installato su entrambi i computer. Configurare la comunicazione SSH tra i due computer prima di provare a utilizzare rsync sul computer remoto.

Come creare e installare chiavi SSH dalla shell di Linux
CORRELATI Come creare e installare chiavi SSH dalla shell di Linux

È necessario essere in grado di accedere in remoto come utente normale sul computer remoto affinché rsync funzioni. Non importa se utilizzi un ID e una password per accedere o se hai configurato chiavi SSH per un accesso sicuro senza password, ma se non riesci ad accedere come utente, rsync non funzionerà o.

Se accedi con una password, rsync ti chiederà la password. Se usi le chiavi SSH per accedere, il processo è senza soluzione di continuità.

L'unica cosa in più che devi fare è aggiungere il nome dell'account utente e l'indirizzo IP del computer remoto all'inizio del percorso del file di destinazione. Utilizzare un segno " @ " per separare il nome utente dal nome del computer o dall'indirizzo IP e i due punti " : " per separare il nome del computer o l'indirizzo IP dal percorso della directory.

Sulla nostra rete di prova, questi due comandi sono equivalenti.

 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads
 rsync -av /home/dave/geocoder [email protected]:/home/dave/Downloads 

Copia di file su un computer remoto tramite SSH con rsync

Riceviamo le stesse informazioni che ci vengono segnalate quando copiamo i file in locale.

8. Includere o escludere file o directory

È possibile che nella directory di origine siano presenti file e directory che non si desidera copiare sul computer di destinazione. Puoi escluderli usando l'opzione --exclude . In modo simile, puoi scegliere di includere file e directory specifici con l'opzione --include .

La stranezza è che se usi l'opzione --include da sola, tutti i file vengono copiati, come di consueto, compresi i file specificatamente inclusi. Per copiare solo i file inclusi devi --exclude tutto il resto.

Puoi usare tutte le opzioni --include e --exclude nel comando che desideri, ma assicurati di mettere le opzioni --include prima delle opzioni --exclude . Inoltre, assicurati di avere una barra finale nel percorso del file di origine.

Questo comando copia solo i file di codice sorgente C e i file di dati CSV sul computer di destinazione.

 rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder

Utilizzo di rsync per copiare i file selezionati su un disco rigido diverso sullo stesso computer

Gli unici file copiati sono quelli che abbiamo incluso in modo specifico.

9. Comprimi i file in trasferimento

L'opzione -z (comprimi) fa in modo che rsync comprima i file trasferiti. Tuttavia, non vengono archiviati come file compressi sul computer di destinazione, vengono compressi solo durante il trasferimento stesso. Questo può velocizzare lunghi trasferimenti.

 rsync -avz /home/dave/geocoder /run/mount/drive2 

Compressione dei file mentre vengono trasferiti con l'opzione -z rsync

10. Monitoraggio dei progressi

A proposito di trasferimenti lunghi, possiamo aggiungere alcune statistiche in modo da poter vedere l'andamento del trasferimento.

L'opzione -P (parziale, progresso) aggiunge in realtà due opzioni, --partial e --progress . L'opzione --partial dice a rsync di mantenere i file parzialmente trasferiti se un trasferimento fallisce. Ciò consente di risparmiare tempo al riavvio del trasferimento.

L'opzione --progress stampa, per ogni file, i dati trasferiti in byte e in percentuale, la velocità del trasferimento, il tempo impiegato, il numero del file da trasferire e il conteggio dei file rimanenti.

 rsync -aP /home/dave/geocoder /run/mount/drive2 

Utilizzando l'opzione -P per fornire statistiche per la trasmissione di ogni file

L'output scorre abbastanza rapidamente ed è difficile da leggere. Puoi migliorare leggermente le cose rimuovendo l'opzione -v (dettagliata) dal comando. Anche allora è ancora difficile da leggere mentre sfreccia.

Statistiche di trasferimento per ogni file trasferito

Spesso è più utile monitorare l'andamento del trasferimento complessivo. Puoi farlo con l'opzione –info e passandolo "progress2" come parametro.

 sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2 

Statistiche per il trasferimento complessivo di rsync

Questo fornisce un rapporto sullo stato di avanzamento che è effettivamente utile.

Come cp sugli steroidi

Il comando rsync è veloce, flessibile e vale il tempo necessario per familiarizzare con esso. La forma base di un comando rsync con le opzioni -av , la directory di origine e la directory di destinazione non è affatto difficile da ricordare.

Per molti casi d'uso, questo è tutto ciò di cui hai bisogno. Mettiti comodo e il resto verrà facilmente.

CORRELATI: Guida per non principianti alla sincronizzazione dei dati con Rsync