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,
rsync
musi 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