16 Praktické příklady příkazu Rsync v Linuxu
Rsync (Remote Sync) je nejběžněji používaný příkaz pro kopírování a synchronizaci souborů a adresářů vzdáleně i lokálně v systémech Linux/Unix.
Pomocí příkazu rsync můžete vzdáleně i lokálně kopírovat a synchronizovat data napříč adresáři, disky a sítěmi, provádět zálohy dat a zrcadlit je mezi dvěma počítači se systémem Linux.
Tento článek vysvětluje 16 základních a pokročilých použití příkazu rsync pro vzdálený a místní přenos souborů v počítačích Linux. Ke spuštění příkazu rsync nemusíte být uživatelem root.
Výhody příkazu Rsync
Nabízí několik výhod, včetně:
- Efektivní přenos souborů – rsync používá algoritmus delta přenosu, což znamená, že přenáší pouze rozdíly mezi zdrojovými a cílovými soubory, což výrazně snižuje množství přenášených dat, což je efektivní pro synchronizaci velkých souborů nebo adresářů.
- Vzdálená synchronizace souborů – rsync podporuje místní i vzdálené přenosy souborů přes SSH, což umožňuje synchronizaci mezi místními a vzdálenými systémy nebo zrcadlení adresářů na více počítačích.
- Přírůstkové zálohy – rsync se dobře hodí pro přírůstkové zálohy, protože efektivně vytváří a aktualizuje zálohy přenosem pouze nových nebo upravených souborů.
- Zachovává oprávnění souborů – rsync dokáže zachovat různé atributy souborů, jako jsou oprávnění, vlastnictví, časová razítka a symbolické odkazy, což zajišťuje, že si zkopírované soubory zachovají své původní vlastnosti v cíli.
- Řízení šířky pásma – rsync umožňuje omezit využití šířky pásma během přenosu souborů, protože při odesílání a přijímání dat na obou koncích používá metodu komprese a dekomprese.
- Rychlejší – rsync může být rychlejší než scp (Secure Copy) pro přenos souborů, zejména při synchronizaci velkých adresářů nebo při práci se soubory, které již byly částečně přeneseny nebo existují v cílovém umístění.
Syntaxe příkazu Rsync
Příkaz rsync má následující syntaxi:
rsync [OPTIONS] SOURCE DESTINATION
Zde je vysvětlení různých komponent a možností používaných s příkazy rsync:
-v
– Podrobný výstup zobrazující podrobné informace o přenosu.-r
– kopíruje data rekurzivně (ale nezachovává časová razítka a oprávnění při přenosu dat.-a
– režim archivace, který umožňuje rekurzivní kopírování souborů a také zachovává symbolické odkazy, oprávnění k souborům, vlastnictví uživatelů a skupin a časová razítka.-z
– Komprimujte soubory během přenosu, abyste snížili využití sítě.-h
– čitelná pro člověka, výstupní čísla ve formátu čitelném pro člověka.-P
– Zobrazí průběh přenosu.SOURCE
– Určuje zdrojový soubor(y) nebo adresář, který se má přenést, což může být místní nebo vzdálené umístění.DESTINATION
– Určuje cílovou cestu, kam budou soubory nebo adresáře zkopírovány. Podobně jako u zdroje to může být místní cesta nebo vzdálené umístění.
Nainstalujte Rsync v systému Linux
Balíček rsync můžeme nainstalovat pomocí následujícího správce balíčků podle vaší distribuce Linuxu.
sudo apt install rsync [On Debian, Ubuntu and Mint]
sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/rsync [On Gentoo Linux]
sudo apk add rsync [On Alpine Linux]
sudo pacman -S rsync [On Arch Linux]
sudo zypper install rsync [On OpenSUSE]
1. Zkopírujte/synchronizujte soubor lokálně
Chcete-li zkopírovat nebo synchronizovat soubor lokálně, můžete použít následující příkaz, který synchronizuje jeden soubor na místním počítači z jednoho umístění do jiného.
Zde v tomto příkladu je třeba název souboru backup.tar zkopírovat nebo synchronizovat do složky /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/
created directory /tmp/backups
backup.tar.gz
sent 224.54K bytes received 70 bytes 449.21K bytes/sec
total size is 224.40K speedup is 1.00
Ve výše uvedeném příkladu můžete vidět, že pokud cíl ještě neexistuje, rsync automaticky vytvoří adresář pro cíl.
2. Lokálně kopírovat/synchronizovat adresář
Následující příkaz přenese nebo synchronizuje všechny soubory z jednoho adresáře do jiného adresáře na stejném počítači.
Zde v tomto příkladu /root/rpmpkgs obsahuje některé soubory balíčků rpm a chcete, aby byl tento adresář zkopírován do složky /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.47M bytes received 96 bytes 2.32M bytes/sec
total size is 3.74M speedup is 1.08
3. Zkopírujte adresář z místního na vzdálený server
Chcete-li zkopírovat adresář z místního serveru na vzdálený server, můžete použít následující příkaz, který synchronizuje adresář z místního na vzdálený počítač.
Například pokud je ve vašem místním počítači složka „rpmpkgs “, která obsahuje nějaké balíčky RPM, a pokud chcete, aby obsah místního adresáře odeslal na vzdálený server, můžete použít následující příkaz.
rsync -avzh /root/rpmpkgs [email :/root/
The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email 's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.74M bytes received 96 bytes 439.88K bytes/sec
total size is 3.74M speedup is 1.00
4. Zkopírujte adresář ze vzdáleného na místní server
Tento příkaz vám pomůže synchronizovat vzdálený adresář s místním adresářem. Zde v tomto příkladu je adresář /root/rpmpkgs, který je na vzdáleném serveru, zkopírován do vašeho místního počítače v /tmp/myrpms.
rsync -avzh [email :/root/rpmpkgs /tmp/myrpms
[email 's password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 104 bytes received 3.49M bytes 997.68K bytes/sec
total size is 3.74M speedup is 1.07
5. Rsync přes SSH
S rsync můžeme pro přenos dat použít SSH (Secure Shell), pomocí protokolu SSH při přenosu našich dat můžete mít jistotu, že vaše data budou přenášena v zabezpečeném připojení se šifrováním, aby nikdo nemohl číst vaše data, když jsou přenášena po internetu.
Také když používáme rsync, potřebujeme zadat heslo user/root, abychom mohli provést tento konkrétní úkol, takže pomocí SSH odešle vaše přihlašovací údaje šifrovaným způsobem, takže vaše heslo bude v bezpečí.
Chcete-li použít rsync přes SSH, můžete pomocí volby -e
zadat příkaz vzdáleného shellu, což je obvykle ssh, jak je znázorněno.
rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Zkopírujte soubor ze vzdáleného serveru na lokální server pomocí SSH
Chcete-li synchronizovat soubor ze vzdáleného serveru na místní server, můžete zadat protokol pomocí rsync pomocí možnosti „-e “ s názvem protokolu, který chcete použít.
Zde v tomto příkladu použijeme „ssh “ s možností „-e “ a provedeme přenos dat.
rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp
[email 's password:
receiving incremental file list
anaconda-ks.cfg
sent 43 bytes received 1.10K bytes 325.43 bytes/sec
total size is 1.90K speedup is 1.67
7. Zkopírujte soubor z místního serveru na vzdálený server pomocí SSH
Chcete-li synchronizovat soubor z místního serveru na vzdálený server pomocí SSH, můžete využít následující příkaz, jak je znázorněno.
rsync -avzhe ssh backup.tar.gz [email :/backups/
[email 's password:
sending incremental file list
created directory /backups
backup.tar.gz
sent 224.59K bytes received 66 bytes 64.19K bytes/sec
total size is 224.40K speedup is 1.00
8. Zobrazte průběh přenosu dat pomocí Rsync
Pro zobrazení průběhu přenosu dat z jednoho počítače do jiného můžeme použít volbu ‚--progress'
, která zobrazuje soubory a čas zbývající do dokončení přenosu.
rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs
[email 's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5)
sent 3.74M bytes received 96 bytes 1.50M bytes/sec
total size is 3.74M speedup is 1.00
9. Zahrňte soubory s konkrétní příponou do Rsync
Chcete-li během operace rsync zahrnout konkrétní soubory nebo vzory, můžete použít možnost --include
s příponou, která odpovídá všem souborům.
rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
V uvedeném příkladu rsync během přenosu zahrne pouze soubory s příponou .txt
z adresáře /path/to/source/.
10. Vylučte soubory s konkrétní příponou pomocí Rsync
Podobně, chcete-li vyloučit konkrétní rozšíření během operace rsync, můžete použít možnost --exclude
se vzorem zástupných znaků.
rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
V uvedeném příkladu rsync během přenosu vyloučí soubory se zadanou příponou (*.ext)
, přičemž zahrne všechny ostatní soubory a adresáře.
11. Zahrnout a vyloučit soubory pomocí Rsync
Chcete-li zahrnout a vyloučit konkrétní soubory nebo vzory během operace rsync, můžete použít obě možnosti --include
a --exclude
s příslušnými zástupnými vzory.
Tyto dvě možnosti nám umožňují zahrnout a vyloučit soubory zadáním parametrů tato možnost nám pomáhá určit soubory nebo adresáře, které chcete zahrnout do synchronizace, a vyloučit soubory a složky se kterým nechcete být převedeni.
V tomto příkladu příkaz rsync zahrne pouze ty soubory a adresáře, které začínají ‘R‘
a vyloučí všechny ostatní soubory a adresáře.
rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm
12. Použití –delete Option s Rsync
Pokud soubor nebo adresář ve zdroji neexistuje, ale v cíli již existuje, můžete tento existující soubor/adresář v cíli během synchronizace odstranit.
K odstranění souborů, které nejsou ve zdrojovém adresáři, můžeme použít volbu ‚--delete
‘.
Zdroj a cíl jsou synchronizovány. Nyní vytvořte nový soubor test.txt v cíli.
[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/
[email 's password:
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003
sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec
total size is 71,151,616 speedup is 3.84
Cíl má nový soubor s názvem test.txt při synchronizaci se zdrojem pomocí možnosti '–delete
' odstranil soubor test.txt .
13. Nastavte limit přenosu souborů pomocí Rsync
Můžete určit Max velikost souboru, který se má přenést nebo synchronizovat. Můžete to udělat pomocí možnosti „--max-size
“. Zde v tomto příkladu je maximální velikost souboru 200 kB, takže tento příkaz přenese pouze soubory, které jsou rovné nebo menší než 200 k.
rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm
[email 's password:
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002
sent 129.52K bytes received 396 bytes 28.87K bytes/sec
total size is 71.15M speedup is 547.66
14. Po přenosu automaticky odstranit zdrojové soubory
Nyní předpokládejme, že máte hlavní webový server a server pro zálohování dat, vytvořili jste denní zálohu a synchronizovali ji se záložním serverem, ale nyní nechcete tuto místní kopii zálohy uchovávat na svém webovém serveru.
Budete tedy čekat na dokončení přenosu a poté ručně odstranit tento místní záložní soubor? Jistě, že ne. Toto automatické smazání lze provést pomocí možnosti „--remove-source-files
“.
rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/
[email 's password:
backup.tar.gz
sent 795 bytes received 2.33K bytes 894.29 bytes/sec
total size is 267.30K speedup is 85.40
[root@tecmint:~]# ls -l backup.tar.gz
ls: cannot access 'backup.tar.gz': No such file or directory
15. Proveďte suchý běh s Rsync
Pokud jste nováček pomocí rsync a nevíte, co přesně váš příkaz udělá. Rsync může opravdu zkazit věci ve vaší cílové složce a pak může být vrácení zpět únavná práce.
Použití této možnosti neprovede žádné změny v souborech a zobrazí výstup příkazu, pokud výstup ukazuje přesně totéž, co chcete udělat, můžete odstranit '--dry-run
' z vašeho příkazu a spusťte na terminálu.
rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/
[email 's password:
backup.tar.gz
sent 50 bytes received 19 bytes 19.71 bytes/sec
total size is 267.30K speedup is 3,873.97 (DRY RUN)
16. Rsync Nastavte limit šířky pásma a přeneste soubor
Pomocí možnosti „--bwlimit
“ můžete nastavit limit šířky pásma při přenosu dat z jednoho stroje do druhého. Tato možnost nám pomáhá omezit šířku pásma I/O.
rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email :/root/tmprpm/
[email 's password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05
Ve výchozím nastavení rsync také synchronizuje pouze změněné bloky a bajty, pokud výslovně chcete synchronizovat celý soubor, použijte s ním možnost „-W“.
rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
Závěr
Tím náš přehled rsync a jeho možností končí. Pro další prozkoumání jeho rozsáhlých možností a funkcí vám doporučuji nahlédnout do obsáhlých manuálových stránek (manových stránek), které jsou k dispozici.