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.
Spis treści:
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.