Użycie polecenia rsync do synchronizacji plików i katalogów [11 Examples]

rsync to bezpłatne narzędzie wiersza poleceń, które umożliwia lokalną i zdalną synchronizację plików. Dzięki niemu możesz przesyłać pliki i katalogi.

Dzięki temu jest bardzo przydatny do migracji danych, wykonywania kopii zapasowych i tworzenia kopii lustrzanych, dzięki czemu doskonale nadaje się dla webmasterów i administratorów do powtarzających się zadań związanych z przesyłaniem danych.

Ten artykuł nauczy nas, jak działa Rysnc i poda kilka pomocnych przykładów.

Jak działa rsync?

rsync to narzędzie wiersza poleceń do zdalnej synchronizacji dla systemów uniksopodobnych. Daje użytkownikowi możliwość płynnego przesyłania/synchronizowania plików między maszynami lub dwoma hostami.

Pod maską rsync wykorzystuje algorytm transferu delta. Algorytm ten obejmuje kopiowanie różnic między dwoma plikami na dwóch hostach (źródłowym i docelowym). Źródło i miejsce docelowe mogą być lokalne lub zdalne. Polecenie rsync może wykonywać zadania kopiowania/synchronizowania danych na dwa sposoby. To są:

  • Użyj ssh, rsh do kopiowania/synchronizacji między dwoma hostami.
  • Użyj demona TCP rsync do kopiowania/synchronizowania.

Ponieważ jest przeznaczony do pracy w systemach typu Unix, działa również w systemie Linux.

Proces rsync krok po kroku wykorzystuje w następujący sposób:

  • Rsync używa SSH do łączenia się ze zdalnym hostem i prosi o podanie hasła.
  • Po podłączeniu rsync zdalnego hosta komunikuje się ze źródłem.
  • Programy te następnie określą pliki i katalogi, które wymagają synchronizacji. Wykorzystuje algorytm transferu delta, aby sprawdzić różnicę między plikami.

Jeśli polecenie rsync nie znajdzie pliku na pilocie, ale nie na hoście, skopiuje go i prześle do systemu hosta. Podobnie, dla już istniejących plików (zarówno na hoście, jak i zdalnym), skopiuje różnicę między nimi (tj. zmienione części). Na koniec zignoruje istniejące pliki w obu systemach bez żadnych modyfikacji.

Polecenie rsync wykonuje aktualizacje przyrostowe, przechowując różnicę w pliku tymczasowym przed przekazaniem go do miejsca docelowego.

Zanim zaczniesz:

  • Musisz mieć uprawnienia roota lub sudo
  • Mieć dostęp do terminala/linii poleceń
  • Dostęp SSH do bezpiecznego uruchamiania poleceń rsync
  • Potrzebujesz również dwóch maszyn do wykonania rsync.

W samouczku użyjemy Linux Mint 21.1 Vera. Możesz łatwo postępować zgodnie z przewodnikiem bez problemów, używając dowolnej innej dystrybucji Linuksa.

Dlaczego warto używać rsync zamiast Scp?

Scp (bezpieczne kopiowanie) to popularny protokół wiersza poleceń, który umożliwia użytkownikom kopiowanie plików. Jest to zgodne z liniowym podejściem do kopiowania. Oznacza to, że po prostu kopiuje pliki ze źródła do miejsca docelowego. Aby to zrobić bezpiecznie, używa SSH.

Składnia polecenia scp jest następująca:

scp option SOURCE DESTINATION

Pozostaje jednak pytanie, dlaczego używać rsync zamiast scp?

