rsync nebo vzdálená synchronizace je softwarový nástroj pro systémy typu Unix, který efektivně synchronizuje soubory a adresáře mezi dvěma hostiteli nebo počítači. Jedním je zdroj nebo místní hostitel, ze kterého budou soubory synchronizovány, druhým je vzdálený hostitel, na kterém bude synchronizace probíhat. V zásadě existují dva způsoby, jak rsync umí kopírovat/synchronizovat data:
- Kopírování/synchronizace do/z jiného hostitele přes libovolný vzdálený shell ssh , rsh .
- Kopírování/synchronizace pomocí démona rsync pomocí TCP.
Rsync je známý pro své delta-přenosový algoritmus , ve kterém zkopíruje pouze rozdíly mezi zdrojovými soubory přítomnými v místním hostiteli a existujícími soubory v cílovém nebo vzdáleném hostiteli.
Příklad:
rsync local-file user@remote-host:remote-file>
Co se tu stalo:
Rsync nejprve použije SSH k připojení jakouser>na vzdálený hostitel a požádá ouser's>Heslo. Po připojení vyvolá rsync vzdáleného hostitele a poté oba programy určí, jaké části místního souboru je třeba zkopírovat, aby se vzdálený soubor shodoval s místním. Vezměte prosím na vědomí následující chování rsync:
- Soubory, které na vzdáleném hostiteli neexistují, se zkopírují.
- Soubory, které byly aktualizovány, budou synchronizovány, rsync zkopíruje pouze změněné části souborů na vzdálený hostitel.
- soubory, které jsou přesně stejné, nejsou zkopírovány do vzdáleného hostitele.
Syntaxe příkazu `rsync` v Linuxu
rsync [options] source [destination]>
Volba k dispozici v příkazu `rsync` v Linuxu
| Možnosti | Popis |
|---|---|
| a, –archiv | To je ekvivalentní použití -rlptgoD . Režim archivace obsahuje všechny potřebné možnosti, jako je rekurzivní kopírování souborů, zachování téměř všeho (jako jsou symbolické odkazy, oprávnění k souborům, vlastnictví uživatelů a skupin a časová razítka). |
| -v, –verbose | Ve výchozím nastavení rsync funguje tiše. Použití jediné volby -v poskytuje informace o přenesených souborech a shrnutí na konci. Přidání dvou voleb -v poskytuje aktualizace stavu delta-přenosu a přeskočených souborů spolu s dalšími informacemi na konci. Pro ladění rsync se obvykle používá více voleb -v. |
| -h, –formát čitelný člověkem | Výstupy ve formátu čitelném pro člověka. |
| -z, –komprimovat | Během přenosu komprimujte data souboru |
Příklady
Použití `rsync` jako příkazu seznamu
Pokud je zadána pouze zdrojová cesta, obsah zdroje je uveden ve výstupním formátu podobnémls -l>.
rsync foo/>
Výše uvedený příkaz zobrazí seznam souborů a adresářů přítomných v adresáři foo .
Výstup:
Kopírovat/synchronizovat soubory a adresář lokálně
Pokud ani zdrojová ani cílová cesta neurčuje vzdáleného hostitele, příkazy rsync se chovají jako příkaz kopírování.
rsync -avh foo/ bar/>
Výše uvedený příkaz zkopíruje/synchronizuje všechny soubory a adresáře v adresářifoo>do adresáře bar . Pokud cílový adresář není k dispozici (zdebar>), rsync automaticky vytvoří jeden a zkopíruje všechna data v něm.
Výstup:
Rsync pomocí ssh
Existují dva různé způsoby, jak může rsync kontaktovat vzdálený systém:
- Použití programu vzdáleného prostředí jako přenosu (např
ssh>(Secure Shell) popřrsh>(Vzdálený Shell)). - Kontaktování démona rsync přímo přes TCP.
Zde budeme diskutovat o rsync přes ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/>
Chcete-li určit typ protokolu, který se má použít,-e>možnost se používá.
Výstup:
Rsync s konkrétními oprávněními k souboru
Pokud chceme synchronizovat soubory s místním nebo vzdáleným hostitelem s oprávněními měněných souborů. Musí být použit následující příkaz.
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
Výše uvedený příkaz synchronizuje všechny soubory v adresáři /foo se soubory přítomnými v adresáři /tmp vremote-host>se všemi soubory vlastněnými USER se skupinou GROUP.
Výstup:
Poznámka: Theuser>agroup>musí být již vytvořen ve vzdáleném hostiteli.
Rsync s --ignore-existing-files>
Můžeme také přeskočit již existující soubory v cíli. To lze obecně použít, když provádíme zálohování pomocí –odkaz-cíl možnost, zatímco budete pokračovat v zálohování, které bylo přerušeno.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Takže všechny soubory, které v cíli neexistují, budou zkopírovány. Zde jsem smazalgeeksforgeeks>složku z adresářefoo>, takže by měl kopírovat pouzegeeksforgeeks>adresář.
Poznámka: To neignoruje existující adresáře, jinak se nic neudělá. I když jsou nějaké změny v souboru v místním hostiteli, stále by se nesynchronizoval, pokud je přítomen na vzdáleném hostiteli.
Výstup:
Zobrazit průběh během přenosu
Pro zobrazení průběhu přenosu dat z místního hostitele na vzdálený hostitel můžeme použít-–progress>volba.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
Po dokončení přenosu pro konkrétní soubor rsync vypíše souhrnný řádek, jak je znázorněno níže.
Výstup:
Na obrázku výše, pokud se podíváme na soubor/foo/file2>, říká nám to
- Soubor byl celkem dlouhý 44 bajtů.
- Průměrná rychlost přenosu celého souboru byla 42,97 kilobajtů za sekundu během 0:00:00 sekund, které trvalo dokončení.
- Byl to druhý převod během proudu rsync zasedání.
- Z celkových 13 souborů v seznamu souborů zbývá 10 dalších souborů ke kontrole (aby se zjistilo, zda jsou aktuální nebo ne).
Pokud chceme kopírovat soubory přes vzdálený hostitel, které byly nedávno aktualizovány na místním souborovém systému. Je hotovo s -Aktualizace vlajka. Chování je nyní takto:
- Soubory, které na vzdáleném hostiteli neexistují, se zkopírují.
- Soubory, které existují na místním i vzdáleném počítači, ale mají novější časové razítko na místním hostiteli, se zkopírují do vzdáleného hostitele. (Naopak soubory, které mají starší časové razítko, se nekopírují).
Zde jsem provedl nějaké změny soubor1 a soubor2 , ale změny v soubor2 byly provedeny nedávno. Takže jedině soubor2 bude synchronizován.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Výstup: 
Automaticky odstranit soubory z místního hostitele po úspěšném přenosu
Nyní předpokládejme, že máme webový server a záložní server a vytvořili jsme denní zálohu a synchronizovali ji s naším záložním serverem a pak nechceme uchovávat místní kopii zálohy na našem webovém serveru. Takže místo ručního mazání po úspěšném přenosu můžeme použít--remove-source-files>příznak pro automatické odstranění souborů z webového serveru.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Výstup:
Poznámka: Tím se odstraní pouze soubory, nikoli adresáře.
Odstraňte soubory, které byly odstraněny na místním hostiteli
Pokud jsou některé soubory odstraněny na místním hostiteli a chceme, aby byly aktualizovány i na vzdáleném hostiteli, musíme použít--delete>volba.
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Výstup:

singleton design
Tak tady soubor1 , soubor2 , soubor3 byly odstraněny na místním hostiteli a jak je vidět, jsou aktualizovány i na vzdáleném hostiteli.
Poznámka: ` rsync` neodstraní soubory automaticky, aby se synchronizovaly adresáře na obou stranách.
Provedení suchého běhu pomocí `rsync`
Dry run způsobí, že `rsync` provede zkušební běh, který neprovede žádné změny a zobrazí téměř stejný výstup jako skutečný běh. Obecně se používá s volbami -v, –verbose a/nebo -i, –itemize-changes, abyste viděli, co by příkaz `rsync` udělal, než jej skutečně spustíte.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Výstup:
Závěr
V tomto článku jsme diskutovali o příkazu rsync v Linuxu, což je všestranný a výkonný nástroj pro synchronizaci souborů a adresářů mezi hostiteli nebo počítači. Se svým algoritmem delta přenosu a různými možnostmi nabízí efektivní synchronizaci dat, možnosti zálohování a správu přenosu souborů. Zvládnutím příkazu rsync mohou uživatelé Linuxu zajistit konzistenci souborů, optimalizovat přenos dat a zefektivnit své pracovní postupy správy dat.