Wyszukiwanie w witrynie

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