Cóż, istnieje wiele korzyści z używania rsync. Korzyści te obejmują:

  • Szybsze wykonanie: rsync jest szybszy niż scp, ponieważ wykorzystuje protokół zdalnej aktualizacji. Pozwala to na przesyłanie tylko różnic, a nie całego pliku. Tak więc, jeśli skonfigurujesz regularną synchronizację w czasie, wystarczy wykonać pełną kopię za pierwszym razem. Od następnego razu kopiuje tylko zaktualizowane części za pomocą algorytmu transferu delta.
  • Mniejsze zużycie przepustowości: ponieważ rsync nie musi ponownie kopiować całego pliku, prowadzi to do mniejszego zużycia przepustowości. Ponadto wykorzystuje algorytmy kompresji/dekompresji, aby zminimalizować rozmiar pliku podczas przesyłania.
  • Więcej opcji wiersza poleceń: rsync bije również scp pod względem liczby opcji wiersza poleceń. Oznacza to, że możesz dostroić rsync bardziej niż scp.

Podsumowując, rsync to doskonałe narzędzie do synchronizacji przyrostowej. Narzędzie scp jest również pomocne przy bezpiecznym przesyłaniu/synchronizowaniu plików. W rzeczywistym scenariuszu scp nadaje się do codziennych zadań, jeśli szukasz prostszego podejścia. Jednak w przypadku powtarzających się zadań użyj narzędzia rsync.

Składnia polecenia rsync

Polecenie rsync jest jak poniżej:

Tutaj warunki są zdefiniowane poniżej:

  • OPCJA – Są to opcje rsync
  • ŹRÓDŁO – Katalog źródłowy
  • DEST – Katalog docelowy
  • UŻYTKOWNIK – Zdalna nazwa użytkownika
  • HOST – Zdalna nazwa hosta lub adres IP

Opcje to parametry, które oferują dodatkowe funkcje polecenia. Na przykład dane można synchronizować rekurencyjnie za pomocą opcji -r. Jednak opcja -r nie synchronizuje własności grup i użytkowników, sygnatur czasowych, uprawnień ani dowiązań symbolicznych. Zamiast tego możesz użyć opcji -a, która uruchamia polecenie w trybie archiwum, zapewniając, że podczas kopiowania zostaną zachowane wszystkie prawa własności, uprawnienia i dowiązania symboliczne pliku.

Inne opcje rsync obejmują:

  • -z: kompresuj dane, aby zaoszczędzić miejsce
  • -h: udostępnia dane wyjściowe w formacie czytelnym dla człowieka
  • -b: wykonuje kopię zapasową podczas procesu synchronizacji danych
  • -e: użyj protokołu SSH do zdalnego przesyłania danych
  • -progress: wyświetla postęp synchronizacji danych
  • -v: poproś rsync o wyświetlenie pełnych danych wyjściowych
  • –n: wykonaj próbny przebieg, aby przetestować ustawienia i konfigurację synchronizacji danych
  • -q: pomija dane wyjściowe i opcje polecenia rsync

Instalowanie rsync

Większość systemów Unix i Linux jest dostarczana z zainstalowanym rsync. Jeśli twój system nie ma rsync, możesz go zainstalować za pomocą następujących poleceń.

Dla Debiana/Ubuntu i Minta

sudo apt-get install rsync

Dla Arch Linuxa

pacman -S rsync

Na Gentoo

emerge sys-apps/rsync

Na CentOS/Fedora/REHL

sudo yum install rsync

Na openSUSE

sudo zypper install rsync

Ponieważ mamy Linux Mint, rsync był preinstalowany. Możesz więc uruchomić polecenie rsync w terminalu, aby sprawdzić, czy jest zainstalowane. Wyjaśni jego możliwości, opcje i inne ważne informacje, jeśli są obecne.

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.

Zobaczmy teraz rsync w akcji z różnymi przypadkami użycia.

W samouczku utworzymy dwa katalogi.

  • katalog-źródłowy
  • katalog docelowy

W tym celu musisz wpisać następujące polecenia.

mkdir source-directory
mkdir dest-directory

Ponadto będziemy musieli wygenerować pliki, aby rsync działał. Utwórzmy więc kilka plików testowych za pomocą poniższego polecenia.

touch source-directory/file{1..100}

Spowoduje to utworzenie 100 pustych plików w katalogu źródłowym. Możesz to potwierdzić, wprowadzając poniższe polecenie.

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

