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

2. Скопировать/Синхронизировать каталог локально
Следующая команда передаст или синхронизирует все файлы из одного каталога в другой каталог на том же компьютере.
Здесь, в этом примере, /root/rpmpkgs содержит некоторые файлы пакетов rpm, и вы хотите, чтобы этот каталог был скопирован внутрь папки /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. Скопировать каталог с локального на удаленный сервер
Чтобы скопировать каталог с локального сервера на удаленный сервер, вы можете использовать следующую команду, которая синхронизирует каталог с локального на удаленный компьютер.
Например, если на вашем локальном компьютере есть папка ” rpmpkgs“, которая содержит некоторые пакеты RPM, и если вы хотите, чтобы содержимое этой локальной директории отправилось на удаленный сервер, вы можете использовать следующую команду.
# 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. Скопировать каталог с удаленного на локальный сервер
Эта команда поможет вам синхронизировать удаленный каталог с локальным каталогом. В этом примере каталог /root/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 (Secure Shell) для передачи данных, используя протокол SSH во время передачи данных можно быть уверенным, что ваши данные передаются по защищенному соединению с шифрованием, так что никто не сможет прочитать ваши данные во время передачи через интернет.
Также, когда мы используем rsync, нам нужно предоставить пользовательский/root пароль для выполнения этой конкретной задачи, поэтому использование опции SSH отправит ваши логины в зашифрованном виде, чтобы ваш пароль был в безопасности.
Для использования rsync через SSH вы можете использовать опцию -e
, чтобы указать команду удаленной оболочки, которая обычно является ssh, как показано.
# rsync [OPTIONS] -e ssh /path/to/source user@remote:/path/to/destination
6. Копирование файла с удаленного сервера на локальный сервер с помощью SSH
Для синхронизации файла с удаленного сервера на локальный сервер вы можете указать протокол с помощью rsync, используя опцию «-e» с именем протокола, который вы хотите использовать.
Здесь, в этом примере, мы будем использовать «ssh» с опцией «-e» и выполнять передачу данных.
# 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/ user@remote:/path/to/destination/
В предоставленном примере rsync будет включать только файлы с расширением .txt
из каталога /path/to/source/ во время передачи.
10. Исключение файлов с определенным расширением с помощью Rsync
Аналогично, чтобы исключить определенное расширение во время операции rsync, вы можете использовать опцию --exclude
с шаблоном подстановки.
# rsync -avz --exclude='*.ext' /path/to/source/ user@remote:/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 в целевом каталоге.
[root@tecmint:~]# cd /root/rpm/ [root@tecmint:~/rpm]# touch test.txt [root@tecmint:~/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
». Здесь, в этом примере, максимальный размер файла составляет 200k, поэтому эта команда будет передавать только те файлы, которые равны или меньше 200k.
# 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 [root@tecmint:~]# 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 и его возможностей. Для дальнейшего изучения его обширных опций и функциональности, я рекомендую обратиться к подробным страницам руководства (man pages), доступным.
Source:
https://www.tecmint.com/rsync-local-remote-file-synchronization-commands/