10 przydatnych przykładów linuksowego polecenia rsync

Opublikowany: 2022-10-28
Laptop z systemem Linux wyświetlający monit o bash
fatmawati achmad zaenuri/Shutterstock.com

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.

Spis treści

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ć.

Jak wykonać kopię zapasową systemu Linux za pomocą rsync?
POWIĄZANE Jak wykonać kopię zapasową systemu Linux za pomocą rsync

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/ 

Kopiowanie plików do innego katalogu na tym samym komputerze za pomocą rsync

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

Wyświetlanie listy plików w katalogu dokumentów

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, rsync musi ustalić, które pliki należy przesłać. Aby to zrobić, niektóre informacje o plikach w miejscu docelowym muszą zostać pobrane przez rsync . 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/ 

Kopiowanie plików do innego katalogu na tym samym komputerze za pomocą rsync

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/ 

Kopiowanie katalogu i jego zawartości do innego katalogu na tym samym komputerze za pomocą rsync

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/ 

Wyświetlanie skopiowanych plików w przesłanym katalogu

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 

Kopiowanie plików na inny dysk twardy na tym samym komputerze

Spojrzenie na drugi dysk twardy pokazuje nam katalog i pliki do niego skopiowane.

 ls run/mount/drive2/project-files/ 

Wyświetlanie listy plików skopiowanych na inny dysk twardy na tym samym komputerze

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 

Wykonywanie próbnego uruchomienia polecenia rsync

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 

Wykonywanie próbnego uruchomienia polecenia rsync, które może usunąć pliki

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 

Kopiowanie plików i usuwanie plików z katalogu docelowego, których nie ma w katalogu źródłowym

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 

Wymuszanie przez rsync usunięcia plików źródłowych po udanym transferze

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 

Puste drzewo katalogów po usunięciu plików źródłowych przez rsync

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.

Jak tworzyć i instalować klucze SSH z powłoki systemu Linux?
POWIĄZANE Jak tworzyć i instalować klucze SSH z powłoki systemu Linux

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 

Kopiowanie plików na zdalny komputer przez SSH za pomocą rsync

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

Używanie rsync do kopiowania wybranych plików na inny dysk twardy na tym samym komputerze

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 

Kompresowanie plików podczas ich przesyłania za pomocą opcji -z rsync

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 

Korzystanie z opcji -P w celu zapewnienia statystyk transmisji każdego pliku

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.

Statystyki transferu dla każdego przesłanego pliku

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 

Statystyki dla całego transferu rsync

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