Polecenie rsync w Linuksie: opcje i przykłady użycia

Jeśli za każdym razem kopiujesz cały folder, by zsynchronizować dwa serwery, transfer ma pełny rozmiar, nawet gdy zmienił się tylko jeden plik. Polecenie rsync to skrót od remote sync. Porównuje źródło z celem i wysyła tylko różniące się pliki, działając tak samo między folderami lokalnymi i między serwerami połączonymi przez SSH. Ten wpis omawia podstawy, opcje i przykłady dwóch metod połączenia: SSH i demona rsync.
Wyniki w tym wpisie pochodzą z rsync 3.2.7 w AlmaLinux 9.8. Jeśli rsync nie jest zainstalowany, zainstaluj go menedżerem pakietów.
# rodzina RHEL
dnf -y install rsync
# rodzina Debian
apt -y install rsync✅ Podstawowe użycie
Podstawowa składnia wygląda tak.
rsync -opcje źródło celPodobnie jak w poleceniu cp, najpierw wpisz źródło, a po nim cel. Ukośnik [/] na końcu źródła sprawia, że do celu trafia tylko zawartość folderu; bez niego trafia cały folder.
~]# rsync -av www/ backup/
sending incremental file list
index.html
img/
img/logo.png
~]# rsync -av www backup/
sending incremental file list
www/
www/index.html
www/img/
www/img/logo.pngUruchom to samo polecenie ponownie, a lista plików będzie pusta, a liczba bajtów sent spadnie do kilkuset. Pliki o tym samym rozmiarze i czasie modyfikacji są pomijane.
~]# rsync -av www/ backup/
sending incremental file list
sent 166 bytes received 13 bytes 358.00 bytes/sec
total size is 3,015 speedup is 16.84Z samym -r, bez -a, czasy modyfikacji nie są zachowywane, więc następne uruchomienie znowu wyśle te same pliki. Przy synchronizacji folderów domyślnie używaj -a.
Opcja -n pokazuje tylko, które pliki by się zmieniły, niczego nie przesyłając, a wynik kończy się [(DRY RUN)]. Opcje usuwające pliki w celu, jak --delete, najpierw sprawdź przez -n, a dopiero potem uruchom naprawdę.
~]# rsync -avn --delete www/ backup/
sending incremental file list
deleting old.bak
index.html
sent 188 bytes received 39 bytes 454.00 bytes/sec
total size is 3,013 speedup is 13.27 (DRY RUN)✅ Opcje polecenia rsync & symulator
| Opcja | Opis | |
|---|---|---|
| -a | --archiveKopiuje też podkatalogi i zachowuje uprawnienia, właściciela, czas modyfikacji i dowiązania symboliczne (to samo co -rlptgoD) | |
| -v | --verboseWypisuje nazwę każdego przesłanego pliku i sumy transferu | |
| -z | --compressKompresuje dane plików podczas transferu | |
| -r | --recursiveKopiuje też podkatalogi (zawarte w -a) | |
| -t | --timesZachowuje czasy modyfikacji (zawarte w -a). To decyduje, które pliki zostaną pominięte przy następnym uruchomieniu | |
| -n | --dry-runPokazuje tylko pliki, które by się zmieniły, bez transferu, i oznacza koniec przez (DRY RUN) | |
| -u | --updatePomija pliki nowsze w miejscu docelowym | |
| -h | --human-readableWypisuje bajty w jednostkach K, M i G | |
| -P | To samo co --partial --progress. Pokazuje postęp dla każdego pliku i wznawia przerwane transfery | |
| -i | --itemize-changesWypisuje kodem, co zmieniło się w każdym pliku>f+++++++++ nowy plik · >f.st...... zmiana rozmiaru i czasu · *deleting usunięty | |
| -e | --rsh=COMMANDOkreśla powłokę zdalną-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Usuwa z celu pliki, których nie ma już w źródle (wymaga -r lub -a) | |
| --exclude=PATTERN | Wyklucza pliki i katalogi pasujące do wzorca--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Umieszczone przed --exclude wyłącza tylko ten wzorzec z wykluczenia | |
| --max-size=SIZE | Nie przesyła plików większych niż podany rozmiar (--min-size dla mniejszych)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Ogranicza szybkość transferu, w KiB/s | |
| --stats | Wypisuje liczbę plików i statystyki transferu |
✅ Metody połączenia: SSH i demon rsync
Są dwa sposoby połączenia ze zdalnym serwerem. Jeden dwukropek [:] po hoście idzie przez SSH; podwójny dwukropek [::] łączy się bezpośrednio z demonem rsync na porcie 873.
| Rodzaj | Metoda SSH (:) | Metoda demona rsync (::) |
|---|---|---|
| Składnia | rsync -opcje user@host:/ścieżka /lokalna/ścieżka | rsync -opcje host::moduł/ścieżka /lokalna/ścieżka |
| Port | Port SSH (domyślnie 22) | 873 |
| Szyfrowanie | Szyfrowane przez SSH | Brak szyfrowania |
| Uwierzytelnianie | Klucz SSH lub hasło | hosts allow w rsyncd.conf; konto i hasło opcjonalnie |
| Konfiguracja po stronie serwera | Brak (działa, gdy działa dostęp SSH) | Instalacja rsync-daemon, /etc/rsyncd.conf, otwarcie portu 873 |
| Przeznaczenie | Kopie zapasowe i wdrożenia między serwerami (domyślny wybór) | Kopiowanie lustrzane w sieci wewnętrznej bez rozdawania kont SSH |
🔲 Metoda SSH
Jeśli masz dostęp do serwera przez SSH, działa bez konfiguracji po stronie serwera. Gdy port jest inny albo używasz pliku klucza, wstaw polecenie ssh w niezmienionej postaci do opcji -e.
# lokalnie → zdalnie
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# zdalnie → lokalnie
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# port SSH i plik klucza
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Aby pominąć określone pliki lub katalogi, dodaj --exclude raz dla każdego wzorca albo zgrupuj wzorce w nawiasach klamrowych i wpisz je raz.
rsync -avz --exclude 'html_Remote_Excertion' --exclude 'Exception_File' root@192.168.45.239:/home/1server_data/ /home/2server_data
rsync -avz --exclude={'html_Remote_excertion/*','Exception_File'} root@192.168.45.239:/home/1server_data/ /home/2server_data
🔲 Metoda demona rsync
Demon rsync daje dostęp do modułów na porcie 873 bez konta SSH. Ruch nie jest szyfrowany, więc używa się go między serwerami w tej samej sieci wewnętrznej.
W AlmaLinux 9 zainstaluj pakiet rsync-daemon i uruchom usługę. Na serwerach z firewalld otwórz port 873; na serwerach w chmurze otwórz go w zaporze w konsoli. Metoda xinetd z RHEL 8 i starszych zniknęła w 9.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadW pliku konfiguracyjnym [/etc/rsyncd.conf] ustaw nazwę modułu, ścieżkę i dozwolone hosty. Przy read only ustawionym na yes zdalni klienci mogą tylko pobierać.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Po stronie zdalnej sam podwójny dwukropek po hoście wypisuje moduły; dodanie nazwy modułu pokazuje pliki w środku.
~]# rsync 192.168.45.239::
myhome
home
~]# rsync 192.168.45.239::myhome
drwxr-xr-x 4,096 2025/06/12 22:14:39 .
drwxr-xr-x 4,096 2025/06/12 22:21:10 1server_data
drwxr-xr-x 4,096 2025/06/12 22:14:39 2server_dataKopiowanie ma postać [host::moduł/ścieżka]. --delete usuwa z celu pliki, których nie ma w źródle, a --include wyłącza z wykluczenia tylko pozycje umieszczone przed --exclude.
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
./
Exception_File
html_Remote/
html_Remote_Excertion/
sent 58 bytes received 332 bytes 780.00 bytes/sec
total size is 442 speedup is 1.13
~]# rsync -avz --delete 192.168.45.239::myhome/1server_data/ /home/2server_data/
~]# rsync -avz --include '*.html' --exclude 'exclude.txt' 192.168.45.239::myhome/1server_data/ /home/2server_data/