Uwaga: katalog docelowy pozostawiliśmy pusty.

Kopiuj katalogi lokalnie rekurencyjnie

Mimo że rsync służy przede wszystkim do kopiowania plików między serwerem lokalnym i zdalnym, jest równie pomocny przy kopiowaniu plików lokalnie.

W takim przypadku użyjemy następującej składni rsync.

opcja rsync MIEJSCE PRZEZNACZENIA ŹRÓDŁA

Skopiuj pliki z naszego katalogu źródłowego do katalogu docelowego, uruchamiając następujące polecenie.

rsync -r source-directory/ dest-directory

Tutaj polecenie „rekurencyjnie” kopiuje pliki z katalogu źródłowego do katalogu docelowego.

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

Spowoduje to skopiowanie każdego pliku z katalogu źródłowego do katalogu docelowego.

Skopiuj lokalnie pojedynczy plik

Teraz, gdy nauczyliśmy się synchronizować dwa katalogi, nauczymy się kopiować pojedynczy plik.

W tym celu zmodyfikujemy pusty plik file1 w katalogu źródłowym, a następnie zsynchronizujemy go z tym samym plikiem znajdującym się w katalogu docelowym.

Aby edytować plik, wpisz następujące polecenie.

nano source-directory/file1

Teraz skopiuj i wklej następujący tekst do edytora nano.

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.

Dodawanie treści do pliku

Teraz zamknij i zapisz plik.

Skopiujmy teraz plik za 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 zapewne zauważyłeś, użyliśmy opcji –existing. Spowoduje to aktualizację istniejących plików. Jeśli uruchomisz polecenie bez –existing, nie zostanie ono zaktualizowane, mimo że działa pomyślnie.

Jeśli pojedynczy plik, który kopiujesz, nie istnieje w folderze docelowym, musisz uruchomić następujące polecenie.

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

Kopiowanie wielu plików

Jeśli zamierzasz skopiować wiele plików, musisz podać ścieżki źródłowe obu plików, a następnie katalog docelowy.

W tym celu utworzymy dwa nowe pliki: newfile2 i newfile3 w katalogu source-directory. Uruchom następujące polecenie, aby to zrobić.

touch source-directory/newfile{2..3}

Teraz użyj następującego polecenia, aby zsynchronizować wiele plików.

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
$ 

Skopiuj plik lub katalog z lokalnego do zdalnego

Składnia rsync dla transferu lokalnego na zdalny jest następująca.

rsync option SOURCE [email protected]:DEST

Jak widać, aby to zadziałało, musisz znać adres IP zdalnej maszyny. Musisz także dodać adres IP po pliku źródłowym.

rsync -av /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Przed rozpoczęciem transferu poprosi o hasło. Wpisz go, aby kontynuować. Ponadto, jeśli użytkownik jest inny na zdalnej maszynie, musisz o tym wspomnieć przed adresem IP, po którym następuje @.

rsync -av /Projects/rsync-tutorial/source-directory [email protected]: /Projects/rsync-tutorial/dest-directory

Jeśli zamierzasz skopiować wiele plików lub katalogów, musisz podać listę plików lub ścieżek katalogów. Składnia dla niego znajduje się poniżej.

rsync -av /Projects/rsync-tutorial/source-directory/newfile1 /Projects/rsync-tutorial/source-directory/newfile2 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Protokoły specyficzne dla zdalnego transferu

rsync pozwala określić określone protokoły przesyłania plików. Aby to zrobić, musisz użyć opcji -e, a następnie protokołu.

Na przykład, jeśli chcesz używać protokołu ssh, musisz dołączyć -e ssh do polecenia rsync.

rsync -e ssh /Projects/rsync-tutorial/source-directory 192.168.192.200: /Projects/rsync-tutorial/dest-directory

Kopiowanie pliku lub katalogu ze zdalnego do lokalnego

Składnia rsync dla transferu lokalnego na zdalny jest następująca.

sync option [email protected]:SRC DEST

