GNU/Linux >> Znalost Linux >  >> Linux

Příklady Rsync pro přenos souborů v Linuxu

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.


Linux
  1. 14 Příklady příkazů SCP pro bezpečný přenos souborů v systému Linux

  2. Linuxový příkaz rsync s praktickými příklady

  3. Příklady příkazů diff v Linuxu

  1. 25 Užitečné hledání Příkaz Praktické příklady v Linuxu

  2. Linux ekvivalentní k robocopy?

  3. linuxové sloučení složek:rsync?

  1. Příkaz Rsync:20 užitečných příkladů v Linuxu

  2. Praktické příklady příkazu rsync v Linuxu

  3. Jak přenášet soubory v Linuxu pomocí SCP a Rsync