Na serwerze z włączonym SELinux dostęp do ścieżki modułu może zostać zablokowany komunikatem [Permission denied (13)]. W teście przeszło po wyłączeniu SELinux poleceniem [setenforce 0].
~]# rsync -avz 192.168.45.239::myhome/1server_data/ /home/2server_data/
receiving incremental file list
rsync: change_dir "/1server_data" (in myhome) failed: Permission denied (13)
sent 8 bytes received 90 bytes 65.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see poprzedni errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit ogranicza szybkość transferu w KiB/s, a z -P widać też postęp każdego pliku. --max-size i --min-size przesyłają tylko pliki w podanym zakresie rozmiaru.
rsync -avzP --bwlimit=100 192.168.45.239::myhome/1server_data/ /home/2server_data/
rsync -avz --max-size='3M' --min-size='10k' 192.168.45.239::myhome/1server_data/ /home/2server_data/
ℹ️ Informacja o linkach partnerskich
Treści tej witryny zawierają linki partnerskie. Jeśli odwiedzający kupi produkt lub usługę przez taki link, witryna otrzymuje od sprzedawcy prowizję. Kwota płacona przy tym przez kupującego (podczas promocji spada↓) nie wzrasta. Podane ceny, rabaty i dostępność odnoszą się do chwili pisania i mogą różnić się od stanu faktycznego, dlatego przed zakupem sprawdź je u sprzedawcy. Produkty wybieramy i oceniamy według własnych kryteriów, a prowizja nie wpływa ani na kolejność prezentacji, ani na treść ocen.