Działa to jako żądanie ściągnięcia. Aby więc pobrać wymagane pliki / katalog ze zdalnego serwera na komputer lokalny, musisz uruchomić następujące polecenie.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Polecenie pobiera pliki z katalogu docelowego maszyny zdalnej do katalogu źródłowego maszyny lokalnej.

Podobnie możesz pobrać określony plik, wymieniając go w pełnej ścieżce.

rsync -av 192.168.192.200: /Projects/rsync-tutorial/dest-directory/newfile4 /Projects/rsync-tutorial/source-directory

Aby skopiować wiele plików lub katalogów z lokalnego do zdalnego, musisz określić ścieżkę w nawiasach klamrowych (oddzielonych przecinkami) po adresie IP serwera.

rsync -av 192.168.192.200: {/Projects/rsync-tutorial/dest-directory/, /home/music/2023-music} /Projects/rsync-tutorial/source-directory

Podobnie możesz również wspomnieć o plikach.

Pokaż postęp na żywo podczas transferu

Dobrym pomysłem jest obserwowanie postępów na żywo w przypadku tworzenia większych kopii zapasowych danych. W tym celu musisz użyć flagi –progress. Dołącz go do polecenia rsync, a zobaczysz prędkość transferu, pozostały czas i ilość przesłanych danych.

rsync -av --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Usuń pliki źródłowe po zakończeniu przesyłania

Możesz użyć flagi -remove-source-files, aby usunąć pliki źródłowe po zakończeniu transferu. Może to pomóc w wielu scenariuszach, zwłaszcza jeśli chodzi o zabezpieczenie plików bez pozostawiania śladów lub po prostu wykorzystanie ich do zwolnienia miejsca.

rsync -av --remove-source-files 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

przebieg próbny rsync

Rysnc pozwala również na ocenę przed wykonaniem rzeczywistego biegu. Próba pozwala sprawdzić, czy postępujesz właściwie. W końcu nie chcesz przez pomyłkę aktualizować plików ani nawet ich usuwać.

Musisz użyć opcji –dry-run, aby wykonać przebieg próbny. Dodaj go do polecenia, a następnie źródło i miejsce docelowe.

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

Dane wyjściowe są podobne do tego, jak uruchomiliśmy je wcześniej. Zauważysz jednak wzmiankę o (DRY RUN) na końcu danych wyjściowych.

Ustaw minimalny i maksymalny rozmiar pliku

Rysnc pozwala również ustawić minimalny lub maksymalny rozmiar pliku podczas przesyłania.

Tak więc, jeśli chcesz przesłać o minimalnym rozmiarze 15 KB, musisz użyć –min-size=15K.

rsync -av --min-size=15k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Polecenie skopiuje tylko pliki o minimalnym rozmiarze 15 KB. Jeśli rozmiar pliku jest mniejszy, zignoruje go.

Podobnie możesz użyć flagi –max-size, aby ustawić maksymalny rozmiar pliku.

rsync -av --max-size=450k 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Tutaj rsync zignoruje pliki powyżej rozmiaru 450 KB.

Ustaw limit przepustowości

Jeśli wykonujesz inne zadania wymagające dużej przepustowości, możesz ustawić rysnc, aby ustawić limit przepustowości dla transferu. Aby to zrobić, użyj opcji –bwlimit=KB/s.

rsync -av --bwlimit=100 --progress 192.168.192.200: /Projects/rsync-tutorial/dest-directory /Projects/rsync-tutorial/source-directory

Tutaj ustawiamy przepustowość na 100Kb/s podczas transferu.

Ostatnie słowa

To prowadzi nas do końca naszego przewodnika po komendach rsync. Nauczyliśmy się korzystać z rysnc i skutecznie omówiliśmy wiele poleceń.

Jednak rysnc oferuje znacznie więcej niż to, co omówiliśmy. Dlatego możesz również chcieć przejrzeć stronę podręcznika rsync, gdzie omówiono każdy aspekt rsync.

Następnie sprawdź ściągawki wiersza poleceń dla systemów Windows, Linux i macOS.