Qualcuno può spiegare questo comando rsync per me?


11

Qualcuno può dirmi cosa fa questo?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

Elimina bkp01e offbk2invia un registro offbkp01.log?


Non riesce a leggere le pagine man. Cosa ti fa pensare che stia leggendo le risposte qui? XD
Twinkles,

2
Chi ha bisogno di pagine man quando hai spiegatohell.com/… ?!
Tom,

Risposte:


33

Per dividere questo in parti, ci sono due sezioni principali, seguite da un riepilogo e note:

  • Il rsynccomando:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • il reindirizzamento dell'output eseguito dalla shell che esegue il comando rsync:
    rsync-command > ~/offbkp01.log

rsync comando:

Comando di base:

  • rsync - Presumo che ciò non abbia bisogno di spiegazioni (ma fornirà se richiesto).

Opzioni di comando:

  • -uva - Un set di opzioni per singolo personaggio, essendo (mostrato in forma breve e lunga):

    • -u --update- Indica a rsync che tutte le modifiche dovrebbero applicarsi solo ai file sulla destinazione che hanno la stessa età (e dimensioni diverse) o più vecchi di quelli sulla fonte. Cioè, rsync dovrebbe solo trasmettere le modifiche dall'origine che aggiornerebbe la destinazione, ma non dovrebbe apportare alcuna modifica che farebbe diventare un file di destinazione una versione precedente.

      Ci sono alcune eccezioni. Le differenze di tipo (ad esempio, uno è un file, l'altro è una directory) causerà un aggiornamento indipendentemente dalle date. Symlink e altri file speciali ignorano questa opzione. E, soprattutto, questo non influisce su quali file vengono eliminati.

    • -v --verbose- Aumenta la quantità di informazioni che rsync stampa durante l'esecuzione. Senza questo, rsync non stamperà (quasi?) Nulla. Con questa opzione così com'è, rsync ti dirà quali file vengono trasferiti e metterà un riepilogo alla fine. Più vs aumenta le informazioni stampate, anche se la pagina man dice che più di due vs dovrebbero essere usate solo durante il debug.
    • -a --archive- Ciò equivale a diverse altre opzioni ( -rlptgD) impacchettate insieme. Come suggerisce il nome lungo, è un modo rapido per impostare molte opzioni comuni per l'archiviazione di file e directory. Lo farà:
      • -r --recursive- Indica a rsync di copiare ricorsivamente le directory. Senza questa o l' -d --dirsopzione più particolare , rsync salterebbe semplicemente tutte le directory che ha incontrato (e te ne parlerebbe nel suo output).
      • -l --links- Quando l'origine è un collegamento simbolico, creare un collegamento simbolico sulla destinazione. A seconda di altre opzioni, i collegamenti simbolici potrebbero altrimenti essere saltati o trasformati in una copia completamente separata (ad es. Una directory vera con contenuto (o un'altra copia del file) invece del collegamento simbolico).
      • -p --perms - Imposta le autorizzazioni dei file di destinazione sugli stessi dei file di origine.
      • -t --times- Imposta i tempi di modifica dei file di destinazione sugli stessi dei file di origine. Poiché mantenere questi tempi sincronizzati rende l'algoritmo rsync più efficiente, generalmente si desidera sempre che questo sia usato, esplicitamente o implicitamente.
      • -g --group- Imposta l'attributo di gruppo della destinazione sullo stesso dell'origine. Associato per nome per impostazione predefinita, ma in alcuni casi tornerà al numero ID del gruppo. Se rsync ricevente non viene eseguito come superutente (o fingendolo --fake-super), è possibile impostare solo i gruppi di cui l'utente che ha invocato rsync sul lato ricevente può essere impostato. Altrimenti, il gruppo verrà semplicemente impostato sul gruppo predefinito dello stesso utente menzionato in precedenza.
      • -D- Equivalente alle opzioni --devicese --specialsinsieme. Intendono:
        • --devices- Vengono trasferiti i file dei dispositivi a caratteri e blocchi. Non ha alcun effetto se rsync ricevente non viene eseguito come superutente (o fingendolo --fake-super).
        • --specials - Vengono trasferiti file speciali (come socket) (altrimenti non lo sarebbero).
  • --delete- Indica a rsync di eliminare i file che si trovano sulla destinazione, ma non sull'origine. Questo NON è influenzato dall'opzione di aggiornamento impostata sopra (anzi, come potrebbe essere poiché la maggior parte dei file system non conserva i dati necessari per vedere quale azione è stata più recente?). Questa opzione agisce sui sorgenti dopo l' espansione jolly / glob, quindi dir / * non è lo stesso di dir /. Alcune note importanti:
    • Questo, ovviamente, è pericoloso. Probabilmente dovresti provarlo prima con l' --dry-runopzione, che farà un finto trasferimento che ti consente di assicurarti che non vengano apportate modifiche indesiderate.
    • Se ci sono errori I / O (input / output) - ovvero, se qualcosa va storto trasferendo, leggendo o scrivendo le modifiche - l'eliminazione verrà ignorata da quel punto in poi. Questo può essere ignorato con l' --ignore-errorsopzione, anche se probabilmente non vorrai / non vorrai farlo.
    • Esistono diverse varianti dell'algoritmo di eliminazione, di cui puoi leggere di più nella pagina man. Quando rsync ricevente è la versione 3.0.0 o successiva (al momento della stesura di questo documento) --delete-duringviene utilizzato l' algoritmo. Se il ricevitore è più vecchio, --delete-beforeviene utilizzato. Se è importante che i file mantengano un certo tipo di coerenza in caso si verifichi un errore (come non eliminare nulla fino a quando non vengono apportate tutte le altre modifiche), è necessario utilizzare un'opzione più specifica di quella predefinita.

