10 przydatnych przykładów linuksowego polecenia rsync
Opublikowany: 2022-10-28
Komenda Linux rsync to potężne narzędzie do kopiowania plików i synchronizacji folderów. Oto dziesięć typowych przypadków użycia, które będziesz mógł dobrze wykorzystać we własnych systemach.
Narzędzie rsync
Narzędzie rsync kopiuje pliki i katalogi między dwoma komputerami. Wykorzystuje zaawansowany algorytm, który skanuje drzewa katalogów w celu znalezienia plików na komputerze źródłowym, które nie istnieją na komputerze docelowym. Pliki te są przesyłane do komputera docelowego. To, co sprawia, że rync jest tak sprytny, to to, że potrafi określić, które fragmenty istniejących plików zostały zmodyfikowane, i wysyła tylko zmienione fragmenty .
Za pomocą rsync można kopiować pliki do innej lokalizacji na dysku twardym, na inny dysk twardy w tym samym komputerze, na zewnętrznie podłączony dysk USB lub do dowolnej innej lokalizacji dostępnej przez sieć.
rsync może opcjonalnie zachowywać dowiązania symboliczne, dowiązania twarde i metadane plików, takie jak własność pliku, uprawnienia i czas dostępu. Aby wesprzeć całą tę funkcjonalność, rsync ma wiele opcji, a ich rozgryzienie wymaga czasu. Zebraliśmy te 10 przykładów, które pomogą Ci zacząć. Pisaliśmy już o tworzeniu kopii zapasowych za pomocą rsync , więc koncentrujemy się tutaj na innych zastosowaniach.
Mimo wielu opcji struktura polecenia rsync jest prosta. Musimy podać źródło, miejsce docelowe i opcje, których chcemy użyć. Prawdopodobnie odkryjesz, że rsync jest już zainstalowany na twoim komputerze z systemem Linux — był na wszystkich naszych maszynach testowych — ale jeśli nie jest, na pewno będzie w repozytoriach twojej dystrybucji.
1. Skopiuj pliki do innego katalogu
Oto prosty przykład, który pomoże nam ruszyć w drogę. Skopiujemy pliki z katalogu „project-files” do katalogu „Dokumenty”. Używamy dwóch opcji, opcji -a (archiwum) i opcji -v (pełny). Opcja verbose mówi rsync , aby wyjaśnił, co robi, gdy to robi. Opcja archive zachowuje prawo własności do pliku i kilka innych elementów, które wkrótce omówimy.
Format polecenia to options source-location destination-location .
rsync -av /home/dave/pliki-projektu/ /home/dave/Dokumenty/

Użycie ls w folderze „Dokumenty” pokazuje, że pliki zostały skopiowane.

Gdy rsync działa, pliki są wyświetlane podczas kopiowania. Było powiedziane:
- Liczba wysłanych bajtów.
- Liczba odebranych bajtów. Zanim nastąpi transfer plików,
rsyncmusi ustalić, które pliki należy przesłać. Aby to zrobić, niektóre informacje o plikach w miejscu docelowym muszą zostać pobrane przezrsync. Ta informacja jest zawarta w odebranych bajtach. - Szybkość transferu.
- Całkowity rozmiar skopiowanych plików.
- „Przyspieszenie”. Jest to stosunek całkowitego rozmiaru podzielony przez sumę wysłanych i odebranych bajtów. Im wyższa ta liczba, tym efektywniejszy transfer.
Zmodyfikowaliśmy plik tekstowy w katalogu źródłowym i powtórzyliśmy polecenie rsync .
rsync -av /home/dave/pliki-projektu/ /home/dave/Dokumenty/

Tym razem jedynym plikiem, który wymaga aktualizacji, jest zmodyfikowany przez nas plik tekstowy. Liczba przyspieszenia wynosi teraz 30 850. O ile bardziej wydajne jest kopiowanie zmodyfikowanej części tego pojedynczego pliku, niż kopiowanie wszystkich plików.
Opcja -a (archiwum) w rzeczywistości reprezentuje zbiór innych opcji. To tak samo, jak przy użyciu wszystkich tych opcji:
- r : Pracuj rekurencyjnie przez drzewa katalogów w katalogu źródłowym i skopiuj je do katalogu docelowego, tworząc je, jeśli jeszcze tam nie istnieją.
- l : Kopiuj dowiązania symboliczne jako dowiązania symboliczne.
- p : Zachowaj uprawnienia do plików.
- t : Zachowaj czasy modyfikacji plików.
- g : Zachowaj uprawnienia grupy.
- o : Zachowaj własność pliku.
- D : Skopiuj pliki specjalne i pliki urządzeń. Pliki specjalne mogą być elementami zorientowanymi na komunikację, które są traktowane jak pliki, takimi jak gniazda i potoki pierwsze weszło, pierwsze wyszło (fifos). Pliki urządzeń to specjalne pliki, które zapewniają dostęp do urządzeń i pseudourządzeń.
Jest to tak często używana kombinacja, że rsync udostępnia opcję -a (archiwum) jako skrócony sposób wywołania ich wszystkich.
2. Skopiuj katalog do innego katalogu
Jeśli spojrzysz na poprzednie polecenie rsync , zobaczysz końcowy ukośnik „/” na ścieżce pliku katalogu źródłowego. To jest znaczące. Mówi rsync , aby skopiował zawartość katalogu. Jeśli nie podasz końcowego ukośnika, rsync skopiuje katalog i jego zawartość.
rsync -av /home/dave/project-files /home/dave/Dokumenty/

