Rsync (Удаленная синхронизация) — наиболее часто используемая команда для удаленное копирование и синхронизация файлов и каталогов а также локально в системах Linux/Unix.
С помощью rsync командой, вы можете копировать и синхронизировать свои данные удаленно и локально между каталогами, дисками и сетями, выполнять резервное копирование данных и зеркало между двумя машинами Linux.

В этой статье объясняется 16 базовое и расширенное использование rsync команда для передачи ваших файлов удаленно и локально в на базе Linux машины. Вам не нужно быть корень пользователь для запуска rsync команда.
Оглавление
Преимущества команды Rsync
Он предлагает несколько преимуществ, в том числе:
- Эффективная передача файлов – rsync использует алгоритм дельта-передачи, что означает, что он передает только различия между исходными и целевыми файлами, что значительно уменьшает объем передаваемых данных, что делает его эффективным для синхронизации больших файлов или каталогов.
- Удаленная синхронизация файлов – rsync поддерживает как локальную, так и удаленную передачу файлов по SSH, что позволяет синхронизировать локальные и удаленные системы или зеркалировать каталоги на нескольких машинах.
- Инкрементальные резервные копии – rsync хорошо подходит для инкрементных резервных копий, поскольку он эффективно создает и обновляет резервные копии, передавая только новые или измененные файлы.
- Сохраняет права доступа к файлам – rsync может сохранять различные атрибуты файлов, такие как разрешения, право собственности, метки времени и символические ссылки, что гарантирует, что скопированные файлы сохранят свои исходные характеристики в месте назначения.
- Контроль пропускной способности – rsync позволяет вам ограничить использование пропускной способности во время передачи файлов, поскольку он использует метод сжатия и распаковки при отправке и получении данных на обоих концах.
- Быстрее – rsync может быть быстрее, чем scp (защищенное копирование) для передачи файлов, особенно при синхронизации больших каталогов или при работе с файлами, которые уже были частично переданы или существуют в месте назначения.
Синтаксис команды Rsync
rsync команда следует следующему синтаксису:
# rsync [OPTIONS] SOURCE DESTINATION
Вот объяснение различных компонентов и опций, используемых с rsync команды:
-v
– Подробный вывод, отображающий подробную информацию о переводе.-r
– рекурсивно копирует данные (но не сохраняет временные метки и разрешения при передаче данных.-a
– режим архива, который позволяет рекурсивно копировать файлы, а также сохраняет символические ссылки, права доступа к файлам, владельцев пользователей и групп и временные метки.-z
– Сжимайте файлы во время передачи, чтобы сократить использование сети.-h
– удобочитаемый, вывод чисел в удобочитаемом формате.-P
– Показать прогресс во время передачи.SOURCE
– Указывает исходный файл(ы) или каталог для передачи, который может быть локальным или удаленным.DESTINATION
– Указывает путь назначения, куда будут скопированы файлы или каталоги. Подобно источнику, это может быть локальный путь или удаленное местоположение.
Установите Rsync в системе Linux
Мы можем установить rsync package с помощью следующего менеджера пакетов в соответствии с вашим дистрибутивом Linux.
$ 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. Копировать/синхронизировать файл локально
Чтобы скопировать или синхронизировать файл локально, вы можете использовать следующую команду, которая синхронизирует один файл на локальном компьютере из одного места в другое.
Здесь, в этом примере, имя файла резервная копия.tar необходимо скопировать или синхронизировать с /tmp/резервные копии/ папка.
[[email protected]]# 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
В приведенном выше примере вы можете видеть, что если место назначения еще не существует, rsync автоматически создаст каталог для места назначения.

2. Копировать/синхронизировать каталог локально
Следующая команда перенесет или синхронизирует все файлы из одного каталога в другой каталог на том же компьютере.
Вот в этом примере /корень/rpmpkgs содержит несколько файлов пакета rpm, и вы хотите, чтобы этот каталог был скопирован внутрь /tmp/резервные копии/ папка.
[[email protected]]# 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. Скопируйте каталог с локального на удаленный сервер
Чтобы скопировать каталог с локального сервера на удаленный сервер, вы можете использовать следующую команду, которая синхронизирует каталог с локального компьютера на удаленный.
Например, если на локальном компьютере есть папка “rpmpkgs», который содержит некоторые об/мин пакеты, и если вы хотите, чтобы содержимое этого локального каталога отправлялось на удаленный сервер, вы можете использовать следующую команду.
# rsync -avzh /root/rpmpkgs [email protected]:/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 protected]'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. Скопируйте каталог с удаленного на локальный сервер
Эта команда поможет вам синхронизировать удаленный каталог с локальным каталогом. Здесь, в этом примере, каталог /корень/rpmpkgs который находится на удаленном сервере, копируется на ваш локальный компьютер в /tmp/myrpms.
# rsync -avzh [email protected]:/root/rpmpkgs /tmp/myrpms [email protected]'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 через SSH
С rsyncмы можем использовать SSH (безопасная оболочка) для передачи данных с помощью SSH протокола при передаче наших данных, вы можете быть уверены, что ваши данные передаются по защищенному соединению с шифрованием, чтобы никто не мог прочитать ваши данные, пока они передаются по сети в Интернете.
Также, когда мы используем rsync мы должны предоставить пользователь/корень пароль для выполнения этой конкретной задачи, поэтому с помощью SSH опция отправит ваши логины в зашифрованном виде, чтобы ваш пароль будет в безопасности.
Использовать rsync над SSHвы можете использовать -e
параметр, чтобы указать удаленную команду оболочки, которая обычно является ssh, как показано.
# rsync [OPTIONS] -e ssh /path/to/source [email protected]:/path/to/destination
6. Скопируйте файл с удаленного сервера на локальный сервер с помощью SSH.
Чтобы синхронизировать файл с удаленного сервера на локальный сервер, вы можете указать протокол с rsync используя “-е” с именем протокола, который вы хотите использовать.
Здесь, в этом примере, мы будем использовать «ssh” с “-е” и выполните передачу данных.
# rsync -avzhe ssh [email protected]:/root/anaconda-ks.cfg /tmp [email protected]'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. Скопируйте файл с локального сервера на удаленный сервер с помощью SSH.
Чтобы синхронизировать файл с локального сервера на удаленный сервер с помощью SSH, вы можете использовать следующую команду, как показано ниже.
# rsync -avzhe ssh backup.tar.gz [email protected]:/backups/ [email protected]'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. Показать прогресс при передаче данных с помощью Rsync
Чтобы показать прогресс при передаче данных с одной машины на другую, мы можем использовать ‘--progress'
опция, которая отображает файлы и время, оставшееся до завершения передачи.
# rsync -avzhe ssh --progress /root/rpmpkgs [email protected]:/root/rpmpkgs [email protected]'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. Включите файлы с определенным расширением с помощью Rsync
Чтобы включить определенные файлы или шаблоны во время операции rsync, вы можете использовать --include
вариант с расширением, которое соответствует всем файлам.
# rsync -avz --include="*.txt" /path/to/source/ [email protected]:/path/to/destination/
В приведенном примере rsync будет включать только файлы с .txt
расширение от /путь/к/источнику/ каталог во время передачи.
10. Исключите файлы с определенным расширением с помощью Rsync
Точно так же, чтобы исключить конкретное расширение во время операции rsync, вы можете использовать --exclude
вариант с подстановочным знаком.
# rsync -avz --exclude="*.ext" /path/to/source/ [email protected]:/path/to/destination/
В приведенном примере rsync исключит файлы с указанным расширением. (*.ext)
во время передачи, включая все остальные файлы и каталоги.
11. Включайте и исключайте файлы с помощью Rsync
Чтобы включить или исключить определенные файлы или шаблоны во время операции rsync, вы можете использовать как --include
и --exclude
параметры с соответствующими шаблонами подстановочных знаков.
Эти два варианта позволяют нам включать и исключать файлы, указав параметры, эта опция помогает нам указать те файлы или каталоги, которые вы хотите включить в синхронизацию, и исключить файлы и папки, которые вы не хотите передавать.
Здесь, в этом примере, rsync команда будет включать только те файлы и каталоги, которые начинаются с ‘R’
и исключить все остальные файлы и каталоги.
# rsync -avze ssh --include 'R*' --exclude '*' [email protected]:/var/lib/rpm/ /root/rpm

12. Использование опции –delete с Rsync
Если файл или каталог не существует в источнике, но уже существует в месте назначения, вы можете удалить этот существующий файл/каталог в месте назначения во время синхронизации.
Мы можем использовать ‘--delete
‘ для удаления файлов, которых нет в исходном каталоге.
Источник и цель синхронизированы. Теперь создайте новый файл test.txt у цели.
[[email protected]:~]# cd /root/rpm/ [[email protected]:~/rpm]# touch test.txt [[email protected]int:~/rpm]# rsync -avz --delete [email protected]:/var/lib/rpm/ /root/rpm/ [email protected]'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
У цели есть новый файл с именем test.txt при синхронизации с источником с ‘–delete
‘, он удалил файл test.txt.

13. Установите лимит передачи файлов с помощью Rsync
Вы можете указать Макс размер файла для передачи или синхронизации. Вы можете сделать это с помощью «--max-size
” вариант. Здесь, в этом примере, максимальный размер файла 200 тыс.поэтому эта команда будет передавать только те файлы, которые равны или меньше 200 тыс..
# rsync -avzhe ssh --max-size="200k" /var/lib/rpm/ [email protected]:/root/tmprpm [email protected]'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. Автоматически удалять исходные файлы после передачи
Теперь предположим, что у вас есть основной веб-сервер и сервер резервного копирования данных, вы создали ежедневную резервную копию и синхронизировали ее со своим сервером резервного копирования, но теперь вы не хотите хранить эту локальную копию резервной копии на своем веб-сервере.
Итак, вы будете ждать завершения передачи, а затем вручную удалите этот локальный файл резервной копии? Конечно же нет. Это автоматическое удаление может быть выполнено с помощью ‘--remove-source-files
‘ вариант.
# rsync --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'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 [[email protected]:~]# ls -l backup.tar.gz ls: cannot access 'backup.tar.gz': No such file or directory

15. Сделайте пробный прогон с Rsync
Если вы новичок в использовании rsync и не знаете, что именно будет делать ваша команда. Rsync может действительно испортить вещи в вашей папке назначения, и тогда отмена может быть утомительной работой.
Использование этой опции не приведет к каким-либо изменениям в файлах и покажет вывод команды. Если вывод показывает точно то же, что вы хотите сделать, вы можете удалить ‘--dry-run
‘ из вашей команды и запустите на терминале.
# rsync --dry-run --remove-source-files -zvh backup.tar.gz [email protected]:/tmp/backups/ [email protected]'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 Установить ограничение пропускной способности и передать файл
Вы можете установить ограничение пропускной способности при передаче данных с одной машины на другую с помощью ‘--bwlimit
‘ вариант. Эта опция помогает нам ограничить ввод/вывод пропускная способность.
# rsync --bwlimit=100 -avzhe ssh /var/lib/rpm/ [email protected]:/root/tmprpm/ [email protected]'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
Кроме того, по умолчанию rsync синхронизирует только измененные блоки и байты, если вы хотите явно синхронизировать весь файл, используйте ‘-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
Заключение
На этом наш обзор rsync и его возможности. Для дальнейшего изучения его обширных опций и функций я рекомендую вам обратиться к доступным всеобъемлющим справочным страницам (справочным страницам).