V operačním systému Linux „rsync“ znamená R emote S synchronizovat Je to nástroj používaný k synchronizaci (kopírování) souborů a adresářů ze zdroje (SRC) do cíle (DEST).
Soubory a adresáře lze synchronizovat na místním hostiteli nebo do/ze vzdáleného hostitele. Na SRC budou soubory a adresáře synchronizovány. Zatímco na DEST dojde k synchronizaci souborů a adresářů.
Kromě toho může příkaz rsync rekurzivně kopírovat soubory a adresáře, kopírovat symbolické odkazy, zachovat (oprávnění, skupinu, čas úpravy a vlastnictví) identitu souboru.
Rsync může používat dva různé způsoby synchronizace/kopírování souborů nebo adresářů:
- Použijte vzdálený shell:ssh nebo rsh
- Používejte démona rsync přímo přes TCP
Ještě více, rsync používá algoritmus delta-transfer, který pouze kopíruje/synchronizuje různá data mezi SRC a DEST.
Tento tutoriál projde mnoha způsoby použití příkazu rsync prostřednictvím praktických postupů a příkladů. Vysvětlíme také podrobně nejběžnější možnosti příkazu rsync.
Syntaxe příkazu Rsync
Než se pustíme hlouběji do způsobů použití příkazu rsync, podívejme se na jeho syntaxi:
rsync [options] <SRC_PATH> <DEST_PATH>
1. Kopírovat/synchronizovat soubor na místním počítači
Příkaz Rsync lze použít ke kopírování/synchronizaci souboru na vašem místním počítači.
Za předpokladu, že chcete zkopírovat soubor z domovského adresáře uživatele 'linoxide' s názvem '/home/linoxide' do složky '/opt/test'.
$ sudo rsync -zvh /home/linoxide/computer-networking.pdf /opt/test/
computer-networking.pdf
sent 1.01K bytes received 35 bytes 2.10K bytes/sec
total size is 3.03K speedup is 2.89
Kde:
-z
:komprimovat
-v
:podrobně uveďte výstup
-h
:čitelné pro člověka
2. Kopírovat/synchronizovat adresář na místním počítači
Chcete-li přenést všechny soubory z místního adresáře SRC do adresáře DEST, spusťte příkaz rsync s volbou -zavh
.
Za předpokladu, že chcete zkopírovat domovský adresář uživatele 'linoxide' s názvem '/home/linoxide' do složky '/opt/backup'.
$ sudo rsync -zavh /home/linoxide/ /opt/backup/
sending incremental file list
./
.bash_history
.bash_logout
.bashrc
.lesshst
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
.ssh/
.ssh/known_hosts
sent 4.85K bytes received 198 bytes 10.10K bytes/sec
total size is 9.59K speedup is 1.90
Kde:
-a
:archivace dat během procesu kopírování/synchronizace
Můžete ověřit, zda byl příkaz rsync úspěšný nebo ne? Spusťte níže uvedený příkaz:
$ ls /opt/backup/ -la
total 40
drwxr-xr-x 3 linoxide linoxide 4096 Thg 6 15 16:02 .
drwxr-xr-x 4 root root 4096 Thg 6 15 16:25 ..
-rw------- 1 linoxide linoxide 817 Thg 6 15 16:01 .bash_history
-rw-r--r-- 1 linoxide linoxide 220 Thg 6 11 15:58 .bash_logout
-rw-r--r-- 1 linoxide linoxide 3771 Thg 6 11 15:58 .bashrc
-rw-rw-r-- 1 linoxide linoxide 3028 Thg 2 25 2017 computer-networking.pdf
-rw------- 1 linoxide linoxide 40 Thg 6 15 15:51 .lesshst
-rw-r--r-- 1 linoxide linoxide 807 Thg 6 11 15:58 .profile
drwx------ 2 linoxide linoxide 4096 Thg 6 13 17:58 .ssh
-rw-r--r-- 1 linoxide linoxide 0 Thg 6 15 16:02 .sudo_as_admin_successful
-rw------- 1 linoxide linoxide 680 Thg 6 14 16:50 .viminfo
3. Rsync přes ssh s konkrétním portem
Pro kopírování/synchronizaci dat můžete použít ssh (secure shell), vaše data budou přenášena v zabezpečeném spojení se šifrováním. Nikdo nemůže číst vaše data, když jsou přenášena na internetu. Když použijete příkaz rsync, musíte zadat heslo uživatele/root, abyste mohli provést konkrétní úkol. Použití možnosti SSH odešle vaše přihlašovací údaje šifrovaným způsobem, takže vaše heslo bude v bezpečí.
Zkopírujte soubor ze vzdáleného do místního se specifickým portem ssh. Chcete-li zadat protokol pomocí příkazu rsync, musíte použít -e
možnost s názvem protokolu, který chcete použít.
Například následující příkaz rsync zkopíruje soubor 'deploy.yaml' přes vzdálený shell ze vzdáleného počítače do domovského adresáře uživatele 'linoxide'.
Heslo$ rsync -avz -e "ssh -p 22" [email protected]:/home/cas/deploy.yaml /home/linoxide/
[email protected]'s password:
receiving incremental file list
sent 20 bytes received 60 bytes 32.00 bytes/sec
total size is 239 speedup is 2.99
4. Kopírování/synchronizace souborů a adresářů z místního počítače na vzdálený počítač
Předpokládejme, že chcete zkopírovat/synchronizovat složku 'test-data' v domovském adresáři uživatele 'linoxide' v místním hostiteli do domovského adresáře vzdáleného počítače '[email protected]', spusťte příkaz:
$ rsync -azrvh /home/linoxide/computer-networking.pdf [email protected]:
[email protected]'s password:
sending incremental file list
computer-networking.pdf
sent 1.04K bytes received 35 bytes 430.80 bytes/sec
total size is 3.03K speedup is 2.81
Kde:
-r
:rekurzivní kopie
5. Kopírování/synchronizace souborů a adresářů ze vzdáleného počítače do místního počítače
Příkaz rsync vám pomůže přenést vzdálený adresář 'dokument' ke zkopírování do vašeho místního hostitele.
Za předpokladu, že chcete kopírovat/synchronizovat soubory/adresáře ze vzdáleného hostitele '[email protected]' do domovského adresáře uživatele 'linoxide'.
Například:
$ rsync -zavhr [email protected]:document /home/linoxide
[email protected]'s password:
receiving incremental file list
document/
document/kubernetes.txt
sent 47 bytes received 139 bytes 74.40 bytes/sec
total size is 0 speedup is 0.00
6. Možnosti Rsync -include a -exclude
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, které nechcete přenést.
Zde v tomto příkladu příkaz rsync zahrne pouze ty soubory a adresář, které začínají na 'k' a vyloučí všechny ostatní soubory a adresáře.
$ rsync -avhz -e "ssh -p 22" --include 'k*' --exclude '*' [email protected]: /home/linoxide
[email protected]'s password:
receiving incremental file list
./
k8s.yaml
kubernetes.yaml
kuber/
sent 88 bytes received 280 bytes 147.20 bytes/sec
total size is 73 speedup is 0.20
7. Nastavte maximální velikost souborů
Můžete určit maximální velikost souboru, který se má přenést nebo synchronizovat. Můžete to udělat pomocí možnosti '--max-size'.
V následujícím 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 kB.
$ rsync -zavhr --max-size='200k' [email protected]: /home/linoxide
[email protected]'s password:
receiving incremental file list
.bash_history
.bash_logout
.bashrc
.profile
.sudo_as_admin_successful
.viminfo
computer-networking.pdf
sent 2.58K bytes received 51.60K bytes 21.67K bytes/sec
total size is 113.24K speedup is 2.09
8. Po úspěšném přenosu smažte zdrojové soubory
Nyní předpokládejme, že máte webový server a server pro zálohování dat, vytvořili jste denní zálohu a synchronizovali ji se záložním serverem, nyní nechcete mít tuto místní kopii zálohy 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í volby '--remove-source-files'.
$ ls /home/directory
computer-networking.pdf deploy.yaml document k8s.yaml kuber kubernetes.yaml
------
$ rsync -azvh --remove-source-files /home/linoxide/deploy.yaml [email protected]:
[email protected]'s password:
sending incremental file list
sent 70 bytes received 20 bytes 36.00 bytes/sec
total size is 239 speedup is 2.66
Spusťte znovu příkaz 'ls', uvidíte, že soubor 'deploy.yaml' byl odstraněn na SRC.
$ ls
computer-networking.pdf document k8s.yaml kuber kubernetes.yaml
9. Najděte rozdíl v souborech a adresářích mezi SRC a DEST
Chcete-li najít jakýkoli rozdíl v souborech adresářů mezi SRC a DEST, můžete spustit příkaz rsync s volbou '-i'.
Heslo uživatele$ rsync -avzi /home/linoxide/cloud [email protected]:
[email protected]'s password:
sending incremental file list
cd+++++++++ cloud/
<f+++++++++ cloud/computer-networking.pdf
<f+++++++++ cloud/k8s.yaml
<f+++++++++ cloud/kubernetes.yaml
cd+++++++++ cloud/document/
<f+++++++++ cloud/document/kubernetes.txt
cd+++++++++ cloud/kuber/
<f+++++++++ cloud/kuber/test.txt
sent 1,472 bytes received 127 bytes 1,066.00 bytes/sec
total size is 3,101 speedup is 1.94
10. Omezte šířku pásma
Omezení šířky pásma při spuštění příkazu rsync můžete nastavit pomocí možnosti '--bwlimit=
Za předpokladu, že chcete omezit rychlost přenosu dat na 300 KB/s, spusťte příkaz:
$ rsync -avzh --bwlimit=300 /home/linoxide/coursera.png [email protected]:
[email protected]'s password:
sending incremental file list
coursera.png
sent 2.93M bytes received 35 bytes 234.48K bytes/sec
total size is 3.00M speedup is 1.02
11. Obnovit přenos, když selhal v scp
Někdy musíte přenést velmi velký soubor pomocí příkazu scp, ale při kopírování došlo k chybě a nebylo možné znovu spustit přenos pomocí příkazu scp kvůli velké velikosti souboru a časové náročnosti.
V této situaci můžete použít příkaz rsync ke spuštění kopírování souboru z místa, kde došlo k chybě. Například zkopírování velkého souboru ISO z domovského adresáře na vzdálený hostitel '[email protected]'
$ scp /home/linoxide/ubuntu-18.04.4-live-server-amd64.iso [email protected]:
[email protected]'s password:
ubuntu-18.04.4-live-server-amd64.iso 32% 278MB 86.7MB/s 00:06 ETA
Proces byl ukončen uživatelem. V té době bylo přeneseno 32 % souboru. Nyní můžete pokračovat v aktuální práci spuštěním rsync:
$ rsync -P -avzh ubuntu-18.04.4-live-server-amd64.iso [email protected]:
[email protected]'s password:
sending incremental file list
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 15.89MB/s 0:00:54 (xfr#1, to-chk=0/1)
sent 541.25M bytes received 132.44K bytes 9.25M bytes/sec
total size is 912.26M speedup is 1.69
12. Zobrazení průběhu přenosu dat
Pokud chcete vidět průběh přenosu při spuštění příkazu rsync, můžete použít volbu '--progress'.
Zobrazí soubory a čas zbývající do dokončení kopírování.
Například:
$ rsync -avh --progress /home/linoxide/cloud/ [email protected]:
[email protected]'s password:
sending incremental file list
./
computer-networking.pdf
3.03K 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=8/10)
coursera.png
3.00M 100% 114.38MB/s 0:00:00 (xfr#2, to-chk=7/10)
k8s.yaml
39 100% 1.52kB/s 0:00:00 (xfr#3, to-chk=6/10)
kubernetes.yaml
34 100% 1.33kB/s 0:00:00 (xfr#4, to-chk=5/10)
ubuntu-18.04.4-live-server-amd64.iso
912.26M 100% 89.60MB/s 0:00:09 (xfr#5, to-chk=4/10)
document/
document/kubernetes.txt
0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=1/10)
kuber/
kuber/test.txt
0 100% 0.00kB/s 0:00:00 (xfr#7, to-chk=0/10)
sent 915.49M bytes received 164 bytes 79.61M bytes/sec
total size is 915.26M speedup is 1.00
Závěr
V tomto tutoriálu jsme se naučili používat příkaz rsync s několika příklady pro kopírování nebo synchronizaci souborů/adresářů.
Děkujeme za přečtení a zanechte prosím svůj návrh v sekci komentářů níže.