Tym razem nazwa katalogu jest dodawana do nazwy pliku, tak jak są one wyświetlane. Jeśli zajrzymy do katalogu docelowego, zobaczymy, że folder źródłowy został skopiowany wraz z zawartymi w nim plikami.
ls Dokumenty/
ls Dokumenty/pliki-projektów/

3. Skopiuj katalog na inny dysk
Kopiowanie plików do innej lokalizacji na tym samym dysku twardym nie zapewnia ochrony przed awarią dysku. Jeśli ten dysk wyda ducha, utraciłeś źródłową i docelową kopię tych plików. Skopiowanie ich na inny dysk twardy to znacznie bardziej niezawodny sposób ochrony danych. Wszystko, co musimy zrobić, to podać poprawną ścieżkę do dysku docelowego.
rsync -av /home/dave/project-files /run/mount/drive2

Spojrzenie na drugi dysk twardy pokazuje nam katalog i pliki do niego skopiowane.
ls run/mount/drive2/project-files/

POWIĄZANE: Co zrobić, gdy dysk twardy ulegnie awarii
4. Najpierw wykonaj próbny bieg
Zanim przyjrzymy się, jak rsync może z pożytkiem usuwać dla nas pliki, przyjrzyjmy się, jak możemy sprawić, by rsync działał na sucho.
Na sucho rsync wykonuje ruchy wykonywania czynności, o które prosiliśmy, ale w rzeczywistości ich nie wykonuje. Informuje o tym, co by się stało, gdyby polecenie zostało wykonane. W ten sposób możemy upewnić się, że polecenie robi dokładnie to, czego oczekujemy.
Aby wymusić uruchomienie na sucho, używamy opcji --dry-run .
rsync -av --dry-run /home/dave/geocoder /run/mount/drive2


Pliki, które zostałyby skopiowane, są dla nas wymienione i otrzymujemy zwykłe statystyki, po których następuje komunikat (DRY RUN) , abyśmy wiedzieli, że nic się nie wydarzyło.
5. Usuwanie plików w katalogu docelowym
Opcja --delete mówi rsync , aby usuwał pliki i katalogi z katalogu docelowego , których nie ma w katalogu źródłowym. Oznacza to, że katalog docelowy będzie dokładną kopią katalogu źródłowego. Będziemy ostrożni i najpierw użyjemy opcji --dry-run .
rsync -av --delete --dry-run /home/dave/geocoder /run/mount/drive2

Zostaliśmy poinformowani, że dwa pliki zostaną usunięte. Jeśli jesteśmy pewni, że nie obchodzi nas, że zostaną usunięte, możemy usunąć opcję --dry-run i wykonać polecenie naprawdę.
rsync -av --delete /home/dave/geocoder /run/mount/drive2

Tym razem zawartość katalogów jest synchronizowana, a dwa dodatkowe pliki są usuwane.
6. Usuwanie plików źródłowych
Możesz usunąć pliki źródłowe po udanym transferze , dzięki czemu rsync działa bardziej jak przeniesienie niż kopia. Jeśli transfer się nie powiódł, pliki źródłowe nie są usuwane. Opcja, której musimy użyć, to --remove-source-files .
rsync -av --remove-source-files /home/dave/geocoder /run/mount/drive2

Pamiętaj, że pliki można usunąć, nawet jeśli nie są przesyłane żadne pliki. rsync się tak, ponieważ jeśli rsync sprawdza, a wszystkie pliki znajdują się już w katalogu docelowym i nie ma nic do zrobienia, rsync uzna, że transfer zakończył się pomyślnie.
Ponadto rsync usuwa tylko pliki z katalogu źródłowego. Nie usuwa katalogu źródłowego ani żadnych podkatalogów, tylko zawarte w nich pliki. Możemy to zobaczyć, używając opcji -R (rekursywne) z ls , w katalogu źródłowym.
ls -R geokoder

