rsync o la sincronizzazione remota è un'utilità software per sistemi simili a Unix che sincronizza in modo efficiente file e directory tra due host o macchine. Uno è l'origine o l'host locale da cui verranno sincronizzati i file, l'altro è l'host remoto, su cui avverrà la sincronizzazione. Ci sono fondamentalmente due modi in cui rsync può copiare/sincronizzare i dati:
- Copia/sincronizzazione da/verso un altro host su qualsiasi shell remota come sss , rsh .
- Copia/sincronizzazione tramite il demone rsync utilizzando TCP.
Rsync è famoso per il suo algoritmo di trasferimento delta , in cui copia solo le differenze tra i file di origine presenti nell'host locale e i file esistenti nella destinazione o nell'host remoto.
Esempio:
inserisci la filigrana nella parola
rsync local-file user@remote-host:remote-file>
Che succede qui:
Rsync utilizzerà prima SSH per connettersi come fileuser>all'host remoto e richiederàuser's>parola d'ordine. Una volta connesso, invocherà l'rsync dell'host remoto, quindi i due programmi determineranno quali parti del file locale devono essere copiate in modo che il file remoto corrisponda a quello locale. Tieni presente il seguente comportamento di rsync:
- I file che non esistono sull'host remoto vengono copiati.
- I file che sono stati aggiornati verranno sincronizzati, rsync copierà solo le parti modificate dei file sull'host remoto.
- i file esattamente uguali non vengono copiati sull'host remoto.
Sintassi del comando `rsync` in Linux
rsync [options] source [destination]>
Opzione disponibile nel comando 'rsync' in Linux
| Opzioni | Descrizione |
|---|---|
| a, –archivio | Ciò equivale a utilizzare -rlptgoD . La modalità archivio include tutte le opzioni necessarie come la copia ricorsiva dei file, preservando quasi tutto (come collegamenti simbolici, autorizzazioni dei file, proprietà di utenti e gruppi e timestamp). |
| -v, –verboso | Per impostazione predefinita, rsync funziona in modo silenzioso. L'uso di una singola opzione -v fornisce informazioni sui file trasferiti e un riepilogo alla fine. L'aggiunta di due opzioni -v fornisce aggiornamenti di stato sulla trasmissione delta e sui file saltati, insieme a ulteriori informazioni alla fine. Più opzioni -v vengono generalmente utilizzate per il debug di rsync. |
| -h, –formato leggibile dall'uomo | Output in un formato leggibile dall'uomo. |
| -z, –comprimere | Comprimi i dati del file durante il trasferimento |
Esempi
Utilizzo di 'rsync' come comando di elenco
Se viene specificato solo il percorso di origine, il contenuto dell'origine viene elencato in un formato di output simile als -l>.
rsync foo/>
Il comando precedente elencherà i file e le directory presenti nella directory pippo .
Produzione:
Copia/Sincronizza file e directory localmente
Se né il percorso di origine né quello di destinazione specificano un host remoto, i comandi rsync si comportano come un comando di copia.
rsync -avh foo/ bar/>
Il comando precedente copierà/sincronizzerà tutti i file e le directory presenti nella directoryfoo>alla directory sbarra . Se la directory di destinazione non è presente (quibar>), rsync ne crea automaticamente uno e copia tutti i dati in esso contenuti.
filigrana in parola
Produzione:
Rsync usando ssh
Esistono due modi diversi con cui rsync può contattare un sistema remoto:
- Utilizzando un programma di shell remota come trasporto (come
ssh>(Secure Shell) orsh>(Shell remota)). - Contattare un demone rsync direttamente tramite TCP.
Qui discuteremo di rsync su ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/>
Per specificare il tipo di protocollo da utilizzare,-e>viene utilizzata l'opzione.
Produzione:
Rsync con particolari permessi di file
Se vogliamo sincronizzare i file con l'host locale o remoto modificando le autorizzazioni dei file. È necessario utilizzare il seguente comando.
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
Il comando precedente sincronizzerà tutti i file presenti nella directory /foo con i file presenti nella directory /tmp nelremote-host>con tutti i file di proprietà di USER con il gruppo GRUPPO.
Produzione:
Nota: ILuser>Egroup>deve essere già creato nell'host remoto.
Sincronizza con --ignore-existing-files>
Possiamo anche saltare i file già esistenti nella destinazione. Questo può generalmente essere utilizzato quando eseguiamo backup utilizzando il file –link-dest opzione, continuando un'esecuzione di backup che è stata interrotta.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Pertanto, tutti i file che non esistono nella destinazione verranno copiati. Qui ho cancellato il filegeeksforgeeks>cartella dalla directoryfoo>, quindi dovrebbe copiare solo il filegeeksforgeeks>directory.
Nota: Ciò non ignora le directory esistenti, altrimenti non verrà fatto nulla. Anche se sono presenti alcune modifiche in un file nell'host locale, non verrebbe comunque sincronizzato se fosse presente sull'host remoto.
Produzione:
Mostra i progressi durante il trasferimento
Per mostrare l'avanzamento durante il trasferimento dei dati dall'host locale all'host remoto, possiamo utilizzare-–progress>opzione.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
Una volta completato il trasferimento per un particolare file, rsync genera una riga di riepilogo come mostrato di seguito.
Java esegue il ciclo while
Produzione:
Nell'immagine sopra, se guardiamo il file/foo/file2>, ci dice questo
- Il file era lungo in totale 44 byte.
- La velocità media di trasferimento per l'intero file è stata di 42,97 kilobyte al secondo nei 0:00:00 secondi necessari per il completamento.
- È stato il secondo trasferimento in corso rsync sessione.
- Ci sono altri 10 file che l'host remoto deve controllare (per vedere se sono aggiornati o meno) rimanenti sui 13 file totali nell'elenco dei file.
Se vogliamo copiare i file sull'host remoto che sono stati aggiornati più recentemente sul filesystem locale. È fatto -aggiornamento bandiera. Il comportamento ora è questo:
- I file che non esistono sull'host remoto vengono copiati.
- I file che esistono sia in locale che in remoto ma che hanno un timestamp più recente sull'host locale vengono copiati sull'host remoto. (Al contrario, i file con un timestamp precedente non vengono copiati).
Ecco, ho apportato alcune modifiche a file1 E file2 , ma i cambiamenti in file2 sono stati fatti di recente. Solo così file2 verranno sincronizzati.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Produzione: 
Elimina automaticamente i file dall'host locale dopo il trasferimento riuscito
Ora, supponiamo di avere un server web e un server di backup e di aver creato un backup giornaliero e di averlo sincronizzato con il nostro server di backup e quindi di non voler conservare la copia locale del backup nel nostro server web. Quindi, invece di eliminarlo manualmente dopo il trasferimento riuscito, possiamo utilizzare il file--remove-source-files>flag per eliminare automaticamente i file dal server web.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Produzione:
jlist
Nota: Ciò eliminerà solo i file e non le directory.
Elimina i file che sono stati eliminati sull'host locale
Se ci sono alcuni file che vengono eliminati sull'host locale e vogliamo che vengano aggiornati anche sull'host remoto, allora dobbiamo utilizzare il comando--delete>opzione.
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Produzione:
Ecco file1 , file2 , file3 sono stati eliminati sull'host locale e, come si può vedere, vengono aggiornati anche sull'host remoto.
Nota: ` rsync` non elimina automaticamente i file per sincronizzare le directory presenti su entrambi i lati.
Esecuzione di un'esecuzione di prova con 'rsync'.
Un'esecuzione di prova fa sì che `rsync` esegua un'esecuzione di prova che non apporta alcuna modifica e visualizza quasi lo stesso output di un'esecuzione reale. Viene generalmente utilizzato con le opzioni -v, –verbose e/o -i, –itemize-changes in modo da vedere cosa farebbe un comando `rsync` prima di eseguirlo effettivamente.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Produzione:
Conclusione
In questo articolo abbiamo discusso del comando rsync in Linux che è uno strumento versatile e potente per sincronizzare file e directory tra host o macchine. Con il suo algoritmo di trasferimento delta e varie opzioni, offre un'efficiente sincronizzazione dei dati, funzionalità di backup e gestione del trasferimento di file. Padroneggiando il comando rsync, gli utenti Linux possono garantire la coerenza dei file, ottimizzare la trasmissione dei dati e semplificare i flussi di lavoro di gestione dei dati.