Průvodce Rysnc a 11 příkladů, jak jej efektivně používat
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ů.
Table of Contents
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.
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ý.
Lokálně rekurzivně kopírujte adresáře
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ů.
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 vám umožňuje určit konkrétní protokoly přenosu souborů. Chcete-li to provést, musíte použít volbu -e a poté protokol.
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
Suchý běh Rsync
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.