16 praktycznych przykładów polecenia Rsync w systemie Linux
Rsync (Remote Sync) to najczęściej używane polecenie do kopiowania i synchronizowania plików i katalogów zdalnie, a także lokalnie w systemach Linux/Unix.
Za pomocą polecenia rsync możesz kopiować i synchronizować dane zdalnie i lokalnie w katalogach, dyskach i sieciach, wykonywać kopie zapasowe danych i tworzyć kopie lustrzane między dwoma maszynami z systemem Linux.
W tym artykule wyjaśniono 16 podstawowe i zaawansowane zastosowania polecenia rsync do zdalnego i lokalnego przesyłania plików na komputerach z systemem Linux. Nie musisz być użytkownikiem root, aby uruchomić polecenie rsync.
Zalety polecenia Rsync
Oferuje szereg korzyści, m.in.:
- Efektywny transfer plików – rsync wykorzystuje algorytm przesyłania delta, co oznacza, że przesyła tylko różnice między plikami źródłowymi i docelowymi, co znacznie zmniejsza ilość przesyłanych danych, dzięki czemu jest skuteczny w przypadku synchronizacji dużych plików lub katalogów.
- Zdalna synchronizacja plików – rsync obsługuje zarówno lokalne, jak i zdalne przesyłanie plików przez SSH, co umożliwia synchronizację między systemami lokalnymi i zdalnymi lub tworzenie kopii lustrzanych katalogów na wielu komputerach.
- Przyrostowe kopie zapasowe – rsync dobrze nadaje się do przyrostowych kopii zapasowych, ponieważ skutecznie tworzy i aktualizuje kopie zapasowe, przesyłając tylko nowe lub zmodyfikowane pliki.
- Zachowuje uprawnienia do plików – rsync może zachować różne atrybuty plików, takie jak uprawnienia, własność, znaczniki czasu i łącza symboliczne, co gwarantuje, że skopiowane pliki zachowają swoje oryginalne cechy w miejscu docelowym.
- Kontrola przepustowości – rsync pozwala ograniczyć wykorzystanie przepustowości podczas przesyłania plików, ponieważ wykorzystuje metodę kompresji i dekompresji podczas wysyłania i odbierania danych na obu końcach.
- Szybciej – rsync może być szybszy niż scp (Secure Copy) w przypadku przesyłania plików, szczególnie podczas synchronizowania dużych katalogów lub gdy mamy do czynienia z plikami, które zostały już częściowo przesłane lub istnieją w miejscu docelowym.
Składnia polecenia Rsync
Polecenie rsync ma następującą składnię:
rsync [OPTIONS] SOURCE DESTINATION
Oto wyjaśnienie różnych komponentów i opcji używanych z poleceniami rsync:
-v
– Pełne wyjście, wyświetlające szczegółowe informacje o przelewie.-r
– kopiuje dane rekurencyjnie (ale nie zachowuje znaczników czasu i uprawnień podczas przesyłania danych).-a
– tryb archiwum, który umożliwia rekurencyjne kopiowanie plików, a także zachowuje dowiązania symboliczne, uprawnienia do plików, własność użytkowników i grup oraz znaczniki czasu.-z
– Kompresuj pliki podczas przesyłania, aby zmniejszyć wykorzystanie sieci.-h
– czytelne dla człowieka, wyprowadzane liczby w formacie czytelnym dla człowieka.-P
– Pokaż postęp podczas przesyłania.SOURCE
– Określa plik(i) źródłowy lub katalog do przesłania; może to być lokalizacja lokalna lub zdalna.DESTINATION
– Określa ścieżkę docelową, do której zostaną skopiowane pliki lub katalogi. Podobnie jak w przypadku źródła, może to być ścieżka lokalna lub lokalizacja zdalna.
Zainstaluj Rsync w systemie Linux
Możemy zainstalować pakiet rsync za pomocą następującego menedżera pakietów, zgodnie z dystrybucją Linuksa.
sudo apt install rsync [On Debian, Ubuntu and Mint]
sudo yum install rsync [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo emerge -a sys-apps/rsync [On Gentoo Linux]
sudo apk add rsync [On Alpine Linux]
sudo pacman -S rsync [On Arch Linux]
sudo zypper install rsync [On OpenSUSE]
1. Skopiuj/zsynchronizuj plik lokalnie
Aby skopiować lub zsynchronizować plik lokalnie, możesz użyć następującego polecenia, które zsynchronizuje pojedynczy plik na komputerze lokalnym z jednej lokalizacji do innej lokalizacji.
W tym przykładzie plik o nazwie backup.tar musi zostać skopiowany lub zsynchronizowany z folderem /tmp/backups/.
[root@tecmint]# rsync -zvh backup.tar.gz /tmp/backups/
created directory /tmp/backups
backup.tar.gz
sent 224.54K bytes received 70 bytes 449.21K bytes/sec
total size is 224.40K speedup is 1.00
W powyższym przykładzie widać, że jeśli miejsce docelowe jeszcze nie istnieje, rsync automatycznie utworzy katalog dla miejsca docelowego.
2. Skopiuj/zsynchronizuj katalog lokalnie
Poniższe polecenie przeniesie lub zsynchronizuje wszystkie pliki z jednego katalogu do innego katalogu na tym samym komputerze.
W tym przykładzie /root/rpmpkgs zawiera kilka plików pakietu RPM i chcesz, aby ten katalog został skopiowany do folderu /tmp/backups/.
[root@tecmint]# rsync -avzh /root/rpmpkgs /tmp/backups/
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.47M bytes received 96 bytes 2.32M bytes/sec
total size is 3.74M speedup is 1.08
3. Skopiuj katalog z serwera lokalnego na serwer zdalny
Aby skopiować katalog z serwera lokalnego na serwer zdalny, możesz użyć następującego polecenia, które zsynchronizuje katalog z komputera lokalnego na zdalny.
Na przykład, jeśli na Twoim komputerze lokalnym znajduje się folder „rpmpkgs” zawierający pakiety RPM i jeśli chcesz, aby zawartość tego katalogu lokalnego była wysyłana na zdalny serwer, możesz użyć następującego polecenia.
rsync -avzh /root/rpmpkgs [email :/root/
The authenticity of host '192.168.0.141 (192.168.0.141)' can't be established.
ED25519 key fingerprint is SHA256:bH2tiWQn4S5o6qmZhmtXcBROV5TU5H4t2C42QDEMx1c.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.0.141' (ED25519) to the list of known hosts.
[email 's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 3.74M bytes received 96 bytes 439.88K bytes/sec
total size is 3.74M speedup is 1.00
4. Skopiuj katalog ze zdalnego na serwer lokalny
To polecenie pomoże Ci zsynchronizować katalog zdalny z katalogiem lokalnym. W tym przykładzie katalog /root/rpmpkgs znajdujący się na zdalnym serwerze jest kopiowany na Twój komputer lokalny w /tmp/myrpms.
rsync -avzh [email :/root/rpmpkgs /tmp/myrpms
[email 's password:
receiving incremental file list
created directory /tmp/myrpms
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
sent 104 bytes received 3.49M bytes 997.68K bytes/sec
total size is 3.74M speedup is 1.07
5. Rsync przez SSH
Dzięki rsync możemy używać protokołu SSH (Secure Shell) do przesyłania danych, korzystając z protokołu SSH podczas przesyłania naszych danych, możesz mieć pewność, że Twoje dane są przesyłane w bezpiecznym połączeniu z szyfrowaniem, dzięki czemu nikt nie może odczytać Twoich danych podczas ich przesyłania przewodowego w Internecie.
Również gdy używamy rsync, musimy podać hasło użytkownika/root, aby wykonać to konkretne zadanie, więc użyj SSH wyśle Twoje dane logowania w sposób zaszyfrowany, dzięki czemu Twoje hasło będzie bezpieczne.
Aby używać rsync przez SSH, możesz użyć opcji -e
, aby określić polecenie powłoki zdalnej, którym jest zwykle ssh, jak pokazano.
rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Skopiuj plik z serwera zdalnego na serwer lokalny za pomocą protokołu SSH
Aby zsynchronizować plik ze zdalnego serwera z serwerem lokalnym, możesz określić protokół za pomocą rsync, używając opcji „-e” z nazwą protokołu, którego chcesz używać.
W tym przykładzie użyjemy „ssh” z opcją „-e” i przeprowadzimy transfer danych.
rsync -avzhe ssh [email :/root/anaconda-ks.cfg /tmp
[email 's password:
receiving incremental file list
anaconda-ks.cfg
sent 43 bytes received 1.10K bytes 325.43 bytes/sec
total size is 1.90K speedup is 1.67
7. Skopiuj plik z serwera lokalnego na serwer zdalny za pomocą protokołu SSH
Aby zsynchronizować plik z serwera lokalnego z serwerem zdalnym za pomocą protokołu SSH, możesz skorzystać z następującego polecenia, jak pokazano.
rsync -avzhe ssh backup.tar.gz [email :/backups/
[email 's password:
sending incremental file list
created directory /backups
backup.tar.gz
sent 224.59K bytes received 66 bytes 64.19K bytes/sec
total size is 224.40K speedup is 1.00
8. Pokaż postęp podczas przesyłania danych za pomocą Rsync
Aby pokazać postęp w przesyłaniu danych z jednej maszyny na drugą, możemy skorzystać z opcji „--progress”
, która wyświetla pliki i czas pozostały do zakończenia transferu.
rsync -avzhe ssh --progress /root/rpmpkgs [email :/root/rpmpkgs
[email 's password:
sending incremental file list
rpmpkgs/
rpmpkgs/httpd-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
1.47M 100% 31.80MB/s 0:00:00 (xfr#1, to-chk=3/5)
rpmpkgs/mod_ssl-2.4.37-40.module_el8.5.0+852+0aafc63b.x86_64.rpm
138.01K 100% 2.69MB/s 0:00:00 (xfr#2, to-chk=2/5)
rpmpkgs/nagios-4.4.6-4.el8.x86_64.rpm
2.01M 100% 18.45MB/s 0:00:00 (xfr#3, to-chk=1/5)
rpmpkgs/nagios-plugins-2.3.3-5.el8.x86_64.rpm
120.48K 100% 1.04MB/s 0:00:00 (xfr#4, to-chk=0/5)
sent 3.74M bytes received 96 bytes 1.50M bytes/sec
total size is 3.74M speedup is 1.00
9. Dołącz pliki o określonym rozszerzeniu za pomocą Rsync
Aby dołączyć określone pliki lub wzorce podczas operacji rsync, możesz użyć opcji --include
z rozszerzeniem pasującym do wszystkich plików.
rsync -avz --include='*.txt' /path/to/source/ user@remote:/path/to/destination/
W podanym przykładzie rsync podczas transferu uwzględni tylko pliki z rozszerzeniem .txt
z katalogu /path/to/source/.
10. Wyklucz pliki o określonym rozszerzeniu za pomocą Rsync
Podobnie, aby wykluczyć określone rozszerzenie podczas operacji rsync, możesz użyć opcji --exclude
ze wzorcem symbolu wieloznacznego.
rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/path/to/destination/
W podanym przykładzie rsync wykluczy podczas transferu pliki z określonym rozszerzeniem (*.ext)
, włączając jednocześnie wszystkie inne pliki i katalogi.
11. Dołącz i wyklucz pliki za pomocą Rsync
Aby uwzględnić lub wykluczyć określone pliki lub wzorce podczas operacji rsync, możesz użyć opcji --include
i --exclude
z odpowiednimi wzorcami wieloznacznymi.
Te dwie opcje pozwalają nam włączyć i wykluczyć pliki poprzez określenie parametrów. Ta opcja pomaga nam określić te pliki lub katalogi, które chcesz uwzględnić w synchronizacji, oraz wykluczyć pliki i foldery z którym nie chcesz zostać przeniesiony.
W tym przykładzie polecenie rsync uwzględni tylko te pliki i katalogi, które zaczynają się od „R”
i wykluczy wszystkie inne pliki i katalogi.
rsync -avze ssh --include 'R*' --exclude '*' [email :/var/lib/rpm/ /root/rpm
12. Użycie opcji –delete z Rsync
Jeśli plik lub katalog nie istnieje w źródle, ale już istnieje w miejscu docelowym, podczas synchronizacji możesz chcieć usunąć ten istniejący plik/katalog w miejscu docelowym.
Możemy użyć opcji „--delete
”, aby usunąć pliki, których nie ma w katalogu źródłowym.
Źródło i cel są zsynchronizowane. Utwórz teraz nowy plik test.txt w miejscu docelowym.
[root@tecmint:~]# cd /root/rpm/
[root@tecmint:~/rpm]# touch test.txt
[root@tecmint:~/rpm]# rsync -avz --delete [email :/var/lib/rpm/ /root/rpm/
[email 's password:
receiving incremental file list
deleting test.txt
./
.dbenv.lock
.rpm.lock
Basenames
Conflictname
Dirnames
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Packages
Providename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.001
__db.002
__db.003
sent 445 bytes received 18,543,954 bytes 2,472,586.53 bytes/sec
total size is 71,151,616 speedup is 3.84
Cel ma nowy plik o nazwie test.txt podczas synchronizacji ze źródłem za pomocą opcji „–delete
” usunął plik test.txt .
13. Ustaw limit przesyłania plików za pomocą Rsync
Możesz określić maksymalny rozmiar pliku do przesłania lub synchronizacji. Można to zrobić za pomocą opcji „--max-size
”. W tym przykładzie maksymalny rozmiar pliku wynosi 200 KB, więc to polecenie prześle tylko te pliki, które są równe lub mniejsze niż 200 KB.
rsync -avzhe ssh --max-size='200k' /var/lib/rpm/ [email :/root/tmprpm
[email 's password:
sending incremental file list
created directory /root/tmprpm
./
.dbenv.lock
.rpm.lock
Conflictname
Enhancename
Filetriggername
Group
Installtid
Name
Obsoletename
Recommendname
Requirename
Sha1header
Sigmd5
Suggestname
Supplementname
Transfiletriggername
Triggername
__db.002
sent 129.52K bytes received 396 bytes 28.87K bytes/sec
total size is 71.15M speedup is 547.66
14. Automatycznie usuwaj pliki źródłowe po przesłaniu
Załóżmy teraz, że masz główny serwer WWW i serwer kopii zapasowych danych, utworzyłeś codzienną kopię zapasową i zsynchronizowałeś ją z serwerem kopii zapasowych, ale teraz nie chcesz przechowywać tej lokalnej kopii zapasowej na swoim serwerze internetowym.
Czy zaczekasz na zakończenie transferu, a następnie ręcznie usuniesz lokalny plik kopii zapasowej? Oczywiście że nie. To automatyczne usunięcie można wykonać za pomocą opcji „--remove-source-files
”.
rsync --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/
[email 's password:
backup.tar.gz
sent 795 bytes received 2.33K bytes 894.29 bytes/sec
total size is 267.30K speedup is 85.40
[root@tecmint:~]# ls -l backup.tar.gz
ls: cannot access 'backup.tar.gz': No such file or directory
15. Wykonaj próbę próbną za pomocą Rsync
Jeśli jesteś nowicjuszem korzystającym z rsync i nie wiesz, co dokładnie zrobi Twoje polecenie. Rsync może naprawdę zepsuć rzeczy w folderze docelowym, a cofanie tej operacji może być żmudną pracą.
Użycie tej opcji nie spowoduje żadnych zmian w plikach i wyświetli wynik polecenia. Jeśli wynik będzie dokładnie taki sam, jak chcesz, możesz usunąć „--dry-run
' z polecenia i uruchom na terminalu.
rsync --dry-run --remove-source-files -zvh backup.tar.gz [email :/tmp/backups/
[email 's password:
backup.tar.gz
sent 50 bytes received 19 bytes 19.71 bytes/sec
total size is 267.30K speedup is 3,873.97 (DRY RUN)
16. Rsync Ustaw limit przepustowości i prześlij plik
Możesz ustawić limit przepustowości podczas przesyłania danych z jednego komputera na drugi za pomocą opcji „--bwlimit
”. Ta opcja pomaga nam ograniczyć przepustowość we/wy.
rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email :/root/tmprpm/
[email 's password:
sending incremental file list
sent 324 bytes received 12 bytes 61.09 bytes/sec
total size is 38.08M speedup is 113347.05
Ponadto domyślnie rsync synchronizuje tylko zmienione bloki i bajty, jeśli wyraźnie chcesz zsynchronizować cały plik, użyj z nim opcji „-W”.
rsync -zvhW backup.tar /tmp/backups/backup.tar
backup.tar
sent 14.71M bytes received 31 bytes 3.27M bytes/sec
total size is 16.18M speedup is 1.10
Wniosek
Na tym kończy się nasz przegląd rsync i jego możliwości. W celu dalszego poznania jego rozbudowanych opcji i funkcjonalności zachęcam do zapoznania się z dostępnymi obszernymi stronami podręcznika (stronami podręcznika).