rsync lub zdalna synchronizacja to narzędzie programowe dla systemów uniksowych, które skutecznie synchronizuje pliki i katalogi między dwoma hostami lub maszynami. Jedno to źródło lub host lokalny, z którego będą synchronizowane pliki, drugie to host zdalny, na którym będzie miała miejsce synchronizacja. Zasadniczo są na to dwa sposoby rsync może kopiować/synchronizować dane:
- Kopiowanie/synchronizacja do/z innego hosta za pośrednictwem dowolnej zdalnej powłoki, np ssh , rsz .
- Kopiowanie/synchronizacja poprzez demona rsync przy użyciu protokołu TCP.
Rsync słynie z tego algorytm transferu delta , w którym kopiuje tylko różnice pomiędzy plikami źródłowymi znajdującymi się na hoście lokalnym a plikami istniejącymi na hoście docelowym lub zdalnym.
Przykład:
rsync local-file user@remote-host:remote-file>
Co się tutaj stało:
Rsync najpierw użyje SSH do połączeniauser>do zdalnego hosta i poproszęuser's>hasło. Po nawiązaniu połączenia wywoła rsync zdalnego hosta, a następnie oba programy określą, które części pliku lokalnego należy skopiować, aby plik zdalny pasował do pliku lokalnego. Zwróć uwagę na następujące zachowanie rsync:
- Kopiowane są pliki, które nie istnieją na zdalnym hoście.
- Zaktualizowane pliki zostaną zsynchronizowane, rsync skopiuje tylko zmienione części plików na zdalny host.
- dokładnie takie same pliki nie są kopiowane na zdalny host.
Składnia polecenia `rsync` w systemie Linux
rsync [options] source [destination]>
Opcja dostępne w poleceniu `rsync` w systemie Linux
| Opcje | Opis |
|---|---|
| a, –archiwum | Jest to równoznaczne z używaniem -rlptgoD . Tryb archiwizacji zawiera wszystkie niezbędne opcje, takie jak rekursywne kopiowanie plików, zachowując prawie wszystko (takie jak łącza symboliczne, uprawnienia do plików, własność użytkowników i grup oraz znaczniki czasu). |
| -v, –pełne | Domyślnie rsync działa w trybie cichym. Użycie pojedynczej opcji -v dostarcza informacji o przesłanych plikach i podsumowanie na końcu. Dodanie dwóch opcji -v daje aktualizacje statusu transmisji delta i pominiętych plików, wraz z dodatkowymi informacjami na końcu. Do debugowania rsync zwykle używa się wielu opcji -v. bieżąca data w Javie |
| -h, –format czytelny dla człowieka | Dane wyjściowe w formacie czytelnym dla człowieka. |
| -z, –kompresuj | Kompresuj dane pliku podczas przesyłania |
Przykłady
Używanie `rsync` jako polecenia listy
Jeśli określono tylko ścieżkę źródłową, zawartość źródła jest wyświetlana w formacie wyjściowym podobnym dols -l>.
rsync foo/>
Powyższe polecenie wyświetli listę plików i katalogów znajdujących się w katalogu bla .
Wyjście:
Kopiuj/synchronizuj pliki i katalog lokalnie
Jeśli ani ścieżka źródłowa, ani docelowa nie określa hosta zdalnego, polecenia rsync zachowują się jak polecenie kopiowania.
rsync -avh foo/ bar/>
Powyższe polecenie skopiuje/zsynchronizuje wszystkie pliki i katalogi znajdujące się w katalogufoo>do katalogu bar . Jeśli katalog docelowy nie jest obecny (tutajbar>), rsync automatycznie tworzy taki plik i kopiuje wszystkie zawarte w nim dane.
Wyjście:
Rsync przy użyciu ssh
Istnieją dwa różne sposoby, aby rsync mógł skontaktować się ze zdalnym systemem:
- Używanie programu zdalnej powłoki jako transportu (takiego jak
ssh>(Bezpieczna powłoka) lubrsh>(Zdalna powłoka)). - Kontaktowanie się z demonem rsync bezpośrednio przez protokół TCP.
Tutaj będziemy omawiać rsync przez ssh.
rsync -avhze ssh /foo user@remote-host:/tmp/>
Aby określić typ protokołu, który ma być używany,-e>opcja jest używana.
Wyjście:
Rsync z określonymi uprawnieniami do plików
Jeśli chcemy synchronizować pliki z hostem lokalnym lub zdalnym, zmieniając uprawnienia do plików. Należy użyć następującego polecenia.
jak odzyskać ukryte aplikacje
rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>
Powyższe polecenie zsynchronizuje wszystkie pliki znajdujące się w katalogu /bla z plikami znajdującymi się w katalogu /tmp wremote-host>ze wszystkimi plikami, których właścicielem jest USER z grupy GROUP.
Wyjście:
Notatka: Theuser>Igroup>musi już zostać utworzony na zdalnym hoście.
Rsync z --ignore-existing-files>
Możemy także pominąć już istniejące pliki w miejscu docelowym. Można tego ogólnie użyć, gdy wykonujemy kopie zapasowe za pomocą –link-dest opcję, kontynuując wykonywanie kopii zapasowej, które zostało przerwane.
rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>
Zatem wszelkie pliki, które nie istnieją w miejscu docelowym, zostaną skopiowane. Tutaj usunąłemgeeksforgeeks>folder z katalogufoo>, więc powinien skopiować tylko plikgeeksforgeeks>informator.
Notatka: Nie ignoruje to istniejących katalogów, w przeciwnym razie nic nie zostanie zrobione. Nawet jeśli w pliku na hoście lokalnym wprowadzono pewne zmiany, nadal nie zostanie on zsynchronizowany, jeśli znajduje się na hoście zdalnym.
Wyjście:
Pokaż postęp podczas transferu
Aby pokazać postęp podczas przesyłania danych z hosta lokalnego do hosta zdalnego, możemy użyć-–progress>opcja.
rsync -avhe ssh --progress /foo user@remote-host:/tmp/>
Po zakończeniu przesyłania konkretnego pliku rsync wyświetla linię podsumowania, jak pokazano poniżej.
Wyjście:
Na powyższym obrazku, jeśli spojrzymy na plik/foo/file2>, mówi nam to
- Plik miał w sumie 44 bajty.
- Średnia szybkość przesyłania całego pliku wyniosła 42,97 kilobajtów na sekundę w ciągu 0:00:00 sekund potrzebnych na jego ukończenie.
- Był to drugi transfer w obecnej kadencji rsync sesja.
- Z wszystkich 13 plików na liście plików, zdalny host musi sprawdzić jeszcze 10 plików (aby sprawdzić, czy są aktualne).
Jeśli chcemy skopiować pliki na zdalnym hoście, które zostały ostatnio zaktualizowane w lokalnym systemie plików. To się skończyło -aktualizacja flaga. Zachowanie wygląda teraz tak:
- Kopiowane są pliki, które nie istnieją na zdalnym hoście.
- Pliki, które istnieją zarówno na serwerze lokalnym, jak i zdalnym, ale mają nowszy znacznik czasu na hoście lokalnym, są kopiowane do hosta zdalnego. (I odwrotnie, pliki ze starszym znacznikiem czasu nie są kopiowane).
Tutaj wprowadziłem pewne zmiany plik1 I plik2 , ale zmiany w plik2 zostały zrobione niedawno. Więc tylko plik2 zostanie zsynchronizowany.
rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>
Wyjście: 
Automatycznie usuwaj pliki z hosta lokalnego po pomyślnym przesłaniu
Załóżmy teraz, że mamy serwer WWW i serwer kopii zapasowych, utworzyliśmy codzienną kopię zapasową i zsynchronizowaliśmy ją z naszym serwerem kopii zapasowych, a następnie nie chcemy przechowywać lokalnej kopii kopii zapasowej na naszym serwerze internetowym. Zamiast więc usuwać go ręcznie po udanym transferze, możemy użyć--remove-source-files>flagę, aby automatycznie usunąć pliki z serwera WWW.
rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>
Wyjście:
Notatka: Spowoduje to usunięcie tylko plików, a nie katalogów.
Usuń pliki, które zostały usunięte na hoście lokalnym
Jeśli są jakieś pliki, które zostały usunięte na hoście lokalnym i chcemy, aby zostały one zaktualizowane również na hoście zdalnym, musimy użyć metody--delete>opcja.
python os listdir
rsync -avhe ssh /foo --delete user@remote-host:/tmp/>
Wyjście:
Więc tu plik1 , plik2 , plik3 zostały usunięte na hoście lokalnym i, jak widać, są również aktualizowane na hoście zdalnym.
Uwaga: ` rsync` nie usuwa automatycznie plików, aby zsynchronizować katalogi obecne po obu stronach.
Wykonywanie uruchomienia próbnego za pomocą `rsync`
Uruchomienie próbne powoduje, że `rsync` wykonuje uruchomienie próbne, które nie wprowadza żadnych zmian i wyświetla prawie takie same dane wyjściowe, jak w przypadku prawdziwego uruchomienia. Zwykle używa się go z opcjami -v, –verbose i/lub -i, –itemize-changes, aby zobaczyć, co zrobi polecenie `rsync`, zanim zostanie faktycznie uruchomione.
rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>
Wyjście:
Wniosek
W tym artykule omówiliśmy polecenie rsync w systemie Linux, które jest wszechstronnym i potężnym narzędziem do synchronizowania plików i katalogów między hostami lub maszynami. Dzięki algorytmowi transferu delta i różnym opcjom oferuje wydajną synchronizację danych, możliwości tworzenia kopii zapasowych i zarządzanie transferem plików. Opanowując polecenie rsync, użytkownicy Linuksa mogą zapewnić spójność plików, zoptymalizować transmisję danych i usprawnić przepływy pracy związane z zarządzaniem danymi.