Použití příkazu rsync k synchronizaci souborů a adresářů [11 Examples]

rsync je bezplatný nástroj příkazového řádku, který umožňuje synchronizovat soubory lokálně i vzdáleně. S ním můžete přenášet soubory a adresáře.

Díky tomu je velmi užitečný pro migraci dat, provádění zálohování a zrcadlení, takže je skvělý pro webmastery a administrátory pro opakující se úlohy přenosu dat.

Tento článek nás naučí, jak Rysnc funguje, a uvede několik užitečných příkladů.

Jak rsync funguje?

rsync je nástroj příkazového řádku pro vzdálenou synchronizaci pro systémy podobné Unixu. Poskytuje uživateli možnost bezproblémově přenášet/synchronizovat soubory mezi počítači nebo dvěma hostiteli.

Pod kapotou rsync používá algoritmus delta-transfer. Tento algoritmus zahrnuje kopírování rozdílů mezi dvěma soubory přes dva hostitele (zdrojový a cílový). Zdroj a cíl mohou být místní nebo vzdálené. Příkaz rsync může provádět úlohy kopírování/synchronizace dat dvěma způsoby. Tyto jsou:

  • Ke kopírování/synchronizaci mezi dvěma hostiteli použijte ssh, rsh.
  • Pro kopírování/synchronizaci použijte démona TCP rsync.

Protože je navržen pro práci v systémech podobných Unixu, funguje také v Linuxu.

Proces krok za krokem rsync používá následující:

  • Rsync používá SSH pro připojení ke vzdálenému hostiteli a žádá o heslo.
  • Po připojení rsync vzdáleného hostitele komunikuje se zdrojem.
  • Tyto programy pak určí soubory a adresáře, které potřebují synchronizaci. Ke kontrole rozdílu mezi soubory používá algoritmus delta přenosu.

Pokud příkaz rsync nenajde soubor na vzdáleném zařízení, ale ne na hostiteli, zkopíruje jej a přenese do hostitelského systému. Podobně pro již existující soubory (na hostiteli i na vzdáleném počítači) zkopíruje rozdíl mezi nimi (tj. změněné části). Nakonec bude ignorovat existující soubory na obou systémech bez jakýchkoli úprav.

Příkaz rsync dosahuje přírůstkových aktualizací uložením rozdílu do dočasného souboru před jeho odesláním do cíle.

Než začneš:

  • Musíte mít oprávnění root nebo sudo
  • Mít přístup k terminálu/příkazovému řádku
  • SSH přístup pro bezpečné spouštění příkazů rsync
  • K vytvoření rsync potřebujete také dva stroje.

Pro tutoriál použijeme Linux Mint 21.1 Vera. Příručku můžete snadno bez problémů sledovat pomocí jakékoli jiné distribuce Linuxu.

Proč používat rsync Over Scp?

Scp (secure copy) je populární protokol příkazového řádku, který uživatelům umožňuje kopírovat soubory. Dodržuje lineární přístup ke kopírování. To znamená, že jednoduše zkopíruje soubory ze zdroje do cíle. Aby to bylo bezpečné, používá SSH.

Syntaxe příkazu scp je následující:

scp option SOURCE DESTINATION

Otázkou však zůstává, proč používat rsync přes scp?

No, používání rsync má několik výhod. Mezi tyto výhody patří:

  • Rychlejší provádění: rsync je rychlejší než scp, protože používá protokol vzdálené aktualizace. To mu umožňuje přenášet pouze rozdíly spíše než celý soubor. Pokud tedy nastavíte pravidelnou synchronizaci v průběhu času, musíte napoprvé provést pouze úplnou kopii. Od příště pouze kopíruje aktualizované části pomocí algoritmu delta-transfer.
  • Menší spotřeba šířky pásma: Protože rsync nemusí znovu kopírovat celý soubor, vede to k menší spotřebě šířky pásma. Kromě toho také používá kompresní/dekompresní algoritmy pro minimalizaci velikosti souboru během přenosu.
  • Více možností příkazového řádku: rsync také překonává scp v počtu možností příkazového řádku. To znamená, že můžete doladit rsync více než scp.