7. Skopiuj pliki na zdalny komputer
Aby zsynchronizować foldery z komputerem zdalnym, rsync musi być zainstalowany na obu komputerach. Skonfiguruj komunikację SSH między dwoma komputerami, zanim spróbujesz użyć rsync na komputerze zdalnym.
Aby rsync działał, musisz mieć możliwość zdalnego logowania się jako zwykły użytkownik na zdalnym komputerze. Nie ma znaczenia, czy używasz identyfikatora i hasła do logowania, czy skonfigurowałeś klucze SSH, aby zapewnić bezpieczny dostęp bez hasła, ale jeśli nie możesz się zalogować jako użytkownik, rsync nie będzie działać zarówno.
Jeśli zalogujesz się za pomocą hasła, rsync poprosi o hasło. Jeśli używasz kluczy SSH do logowania, proces przebiega bezproblemowo.
Jedyną dodatkową rzeczą, którą musisz zrobić, to dodać nazwę konta użytkownika i adres IP komputera zdalnego na początku ścieżki pliku docelowego. Użyj znaku „ @ ”, aby oddzielić nazwę użytkownika od nazwy komputera lub adresu IP, oraz dwukropka „ : ”, aby oddzielić nazwę komputera lub adres IP od ścieżki katalogu.
W naszej sieci testowej te dwa polecenia są równoważne.
rsync -av /home/dave/geocoder [email protected]:/home/dave/Pobrane
rsync -av /home/dave/geocoder [email protected]:/home/dave/Pobrane

Otrzymujemy te same informacje, które otrzymujemy, gdy kopiujemy pliki lokalnie.
8. Dołącz lub wyklucz pliki lub katalogi
W katalogu źródłowym mogą znajdować się pliki i katalogi, których nie chcesz kopiować na komputer docelowy. Możesz je wykluczyć za pomocą opcji --exclude . W podobny sposób możesz dołączyć określone pliki i katalogi za pomocą opcji --include .
Dziwactwo polega na tym, że jeśli użyjesz samej opcji --include , wszystkie pliki zostaną skopiowane, jak zwykle - w tym specjalnie dołączone pliki. Aby skopiować tylko dołączone pliki, musisz --exclude wszystko inne.
Możesz użyć dowolnej liczby opcji --include i --exclude w swoim poleceniu, ale upewnij się, że umieściłeś opcje --include przed opcjami --exclude . Upewnij się również, że w ścieżce pliku źródłowego znajduje się końcowy ukośnik.
To polecenie kopiuje tylko pliki kodu źródłowego C i pliki danych CSV na komputer docelowy.
rsync -av --include="*.c" --include="*.csv" --exclude="*" /home/dave/geocoder/ /run/mount/drive2/geocoder 
Jedyne kopiowane pliki to te, które specjalnie dodaliśmy.
9. Kompresuj pliki w transferze
Opcja -z (kompresuj) powoduje, że rsync kompresuje przesyłane pliki. Nie są one jednak przechowywane jako skompresowane pliki na komputerze docelowym, są kompresowane tylko podczas samego transferu. Może to przyspieszyć długie transfery.
rsync -avz /home/dave/geocoder /run/mount/drive2

10. Monitorowanie postępów
Mówiąc o długich transferach, możemy dodać trochę statystyk, aby zobaczyć postęp transferu.
Opcja -P (partial, progress) faktycznie dodaje dwie opcje, --partial i --progress . Opcja --partial mówi rsync , aby zachował częściowo przesłane pliki, jeśli transfer się nie powiedzie. Oszczędza to czas po ponownym uruchomieniu transferu.
Opcja --progress drukuje dla każdego pliku dane przesłane w bajtach i jako wartość procentową, szybkość transferu, czas potrzebny, numer przesyłanego pliku i liczbę pozostałych plików.
rsync -aP /home/dave/geocoder /run/mount/drive2

Dane wyjściowe przewijają się dość szybko i są trudne do odczytania. Możesz nieco poprawić sytuację, usuwając opcję -v (pełny) z polecenia. Nawet wtedy nadal trudno go czytać, gdy przelatuje obok.

Często bardziej przydatne jest monitorowanie postępu całego transferu. Możesz to zrobić za pomocą opcji –info i przekazując ją jako parametr „progress2”.
sync -a --info=progress2 /home/dave/geocoder /run/mount/drive2

Daje to rzeczywiście przydatne sprawozdanie z postępów.
Jak cp na sterydach
Polecenie rsync jest szybkie, elastyczne i warte czasu potrzebnego na zapoznanie się z nim. Podstawowa forma polecenia rsync z opcjami -av , katalogiem źródłowym i katalogiem docelowym nie jest wcale trudna do zapamiętania.
W wielu przypadkach to wszystko, czego potrzebujesz. Rozgość się z tym, a reszta przyjdzie łatwo.
POWIĄZANE: Przewodnik dla początkujących dotyczący synchronizacji danych z Rsync


