Wprowadzenie
Rsync, co jest skrótem od „remote sync”, jest narzędziem do zdalnej i lokalnej synchronizacji plików. Wykorzystuje ono algorytm, który minimalizuje ilość kopiowanych danych poprzez przenoszenie tylko tych części plików, które uległy zmianie.
W tym przewodniku omówimy podstawowe zastosowania tego potężnego narzędzia.
Czym jest Rsync?
Rsync jest bardzo elastycznym, sieciowym narzędziem do synchronizacji. Ze względu na jego wszechobecność w Linuksie i systemach uniksopodobnych oraz popularność jako narzędzia do skryptów systemowych, jest on domyślnie dołączany do większości dystrybucji Linuksa.
Podstawowa składnia
Podstawowa składnia rsync
jest bardzo prosta i działa w sposób podobny do ssh, scp i cp.
Utworzymy dwa katalogi testowe i kilka plików testowych za pomocą następujących poleceń:
- cd ~
- mkdir dir1
- mkdir dir2
- touch dir1/file{1..100}
Mamy teraz katalog o nazwie dir1
, w którym znajduje się 100 pustych plików.
- ls dir1
Outputfile1 file18 file27 file36 file45 file54 file63 file72 file81 file90file10 file19 file28 file37 file46 file55 file64 file73 file82 file91file100 file2 file29 file38 file47 file56 file65 file74 file83 file92file11 file20 file3 file39 file48 file57 file66 file75 file84 file93file12 file21 file30 file4 file49 file58 file67 file76 file85 file94file13 file22 file31 file40 file5 file59 file68 file77 file86 file95file14 file23 file32 file41 file50 file6 file69 file78 file87 file96file15 file24 file33 file42 file51 file60 file7 file79 file88 file97file16 file25 file34 file43 file52 file61 file70 file8 file89 file98file17 file26 file35 file44 file53 file62 file71 file80 file9 file99
Mamy również pusty katalog o nazwie dir2
.
Aby zsynchronizować zawartość dir1
z dir2
w tym samym systemie, wpisz:
- rsync -r dir1/ dir2
Opcja -r
oznacza rekurencję, która jest niezbędna do synchronizacji katalogów.
Możemy również użyć flagi -a
zamiast:
- rsync -a dir1/ dir2
Opcja -a
jest flagą kombinacji. Oznacza „archiwum” i synchronizuje rekursywnie oraz zachowuje dowiązania symboliczne, pliki specjalne i pliki urządzeń, czasy modyfikacji, grupy, właścicieli i uprawnienia. Jest ona częściej używana niż -r
i zwykle jest tym, czego chcesz użyć.
Ważna uwaga
Możesz zauważyć, że na końcu pierwszego argumentu w powyższych poleceniach znajduje się ukośnik (/
):
- rsync -a dir1/ dir2
Jest to konieczne, aby oznaczało „zawartość dir1
„. Alternatywa, bez ukośnika, umieściłaby dir1
, łącznie z katalogiem, wewnątrz dir2
. To stworzyłoby hierarchię, która wygląda tak:
- ~/dir2/dir1/
Zawsze podwójnie sprawdzaj swoje argumenty przed wykonaniem polecenia rsync. Rsync dostarcza metody, by to zrobić, przekazując opcje -n
lub --dry-run
. Flaga -v
(dla verbose) jest również niezbędna do uzyskania odpowiedniego wyjścia:
- rsync -anv dir1/ dir2
Outputsending incremental file list./file1file10file100file11file12file13file14file15file16file17file18. . .
Porównaj to wyjście z wyjściem, które otrzymamy, gdy usuniemy końcowy ukośnik:
- rsync -anv dir1 dir2
Outputsending incremental file listdir1/dir1/file1dir1/file10dir1/file100dir1/file11dir1/file12dir1/file13dir1/file14dir1/file15dir1/file16dir1/file17dir1/file18. . .
Widzisz tutaj, że sam katalog jest przenoszony.
How To Use Rsync to Sync with a Remote System
Synchronizacja ze zdalnym systemem jest banalna, jeśli masz dostęp SSH do zdalnej maszyny i rsync
zainstalowany po obu stronach. Po zweryfikowaniu dostępu SSH między dwoma maszynami, możesz zsynchronizować folder dir1
z wcześniejszego komputera na zdalny komputer za pomocą tej składni (zauważ, że chcemy przenieść rzeczywisty katalog w tym przypadku, więc pomijamy ukośnik końcowy):
- rsync -a ~/dir1 username@remote_host:destination_directory
To się nazywa operacja „push”, ponieważ przesuwa katalog z systemu lokalnego do systemu zdalnego. Odwrotną operacją jest „pull”. Jest on używany do synchronizacji zdalnego katalogu do systemu lokalnego. Gdyby dir1
znajdował się w zdalnym systemie zamiast w naszym lokalnym, składnia byłaby następująca:
- rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
Podobnie jak w przypadku cp
i podobnych narzędzi, źródło jest zawsze pierwszym argumentem, a miejsce docelowe drugim.
Użyteczne opcje dla Rsync
Rsync udostępnia wiele opcji zmiany domyślnego zachowania narzędzia. Omówiliśmy już niektóre z bardziej potrzebnych flag.
Jeśli przesyłasz pliki, które nie zostały jeszcze skompresowane, takie jak pliki tekstowe, możesz zmniejszyć transfer przez sieć, dodając kompresję za pomocą opcji -z
:
- rsync -az source destination
Flaga -P
jest bardzo pomocna. Łączy ona w sobie flagi --progress
i --partial
. Pierwsza z nich daje pasek postępu dla transferów, a druga pozwala wznowić przerwane transfery:
- rsync -azP source destination
Outputsending incremental file list./file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101). . .
Jeśli uruchomimy polecenie ponownie, otrzymamy krótsze wyjście, ponieważ żadne zmiany nie zostały dokonane. Ilustruje to zdolność rsync do używania czasów modyfikacji w celu określenia, czy zmiany zostały dokonane.
- rsync -azP source destination
Outputsending incremental file listsent 818 bytes received 12 bytes 1660.00 bytes/sectotal size is 0 speedup is 0.00
Możemy zaktualizować czas modyfikacji niektórych plików i zobaczyć, że rsync inteligentnie kopiuje ponownie tylko zmienione pliki:
- touch dir1/file{1..10}
- rsync -azP source destination
Outputsending incremental file listfile1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101). . .
Aby utrzymać dwa katalogi naprawdę zsynchronizowane, konieczne jest usunięcie plików z katalogu docelowego, jeśli zostaną one usunięte ze źródła. Domyślnie, rsync nie usuwa niczego z katalogu docelowego.
Możemy zmienić to zachowanie za pomocą opcji --delete
. Przed użyciem tej opcji należy użyć opcji --dry-run
i wykonać testy, aby zapobiec utracie danych:
- rsync -a --delete source destination
Jeśli chcemy wykluczyć pewne pliki lub katalogi znajdujące się wewnątrz synchronizowanego katalogu, możemy to zrobić, określając je na liście oddzielonej przecinkami po opcji --exclude=
:
- rsync -a --exclude=pattern_to_exclude source destination
Jeśli określiliśmy wzorzec wykluczenia, możemy uchylić to wykluczenie dla plików pasujących do innego wzorca za pomocą opcji --include=
.
- rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
Na koniec, opcja --backup
programu rsync może być użyta do przechowywania kopii zapasowych ważnych plików. Jest ona używana w połączeniu z opcją --backup-dir
, która określa katalog, w którym powinny być przechowywane pliki kopii zapasowych.
- rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination
Zakończenie
Rsync może uprościć przesyłanie plików przez połączenia sieciowe i dodać solidność do synchronizacji katalogów lokalnych. Elastyczność rsync sprawia, że jest on dobrym rozwiązaniem dla wielu różnych operacji na poziomie plików.
Zapoznanie się z rsync pozwala na projektowanie złożonych operacji tworzenia kopii zapasowych i uzyskanie precyzyjnej kontroli nad tym, co i jak jest przesyłane.