Závěrem lze říci, že rsync je vynikající nástroj pro inkrementální synchronizaci. Nástroj scp je také užitečný pro bezpečný přenos/synchronizaci souborů. Ve scénáři reálného světa je scp vhodný pro každodenní úkoly, pokud hledáte přímočařejší přístup. Pro opakující se úkoly však použijte rsync.

  Ukládejte články, obrázky a soubory PDF do Dropboxu nebo na Disk Google [Chrome]

Syntaxe příkazu rsync

Příkaz rsync je následující:

Zde jsou pojmy definovány níže:

  • OPTION – Toto jsou možnosti rsync
  • SOURCE – Zdrojový adresář
  • DEST – Cílový adresář
  • USER – Vzdálené uživatelské jméno
  • HOST – Vzdálený název hostitele nebo IP adresa

Možnosti jsou parametry, které k příkazu nabízejí další funkce. Data můžete například rekurzivně synchronizovat s volbou -r. Volba -r však nesynchronizuje vlastnictví skupin a uživatelů, časová razítka, oprávnění nebo symbolické odkazy. Místo toho můžete použít volbu -a, která spustí příkaz v archivním režimu a zajistí, že při kopírování budou zachována všechna vlastnictví, oprávnění a symbolické odkazy souboru.

Mezi další možnosti rsync patří:

  • -z: komprimuje data pro úsporu místa
  • -h: poskytuje výstup ve formátu čitelném pro člověka
  • -b: provede zálohu během procesu synchronizace dat
  • -e: použití protokolu SSH pro vzdálené přenosy dat
  • -progress: zobrazí průběh synchronizace dat
  • -v: požádá rsync o zobrazení podrobného výstupu
  • –n: proveďte zkušební provoz, abyste otestovali nastavení a nastavení pro synchronizaci dat
  • -q: potlačí výstup a volby příkazu rsync

Instalace rsync

Většina systémů Unix a Linux je dodávána s nainstalovaným rsync. Pokud váš systém nemá rsync, můžete jej nainstalovat pomocí následujících příkazů.

Pro Debian/Ubuntu a Mint

sudo apt-get install rsync

Pro Arch Linux

pacman -S rsync

Na Gentoo

emerge sys-apps/rsync

Na CentOS/Fedora/REHL

sudo yum install rsync

Na openSUSE

sudo zypper install rsync

Jelikož máme Linux Mint, rsync byl předinstalovaný. Můžete tedy spustit příkaz rsync v terminálu a zjistit, zda je nainstalován. Vysvětlí jeho možnosti, možnosti a další důležité informace, pokud jsou přítomny.

nitt ~
$ rsync
rsync  version 3.2.3  protocol version 31
Copyright (C) 1996-2020 by Andrew Tridgell, Wayne Davison, and others.
Web site: https://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, hardlink-specials, symlinks, IPv6, atimes,
    batchfiles, inplace, append, ACLs, xattrs, optional protect-args, iconv,
    symtimes, prealloc, stop-at, no crtimes
Optimizations:
    SIMD, no asm, openssl-crypto
Checksum list:
    xxh128 xxh3 xxh64 (xxhash) md5 md4 none
Compress list:
    zstd lz4 zlibx zlib none

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

rsync is a file transfer program capable of efficient remote update
via a fast differencing algorithm.

Podívejme se nyní na rsync v akci s různými případy použití.

Pro tutoriál vytvoříme dva adresáře.

  • zdrojový-adresář
  • cílový-adresář

K tomu musíte zadat následující příkazy.

mkdir source-directory
mkdir dest-directory

Také budeme muset vygenerovat soubory, aby rsync fungoval. Pojďme tedy pomocí příkazu níže vytvořit nějaké testovací soubory.

touch source-directory/file{1..100}

Tím se ve zdrojovém adresáři vytvoří 100 prázdných souborů. Můžete to potvrdit zadáním příkazu níže.

ls source-directory
Output:
nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ touch source-directory/file{1..100}
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

Poznámka: Cílový adresář jsme ponechali prázdný.

Kopírovat adresáře lokálně rekurzivně

I když se rsync primárně zaměřuje na kopírování souborů mezi místním a vzdáleným serverem, je stejně užitečný pro místní kopírování souborů.

  Co se stalo s aplikací Monkey?

V tomto případě použijeme následující syntaxi rsync.

rsync možnost ZDROJ DESTINACE