Posizioni dei comandi:

  • /srv/bkp01- Il file o la directory di origine. Ci sono alcune regole dettagliate su cosa significhi se c'è / non è una barra alla fine della directory e se esiste l'altra directory. Puoi vedere la sezione USAGE della pagina man per i dettagli, ma qui la mancanza di una barra finale significa che questa directory verrà copiata nella destinazione, piuttosto che il contenuto di questa directory verrà copiato nella destinazione. Lo stesso se questo è un file anziché una directory.
  • /srv/offbk2/- La directory di destinazione. In generale, questo sarà sempre l'ultimo elemento elencato nella sezione comandi rsync a meno che non venga utilizzata un'opzione per specificarlo altrove nel comando.

Reindirizzamento dell'output di Shell:

Comandi Shell:

  • >- Questo reindirizza stdout (l'output standard) da qualsiasi cosa sia a sinistra al file a destra, diventando il suo contenuto e creando il file (se possibile) se non esiste già. Alcune note:
    • Puoi anche reindirizzare stderr (l'output di errore standard) allo stesso file aggiungendo 2>&1alla fine del comando sopra. L'ordine è importante, quindi fai attenzione generalizzando dove metterlo. Il numero magico si 1riferisce a stdout, si 2riferisce a stderr, &è (essenzialmente) "l'indirizzo di" e lo snippet di comando completo significa "reindirizzare l'output di stderr nel flusso stdout".
    • Se si desidera aggiungere al file di registro invece di sostituirlo, è possibile utilizzare >>invece. Il metodo per reindirizzare stderr nello stesso posto rimane lo stesso.
    • Puoi inviare stdout e stderr in luoghi diversi usando 1> stdout_file 2> stderr_file. Puoi anche usare >>invece di >quel comando per farlo aggiungendo invece di sostituire.

Variabili di shell / simboli speciali:

  • ~ - Questa è una scorciatoia per la home directory dell'utente corrente e fa parte del bit successivo.

Posizioni a livello di shell:

  • ~/offbkp01.log- il file offbkp01.log nella home directory dell'utente corrente. Questo è dove l'output del comando rsync verrà inserito a causa del reindirizzamento con >.

Sommario:

In breve, questo comando:

  • Copia tutti i normali file, directory, collegamenti simbolici, file speciali e file del dispositivo
  • così come la maggior parte, se non tutti, importanti attributi di file ,
  • da /srv/bkp01 ,
  • a /srv/offbk2/bkp01 ,
  • e cancellerà tutto ciò /srv/offbk2/che non è in/srv/bkp01 , con le seguenti condizioni:

    • Se un normale file, directory o link simbolico (?) Ha un tempo di modifica su /srv/offbk2/ che è più recente rispetto al suo tempo di modifica su /srv/bkp01, esso non verrà aggiornato , se entrambe le voci sono ancora dello stesso tipo (normale file, directory o link simbolico (? )).
  • Inoltre, rsync stamperà alcune informazioni su ciò che sta facendo (in particolare, quali file vengono trasferiti e un riepilogo finale ), che la shell scriverà nel file ~/offbkp01.log . Il file di registro verrà creato di nuovo se non esiste già e verrà sovrascritto se esiste già.


NB: --fake-superè un'opzione utilizzata per far sì che rsync simuli le attività dei super-utenti. Lo fa utilizzando gli attributi estesi dei file per memorizzare gli attributi che non è possibile impostare senza avere maggiori privilegi. La versione reale di ciascun attributo è impostata su qualsiasi cosa abbia senso date le opzioni e i privilegi disponibili. Sebbene ciò renda conveniente eseguire alcuni backup anche se non si dispone dei privilegi di superutente, si dovrebbe anche notare che potrebbe comportare un rischio per la sicurezza maggiore dell'uso di rsync in generale, poiché gli attributi di sicurezza reali potrebbero non essere impostati correttamente, anche se è stato eseguito il backup delle informazioni su di essi.


Fonte: molto tempo lavorando con rsync e leggendo la sua pagina di manuale .


8
Questo è un primo post impressionante. Spero che rimani in giro!
terdon,

Io secondo @terdon .. Accidenti! è in fiamme. Continua a fare un buon lavoro amico. Questa è davvero una risposta impressionante.
AzkerM,

La risposta sembra essere "Sherlock Holmes", adoro il tuo stile di spiegazione.
Rahul Patil,

9

Dal manuale:

--Elimina

Questo dice a rsync di eliminare i file estranei dal lato di ricezione (quelli che non si trovano sul lato di invio), ma solo per le directory che vengono sincronizzate. È necessario avere rsync per inviare l'intera directory (ad esempio "dir" o "dir /") senza utilizzare un carattere jolly per il contenuto della directory (ad esempio "dir / *") poiché il carattere jolly viene espanso dalla shell e rsync riceve quindi una richiesta per trasferire singoli file, non la directory principale dei file. I file esclusi dal trasferimento sono anche esclusi dall'eliminazione a meno che non si usi l'opzione --delete-excluded o si contrassegni le regole come corrispondenti solo sul lato di invio (vedere i modificatori di inclusione / esclusione nella sezione REGOLE DI FILTRO).

Quindi eliminerà i file dalla destinazione che non fanno parte della directory originale se non si utilizzano i caratteri jolly.

Directory di origine:

1.txt
2.txt
3.txt

Directory di destinazione:

4.txt

4.txt scomparirà dopo rsync e 1.txt, 2.txt e 3.txt saranno sulla destinazione.


Per quanto riguarda le altre cose:

uva
  • aggiorna i file
  • verboso: echo i risultati al terminale (es. reindirizzamento al file di registro, quindi sì all'ultima domanda)
  • archivio: modalità archivio; è uguale a -rlptgoD (no -H, -A, -X)


3

No, elimina solo i file estranei dalla bkp01directory.

Anche:

  • -u, --update- salta i file più recenti sul ricevitore
  • -v, --verbose- aumentare la verbosità
  • -a, --archive- modalità archivio; è uguale a -rlptgoD (no -H, -A, -X)

L'output del rsync -uva --delete /srv/bkp01 /srv/offbk2/comando viene inviato al ~/offbkp01.logfile utilizzando l' operatore di reindirizzamento ( >) anziché essere stampato nel terminale. Se il file non esiste verrà creato. Se il file esiste, il vecchio contenuto verrà cancellato.

Vedi man rsyncper maggiori informazioni.


3
Non elimina nulla da bkp01. Elimina solo file estranei, ovvero quelli che non esistono nella sorgente, dalla destinazione.
Matt Nordhoff,

Nessun file verrà eliminato da bkp01.
Xavier J,

1
rsync 

Copia file remota - Sincronizza gli alberi dei file su dischi, directory locali o attraverso una rete.

-u update 

-v verbose

-a archive


--delete --> delete

Qui eliminerà i file all'interno di offbk2 .

Quindi l'output del risultato (corretto o meno) verrà reindirizzato a quel file di registro.


Nessun file verrà eliminato da bkp01.
Xavier J,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.