Как использовать команду Rsync в Linux: 16 практических примеров

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 автоматически создаст каталог для пункта назначения.

Rsync Local Files

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
Rsync Local Directory

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
Rsync Directory Remote System

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
Rsync Remote Directory to Local

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
Rsync Copy Remote File to Local

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
Rsync Copy Local File to Remote

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
Rsync Progress While Copying Files

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
Rsync Include and Exclude Files

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 удален.

Rsync Delete Option

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
Rsync Set Max File Transfer Size

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
Rsync Delete Source File After Transfer

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)
Rsync 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/