Zkopírujte soubory v našem zdrojovém adresáři do cílového adresáře spuštěním následujícího příkazu.

rsync -r source-directory/ dest-directory

Zde příkaz „rekurzivně“ zkopíruje soubory ze zdrojového adresáře do cílového adresáře.

nitt rsync-tutorial
$ ls
dest-directory  source-directory
nitt rsync-tutorial
$ ls dest-directory
nitt rsync-tutorial
$ ls source-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99
nitt rsync-tutorial
$ rsync -r source-directory/ dest-directory
nitt rsync-tutorial
$ ls dest-directory
file1    file18  file27  file36  file45  file54  file63  file72  file81  file90
file10   file19  file28  file37  file46  file55  file64  file73  file82  file91
file100  file2   file29  file38  file47  file56  file65  file74  file83  file92
file11   file20  file3   file39  file48  file57  file66  file75  file84  file93
file12   file21  file30  file4   file49  file58  file67  file76  file85  file94
file13   file22  file31  file40  file5   file59  file68  file77  file86  file95
file14   file23  file32  file41  file50  file6   file69  file78  file87  file96
file15   file24  file33  file42  file51  file60  file7   file79  file88  file97
file16   file25  file34  file43  file52  file61  file70  file8   file89  file98
file17   file26  file35  file44  file53  file62  file71  file80  file9   file99

To zkopíruje každý jednotlivý soubor ve zdrojovém-adresáři do cílového-adresáře.

Lokálně zkopírujte jeden soubor

Nyní, když jsme se naučili, jak synchronizovat dva adresáře, naučíme se, jak zkopírovat jeden soubor.

Za tímto účelem upravíme prázdný soubor file1 ve zdrojovém adresáři a poté jej synchronizujeme se stejným souborem v cílovém adresáři.

Chcete-li upravit soubor, zadejte následující příkaz.

nano source-directory/file1

Nyní zkopírujte a vložte následující text do nano editoru.

We're updating file1 in the source-directory.
Once we update, we'll push the new update to the dest-directory.
rsync doesn't need to re-copy the file using the delta-transfer algorithm.
This algorithm checks the differences and then updates destination files
accordingly.
So, once you save file1 in the source-directory, open file1 in
the dest-directory. It'll be empty.
However, if we check it after running rsync, you'll see that file1 in dest-directory
is updated.

Přidání obsahu do souboru

Nyní zavřete a uložte soubor.

Nyní zkopírujeme soubor pomocí rsync.

sudo rsync -v --existing source-directory/file1 /dest-directory
#Output
nitt rsync-tutorial
$ sudo rsync -v --existing source-directory/file1 dest-directory
file1

sent 557 bytes  received 35 bytes  1,184.00 bytes/sec
total size is 474  speedup is 0.80

nitt rsync-tutorial
$ 

Jak jste si možná všimli, použili jsme –existující možnost. Tím se aktualizují stávající soubory. Pokud příkaz spustíte bez –existující, nebude se aktualizovat, přestože běží úspěšně.

Pokud jediný soubor, který kopírujete, v cílové složce neexistuje, musíte spustit následující příkaz.

rsync -v source-directory/newfile dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile dest-directory
newfile

sent 82 bytes  received 35 bytes  234.00 bytes/sec
total size is 0  speedup is 0.00

Kopírování více souborů

Pokud máte v úmyslu kopírovat více souborů, musíte uvést zdrojové cesty obou souborů a za nimi cílový adresář.

Za tímto účelem vytvoříme ve zdrojovém adresáři dva nové soubory: newfile2 a newfile3. Chcete-li to provést, spusťte následující příkaz.

touch source-directory/newfile{2..3}

Nyní použijte následující příkaz k synchronizaci více souborů.

rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
#Output
nitt rsync-tutorial
$ rsync -v source-directory/newfile2 source-directory/newfile3 dest-directory
newfile2
newfile3

sent 135 bytes  received 54 bytes  378.00 bytes/sec
total size is 0  speedup is 0.00
nitt rsync-tutorial
$ 

Zkopírujte soubor nebo adresář z místního na vzdálený

Syntaxe rsync pro místní na vzdálený přenos je uvedena níže.

rsync option SOURCE [email protected]:DEST

