Vyhledávání na webu

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.