Команда rsync в Linux: опции и примеры использования

Если ради синхронизации папок на двух серверах каждый раз копировать всё заново, объём передачи остаётся равным полному размеру, даже когда изменился всего один файл. Команда rsync (сокращение от remote sync) сравнивает источник и приёмник и передаёт только различающиеся файлы, причём одинаково работает и между локальными папками, и между серверами, соединёнными по SSH. В этой статье разобраны базовое использование, опции и примеры двух способов подключения — через SSH и через демон rsync.
Вывод в этой статье получен с rsync 3.2.7 в AlmaLinux 9.8; если rsync не установлен, установите его через менеджер пакетов.
# Семейство RHEL
dnf -y install rsync
# Семейство Debian
apt -y install rsync✅ Базовое использование
Базовый синтаксис выглядит так.
rsync -опции источник приёмникКоманда cp принимает аргументы в том же порядке: сначала источник, затем приёмник. Если поставить в конце источника косую черту [/], в приёмник попадёт только содержимое папки, а без неё — папка целиком.
~]# 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.pngЕсли запустить ту же команду ещё раз, список файлов будет пуст, а значение sent сократится до нескольких сотен байт: файлы с тем же размером и временем изменения пропускаются.
~]# 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.84Если указать только -r без -a, время изменения не сохраняется, и при следующем запуске те же файлы будут отправлены снова. При синхронизации папок по умолчанию добавляйте -a.
Опция -n показывает только файлы, которые изменятся, ничего не передавая, а в конце вывода появляется [(DRY RUN)]. Опции, удаляющие файлы в приёмнике, например --delete, сначала проверяйте с -n и только потом запускайте.
~]# 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)✅ Опции команды rsync & симулятор
| Опция | Описание | |
|---|---|---|
| -a | --archiveКопирует и подкаталоги, сохраняя права, владельца, время изменения и символические ссылки (то же, что -rlptgoD) | |
| -v | --verboseВыводит имена переданных файлов и объём передачи | |
| -z | --compressСжимает данные файлов во время передачи | |
| -r | --recursiveКопирует и подкаталоги (входит в -a) | |
| -t | --timesСохраняет время изменения (входит в -a). По нему определяется, какие файлы пропустить при следующем запуске | |
| -n | --dry-runВыводит только файлы, которые изменятся, ничего не передавая, и добавляет в конце (DRY RUN) | |
| -u | --updateПропускает файлы, которые в приёмнике новее | |
| -h | --human-readableВыводит число байт в единицах K, M и G | |
| -P | То же, что --partial --progress. Показывает ход передачи каждого файла и возобновляет прерванные передачи | |
| -i | --itemize-changesВыводит изменения по каждому файлу в виде условных обозначений>f+++++++++ новый файл · >f.st...... изменение размера и времени · *deleting удаление | |
| -e | --rsh=COMMANDЗадаёт удалённую оболочку-e 'ssh -p 2222 -i /root/.ssh/key.pem' | |
| --delete | Удаляет в приёмнике файлы, которых нет в источнике (нужна -r или -a) | |
| --exclude=PATTERN | Исключает файлы и каталоги, подходящие под шаблон--exclude '*.tmp' --exclude 'cache/' | |
| --include=PATTERN | Ставится перед --exclude и выводит из-под исключения только этот шаблон | |
| --max-size=SIZE | Не передаёт файлы больше заданного размера (--min-size — файлы меньше заданного)--max-size=3M --min-size=10k | |
| --bwlimit=RATE | Ограничивает скорость передачи, единица — KiB/s | |
| --stats | Выводит статистику по числу файлов и объёму передачи |
✅ Способы подключения: SSH и демон rsync
Для синхронизации с удалённым сервером есть два способа подключения. Одно двоеточие [:] после хоста означает подключение через SSH, а двойное двоеточие [::] — прямое подключение к демону rsync на порту 873.
| Категория | Через SSH (:) | Через демон rsync (::) |
|---|---|---|
| Синтаксис | rsync -опции user@host:/путь /локальный/путь | rsync -опции host::модуль/путь /локальный/путь |
| Порт | Порт SSH (по умолчанию 22) | 873 |
| Шифрование | Шифруется через SSH | Без шифрования |
| Аутентификация | SSH-ключ или пароль | hosts allow в rsyncd.conf; по желанию — учётная запись и пароль |
| Настройка на сервере | Не нужна (достаточно доступа по SSH) | Установка rsync-daemon, /etc/rsyncd.conf, открытие порта 873 |
| Назначение | Резервное копирование и развёртывание между серверами (выбор по умолчанию) | Зеркалирование во внутренней сети без выдачи учётных записей SSH |
🔲 Подключение через SSH
Если к серверу можно подключиться по SSH, rsync сразу работает без настройки на стороне сервера. Если порт другой или используется файл ключа, укажите команду ssh как есть в опции -e.
# локальный → удалённый
rsync -avz /home/2server_data/ root@192.168.45.239:/home/1server_data/
# удалённый → локальный
rsync -avz root@192.168.45.239:/home/1server_data/html_Remote /home/2server_data
# Указать порт SSH и файл ключа
rsync -avz -e 'ssh -p 2222 -i /root/.ssh/key.pem' root@192.168.45.239:/home/1server_data/ /home/2server_data
Чтобы исключить определённые файлы или каталоги, добавьте --exclude отдельно для каждого шаблона или перечислите шаблоны в фигурных скобках за один раз.
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
🔲 Подключение через демон rsync
Демон rsync даёт доступ к модулям через порт 873 без учётной записи SSH. Трафик при этом не шифруется, поэтому демон используют между серверами одной внутренней сети.
В AlmaLinux 9 установите пакет rsync-daemon и запустите службу. Если на сервере работает firewalld, откройте порт 873, а на облачных серверах — в брандмауэре консоли. Способ через xinetd, которым пользовались в RHEL 8 и более ранних версиях, в 9 убран.
dnf -y install rsync-daemon
systemctl enable --now rsyncd
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --reloadВ файле конфигурации [/etc/rsyncd.conf] укажите имя модуля, путь и разрешённые хосты. Если задать для read only значение yes, удалённые клиенты смогут только забирать данные.
[myhome]
path = /home
uid = root
gid = root
use chroot = yes
read only = yes
hosts allow = 192.168.45.182
max connections = 3
timeout = 30Если с удалённой машины указать после хоста только два двоеточия, появится список модулей, а если добавить имя модуля — список файлов в нём.
~]# 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_dataКопирование задаётся в формате [хост::модуль/путь]. --delete удаляет в приёмнике файлы, которых нет в источнике, а --include выводит из-под исключения только элементы, указанные перед --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/

На сервере с включённым SELinux доступ к пути модуля может блокироваться с ошибкой [Permission denied (13)]. В тесте всё прошло после отключения SELinux командой [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 назад errors) (code 23) at main.c(1658) [Receiver=3.1.2]--bwlimit ограничивает скорость передачи в KiB/s, а если добавить -P, заодно виден ход передачи каждого файла. --max-size и --min-size передают только файлы в заданном диапазоне размеров.
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/
ℹ️ О партнёрских ссылках
Материалы этого сайта содержат партнёрские ссылки. Если посетитель покупает товар или услугу по такой ссылке, сайт получает комиссию от продавца. При этом сумма, которую платит покупатель (при акционных скидках сумма снижается ↓), не увеличивается. Указанные цены, скидки и наличие актуальны на момент написания и могут отличаться, поэтому перед покупкой уточняйте их у продавца. Товары выбираются и оцениваются по нашим собственным критериям, а комиссия не влияет ни на порядок, ни на содержание обзоров.