Jak vidíte, potřebujete znát IP adresu vzdáleného stroje, aby to fungovalo. Za zdrojový soubor musíte také přidat adresu IP.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Před zahájením přenosu se zeptá na heslo. Chcete-li pokračovat, zadejte jej. Pokud je uživatel na vzdáleném počítači jiný, musíte jej uvést před adresou IP následovanou znakem @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Pokud máte v úmyslu zkopírovat více souborů nebo adresářů, musíte uvést seznam souborů nebo cest k adresářům. Jeho syntaxe je níže.

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Protokoly specifické pro vzdálený přenos

rsync umožňuje zadat konkrétní protokoly přenosu souborů. Chcete-li to provést, musíte použít volbu -e a poté protokol.

  Jak hrát Total War: ROME II na Linuxu

Chcete-li například použít protokol ssh, musíte k příkazu rsync přidat -e ssh.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Kopírování souboru nebo adresáře ze vzdáleného do místního

Syntaxe rsync pro místní na vzdálený přenos je uvedena níže.

sync option [email protected]:SRC DEST

Toto funguje jako požadavek na stažení. Chcete-li získat požadované soubory/adresáře ze vzdáleného serveru na váš místní počítač, musíte spustit následující příkaz.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Příkaz stáhne soubory z cílového adresáře vzdáleného počítače do zdrojového adresáře místního počítače.

Podobně můžete vytáhnout konkrétní soubor tak, že jej zmíníte v celé jeho cestě.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Chcete-li zkopírovat více souborů nebo adresářů z místního na vzdálený, musíte zadat cestu ve složených závorkách (oddělených čárkami) za IP adresou serveru.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Podobně můžete zmínit i soubory.

Zobrazit aktuální průběh během přenosu

U větších záloh dat je dobré vidět aktuální průběh. K tomu musíte použít příznak –progress. Připojte jej k příkazu rsync a uvidíte rychlost přenosu, zbývající čas a množství přenesených dat.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Po dokončení přenosu smažte zdrojové soubory

K odstranění zdrojových souborů po dokončení přenosu můžete použít příznak -remove-source-files. To vám může pomoci v mnoha situacích, zejména pokud jde o zabezpečení souborů bez zanechání jakékoli stopy nebo jejich pouhým použitím k uvolnění místa.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

rsync suchý běh

Rysnc vám také umožňuje vyhodnotit, než provedete skutečný běh. Suchý běh vám umožní zjistit, zda děláte správnou věc. Přece nechcete soubory omylem aktualizovat nebo dokonce mazat.

Chcete-li provést běh nasucho, musíte použít volbu –dry-run. Přidejte jej do příkazu a poté zdroj a cíl.

sudo rsync -v --dry-run source-directory/file1 dest-directory
nitt rsync-tutorial
$ sudo rsync -v --dry-run source-directory/file1 dest-directory
file1

sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 474  speedup is 7.65 (DRY RUN)
nitt rsync-tutorial

Výstup je podobný tomu, jak jsme jej spustili dříve. Na konci výstupu si však všimnete zmínky o (DRY RUN).

Nastavte minimální a maximální velikost souboru

Rysnc také umožňuje nastavit minimální nebo maximální velikost souboru během přenosu.

Pokud tedy chcete přenášet s minimální velikostí 15KB, musíte použít –min-size=15K.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Příkaz zkopíruje pouze soubory s minimální velikostí souboru 15 kB. Pokud je velikost souboru nižší, bude to ignorovat.

Podobně můžete použít příznak –max-size k nastavení maximální velikosti souboru.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Zde bude rsync ignorovat soubory větší než 450 kB.

Nastavte limit šířky pásma

Pokud provádíte jiné úlohy náročné na šířku pásma, můžete nastavit rysnc pro nastavení limitu šířky pásma pro přenos. Chcete-li to provést, použijte –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Zde nastavíme při přenosu šířku pásma na 100 Kb/s.

Závěrečná slova

Tím se dostáváme na konec našeho průvodce příkazy rsync. Naučili jsme se používat rysnc a efektivně jsme pokryli spoustu příkazů.

Rysnc však nabízí mnohem více, než co jsme pokryli. Proto také možná budete chtít projít manuálovou stránku rsync, kde jsou pokryty všechny aspekty rsync.

Dále se podívejte na cheaty příkazového řádku pro Windows, Linux a macOS.