17 полезных примеров команд rsync (удаленная синхронизация) в Linux

17 полезных примеров команд rsync (удаленная синхронизация) в Linux

 

Как следует из названия, команда rsync используется для локальной и удаленной синхронизации (или копирования) файлов и каталогов. Одной из важных особенностей rsync является то, что он работает по « алгоритму дельта-передачи », что означает, что он будет только синхронизировать или копировать изменения из источника в место назначения вместо копирования всего файла, что в конечном итоге сокращает объем данных, отправляемых по сети. Вундеркинды Linux обычно используют команду rsync для повседневного управления резервным копированием, зеркалированием и восстановлением. Он использует удаленную оболочку, такую ​​как SSH, при синхронизации файлов с локальной машины на удаленную, и любой пользователь в системе может использовать команду rsync, поскольку она не требует прав root или sudo .

В этой статье мы обсудим 17 полезных примеров команды rsync в Linux, эти примеры особенно помогут новичкам в Linux более эффективно управлять задачами синхронизации, зеркалирования и резервного копирования.

Команда Rsync доступна для всех операционных систем типа UNIX и Linux. Когда мы выполняем минимальную установку CentOS и RHEL OS, тогда пакет rsync не является частью установки по умолчанию, поэтому для установки rsync на CentOS и RHEL выполните следующую команду yum

~]# yum install rsync -y

В операционных системах Debian Like (Ubuntu и Linux Mint) используйте команду ниже apt для установки инструмента rysnc

~]# apt install rsync -y

Синтаксис команды rsync:

Локальная синхронизация: # rsync {options} {Source} {Destination}

Удаленная синхронизация: # rsync {options}  <User_Name>@<Remote-Host>:<Source-File-Dir>  <Destination>

Удаленная синхронизация: # rsync  <Options>  <Source-Files-Dir>   <User_Name>@<Remote-Host>:<Destination>

Некоторые из наиболее часто используемых параметров команды rsync перечислены ниже:

  • -v, –verbose                            Подробный вывод
  • -q, –quiet                                 вывод сообщения
  • -a, –archive                             архивные файлы и каталог во время синхронизации (-a равно следующим параметрам -rlptgoD)
  • -r, –recursive                          рекурсивная синхронизация файлов и каталогов рекурсивно
  • -b, –backup                             сделать резервную копию во время синхронизации
  • -u, –update                             не копировать файлы из источника в место назначения, если файлы назначения новее
  • -l, –links                                  копировать символические ссылки как символические ссылки во время синхронизации
  • -n, –dry-run                            выполнить пробный запуск без синхронизации
  • -e, –rsh=COMMAND            указать удаленную оболочку для использования в rsync
  • -z, –compress                         сжимать данные файла во время передачи
  • -h, –human-readable           человечески понятное отображение выходных чисел в удобочитаемом формате
  • –progress                                показать прогресс синхронизации во время передачиr

Давайте перейдем к полезным примерам команды rsync

Пример: 1) Копирование или синхронизация файлов локально (rsync -zvh)

Предположим, мы хотим скопировать файл из домашнего каталога пользователя pkumar в папку /opt/back, выполните следующую команду  rsync>rsync -zvh /home/pkumar/OpenStack-Networking.pdf /opt/backup
OpenStack-Networking.pdf
sent 4.09M bytes  received 35 bytes  2.73M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

Выше мы использовали такие параметры, как -z для сжатия, -v для подробного вывода и -h для вывода, удобочитаемого человеком.

Пример: 2) Копировать или синхронизировать каталог локально (rsync -zavh)

Предположим, мы хотим скопировать или синхронизировать домашний каталог пользователя pkumar в папку /opt/backup выполните следующую команду rsync с параметрами -zavh,

[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup
sending incremental file list
pkumar/
pkumar/.bash_logout
pkumar/.bash_profile
pkumar/.bashrc
pkumar/OpenStack-Networking.pdf

sent 4.09M bytes  received 96 bytes  8.19M bytes/sec
total size is 6.15M  speedup is 1.50
[[email protected] ~]#

Давайте проверим, скопирован ли каталог или нет, выполните команду ниже,

[[email protected] ~]# ls -ld /opt/backup/*
-rwx------. 1 root   root   6153239 Apr  7 00:25 /opt/backup/OpenStack-Networking.pdf
drwx------. 2 pkumar pkumar      90 Apr  7 00:25 /opt/backup/pkumar
[[email protected] ~]#

Как мы видим, каталог «pkumar» создается в папке назначения, и его содержимое также копируется. В приведенном выше примере, если использовать trail / после исходной папки(/home/pkumar/) тогда команда rsync не создаст каталог pkumar в месте назначения, а скопирует только содержимое..

[[email protected] ~]# rsync -zavh /home/pkumar/ /opt/backup

Локальное рекурсивное копирование файлов и каталогов (rsync -zrvh or rsync -zavh)

Предположим, у нас есть несколько файлов и каталогов внутри домашнего каталога пользователя pkumar, используйте приведенную ниже команду rsync для рекурсивного копирования файлов и каталогов, либо используйте параметр -a или -r для рекурсивного копирования файлов и каталогов.

Примечание . В команде rsync  параметр -a используется для архивирования во время копирования или синхронизации, а кроме архивирования параметр -a также используется для следующих целей:

  • рекурсивно копировать файлы и каталог
  • копировать символические ссылки как символические ссылки
  • сохранить разрешения, группу, время модификацииправо, собственности
[[email protected] ~]# rsync -zrvh /home/pkumar /opt/backup
or
[[email protected] ~]# rsync -zavh /home/pkumar /opt/backup

Пример: 4) Копирование или синхронизация файлов и каталогов из локальной в удаленную систему.

Предположим, мы хотим скопировать папку “/home/pkumar/techi” с локальной машины на удаленную (192.168.1.29) /opt

[[email protected] ~]# rsync -zarvh /home/pkumar/techi 
[email protected]:/opt
[email protected]'s password:
…………………………………………………………
techi/OTRS/
techi/OTRS/Database-Selection-OTRS-Installation-CentOS7.jpg
techi/OTRS/Install-OTRS-Accept-License.png
techi/OTRS/Install-OTRS-CentOS7-RHEL7.jpg
techi/OTRS/mysql-secure-installation-centos7-part2.jpg

sent 34.85M bytes  received 2.65K bytes  6.34M bytes/sec
total size is 37.77M  speedup is 1.08
……………………………………………………………
[[email protected] ~]#

Пример: 5) Копирование или синхронизация файлов и каталогов с удаленного компьютера в локальную систему.

Предположим, мы хотим скопировать файлы и каталоги с удаленного компьютера (192.168.1.29) в нашу локальную систему, в приведенном ниже примере я копирую удаленную папку “/opt/rpms_db” на моем локальном компьютере в папку /tmp

[[email protected] ~]# rsync -zarvh 
[email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.07M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

Вышеуказанная команда автоматически создаст папку “rpms_db”  в папке /tmp на нашем локальном компьютере

[[email protected] ~]# ls -l /tmp/
total 8
-rwx------. 1 root root  827 Apr  6 12:54 ks-script-avmuxw
drwxr-xr-x. 2 root root 4096 Apr  7 01:42 rpms_db
-rw-------. 1 root root    0 Apr  6 12:35 yum.log
[[email protected] ~]# ls -l /tmp/rpms_db/
total 16028
……………………………………
-rw-r--r--. 1 root root 2844028 Nov 12 09:28 httpd-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root   92504 Nov 12 09:28 httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
-rw-r--r--. 1 root root 2558136 Nov 12 09:44 postfix-2.10.1-7.el7.x86_64.rpm
-rw-r--r--. 1 root root   17404 Nov 12 09:44 pytalloc-2.1.13-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  696472 Nov 12 09:46 samba-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 5070800 Nov 12 09:46 samba-client-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  210984 Nov 12 10:19 samba-common-4.8.3-4.el7.noarch.rpm
-rw-r--r--. 1 root root  167512 Nov 12 09:46 samba-common-libs-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  458380 Nov 12 09:46 samba-common-tools-4.8.3-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  282332 Nov 12 09:46 samba-libs-4.8.3-4.el7.x86_64.rpm
……………………………………
[[email protected] ~]#

Пример: 6) Укажите удаленную оболочку во время синхронизации (rsync -e ssh)

В команде rsync мы можем указать удаленную оболочку, например ssh, во время синхронизации, предположим, что мы хотим использовать безопасную связь между источником и целевой машиной через rsync, тогда мы должны использовать ssh в качестве удаленной оболочки, пример показан ниже

[[email protected] ~]# rsync -zarvh -e ssh  
[email protected]:/opt/rpms_db  /tmp
[email protected]'s password:
receiving incremental file list
………………………………………………………………………………
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
rpms_db/pytalloc-2.1.13-1.el7.x86_64.rpm
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm

sent 484 bytes  received 15.45M bytes  1.82M bytes/sec
total size is 16.37M  speedup is 1.06
[[email protected] ~]#

Пример: 7) Отображение хода синхронизации в выводе команды rsync

Если вы хотите видеть прогресс синхронизации или копирования в команде rsync, используйте “–progress“, пример показан ниже.

[[email protected] ~]# rsync -avh --progress 
[email protected]:/opt/rpms_db /tmp
[email protected]'s password:
receiving incremental file list
……………………………………………………………………………………………………..
rpms_db/
rpms_db/httpd-2.4.6-88.el7.centos.x86_64.rpm
          2.84M 100%   35.22MB/s    0:00:00 (xfr#6, to-chk=18/25)
rpms_db/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
         92.50K 100%    1.13MB/s    0:00:00 (xfr#7, to-chk=17/25)
rpms_db/postfix-2.10.1-7.el7.x86_64.rpm
          2.56M 100%   14.44MB/s    0:00:00 (xfr#17, to-chk=7/25)
rpms_db/samba-4.8.3-4.el7.x86_64.rpm
        696.47K 100%    3.71MB/s    0:00:00 (xfr#19, to-chk=5/25)
rpms_db/samba-client-libs-4.8.3-4.el7.x86_64.rpm
          5.07M 100%   19.90MB/s    0:00:00 (xfr#20, to-chk=4/25)
rpms_db/samba-common-4.8.3-4.el7.noarch.rpm
        210.98K 100%  844.42kB/s    0:00:00 (xfr#21, to-chk=3/25)
rpms_db/samba-common-libs-4.8.3-4.el7.x86_64.rpm
        167.51K 100%  667.70kB/s    0:00:00 (xfr#22, to-chk=2/25)
rpms_db/samba-common-tools-4.8.3-4.el7.x86_64.rpm
        458.38K 100%    1.77MB/s    0:00:00 (xfr#23, to-chk=1/25)
rpms_db/samba-libs-4.8.3-4.el7.x86_64.rpm
        282.33K 100%    1.09MB/s    0:00:00 (xfr#24, to-chk=0/25)

sent 484 bytes  received 16.38M bytes  3.64M bytes/sec
total size is 16.37M  speedup is 1.00
[[email protected] ~]#

 

Пример: 8) Скопируйте структуру каталогов без копирования файлов

Есть несколько сценариев, когда мы хотим скопировать структуру каталогов, пропуская файлы только с локального компьютера на удаленный или наоборот.

Предположим, мы хотим скопировать структуру каталогов  “/home/pkumar” с локального компьютера на удаленный (192.168.1.29) в папку /opt folder.

[email protected] ~]# rsync -av -f"+ */" -f"- *" /home/pkumar 
[email protected]:/opt/
[email protected]'s password:
building file list ... done
………………………………………………
pkumar/

sent 43 bytes  received 19 bytes  17.71 bytes/sec
total size is 0  speedup is 0.00
[[email protected] ~]#

Пример: 9) Возобновить передачу больших файлов после сбоя в scp

В профиле администратора linux есть несколько сценариев, когда мы начали копировать файл большего размера с помощью команды scp, но он прервался в середине, и мы не можем позволить себе начать копирование его снова с помощью scp из-за его большого размера и затрат времени.

Таким образом, в этой ситуации можно использовать команду rsync, поскольку она может начать копирование файла с того места, где оно было остановлено или завершено, или, другими словами, rsync может передавать файлы, которые частично скопированы с помощью команды scp. Пример показан ниже,

[[email protected] ~]# scp 
[email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso                   28%  526MB  61.5MB/s   00:21 ETA
^CKilled by signal 2.
[[email protected] ~]#
[[email protected] ~]# rsync -P --rsh=ssh 
[email protected]:/root/ubuntu-18.04-desktop-amd64.iso /opt
[email protected]'s password:
ubuntu-18.04-desktop-amd64.iso
  1,921,843,200 100%   18.47MB/s    0:01:39 (xfr#1, to-chk=0/1)
[[email protected] ~]#

Пример: 10) Удалить файлы в месте назначения, если его нет в источнике (–delete)

Если вы уже синхронизировали файлы из источника в место назначения и из источника вы удалили файлы, вы можете заставить команду rsync удалить файлы в месте назначения, используя параметр –delete, пример показан ниже

[[email protected] ~]# rsync -avz --delete /opt/rpms_db 
[email protected]:/tmp/rpms_db
[email protected]'s password:
sending incremental file list
deleting rpms_db/apr-util-1.5.2-6.el7.x86_64.rpm
deleting rpms_db/apr-1.4.8-3.el7_4.1.x86_64.rpm
rpms_db/

sent 862 bytes  received 105 bytes  276.29 bytes/sec
total size is 15,947,152  speedup is 16,491.37
[[email protected] ~]#

Пример: 11) Установите ограничение на размер передаваемого файла (–max-size)

Если вы не хотите передавать или копировать большие файлы с помощью rsync, используйте опцию  ‘–max-size={specify-size-here}’, Предположим, мы не хотим передавать файлы, чьи размер больше 500К,

Примечание. Чтобы указать размер в МБ, используйте M, а для ГБ — G

[[email protected] ~]# rsync -avz --max-size='500K' /opt/rpms_db 
[email protected]:/tmp

Пример: 12) Не синхронизировать/копировать измененный файл в месте назначения

Есть несколько сценариев, в которых мы изменили файлы в месте назначения, и мы не хотим перезаписывать измененные файлы из источника во время синхронизации, поэтому этого можно легко достичь с помощью параметра -u в команде rsync.

[[email protected] ~]# rsync -avzu 
[email protected]:/opt/techi /home/pkumar/techi
[email protected]'s password:
receiving incremental file list

sent 37 bytes  received 4,960 bytes  1,427.71 bytes/sec
total size is 37,771,649  speedup is 7,558.87
[[email protected] ~]#

Пример: 13) Удалить файлы из источника после синхронизации (–remove-source-files)

Предположим, вы хотите удалить файлы из источника после завершения синхронизации с помощью команды rsync. В приведенном ниже примере папка из локальной системы “/home/pkumar/techi.tgz” синхронизируется с удаленной системой (192.168.1.29), после завершения синхронизации файл удаляется из источника.

[[email protected] ~]# rsync --remove-source-files -zvh /home/pkumar/techi.tgz 
[email protected]:/opt
[email protected]'s password:
techi.tgz
sent 597 bytes  received 43 bytes  182.86 bytes/sec
total size is 518  speedup is 0.81
[[email protected] ~]#
[[email protected] ~]# ls -l /home/pkumar/techi.tgz
ls: cannot access /home/pkumar/techi.tgz: No such file or directory
[[email protected] ~]#

Пример: 14) Команда rsync пробного запуска перед фактической синхронизацией

Могут быть ситуации, когда мы не говорим о поведении команды rsync, поэтому в таких случаях лучше выполнить пробный запуск rsync.

[[email protected] ~]# rsync --dry-run --remove-source-files -zvh /home/pkumar/projects.tar  
[email protected]:/opt
[email protected]'s password:
projects.tar

sent 51 bytes  received 19 bytes  7.37 bytes/sec
total size is 981.24M  speedup is 14,017,682.29 (DRY RUN)
[[email protected] ~]#

Пример: 15) Включить и исключить файлы во время синхронизации с rsync

Бывают ситуации, когда мы хотим скопировать или синхронизировать файлы и каталоги определенного типа и хотим исключить файлы или каталоги определенного типа. Команда Rsync поддерживает параметры включения и исключения.

В приведенном ниже примере вы хотите скопировать файлы типа pdf и rpm и исключить типы файлов png.

[[email protected] ~]# rsync -avz -e ssh --include '*.pdf *.rpm' --exclude '*.png' /home/pkumar/techi [email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
techi/postfix-2.10.1-7.el7.x86_64.rpm

sent 9,469,912 bytes  received 96 bytes  2,705,716.57 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Пример: 16) Установите ограничение на скорость передачи данных в rsync(–bwlimit=<KB/s>)

В команде rsync мы можем установить ограничение полосы пропускания для передачи данных с одной машины на другую, используйте параметр‘–bwlimit=<KB/S>‘ в команде rsync, чтобы установить ограничение на скорость передачи данных.

Предположим, мы хотим установить максимальную скорость передачи данных (скорость) 600 КБ / с с помощью rsync, пример показан ниже.

[[email protected] ~]# rsync -avz --progress --bwlimit=600 /home/pkumar/techi 
[email protected]:/opt
[email protected]'s password:
sending incremental file list
techi/
techi/OpenStack-Networking.pdf
6,153,239 100%  910.02kB/s    0:00:06 (xfr#1, to-chk=6/8)
techi/httpd-2.4.6-88.el7.centos.x86_64.rpm
2,844,028 100%  615.28kB/s    0:00:04 (xfr#2, to-chk=5/8)
techi/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
92,504 100%  507.51kB/s    0:00:00 (xfr#3, to-chk=4/8)
techi/pkumar-2.png
0 100%    0.00kB/s    0:00:00 (xfr#4, to-chk=3/8)
techi/pkumar-3.png
0 100%    0.00kB/s    0:00:00 (xfr#5, to-chk=2/8)
techi/pkumar.png
0 100%    0.00kB/s    0:00:00 (xfr#6, to-chk=1/8)
techi/postfix-2.10.1-7.el7.x86_64.rpm
2,558,136 100%  594.80kB/s    0:00:04 (xfr#7, to-chk=0/8)

sent 9,470,087 bytes  received 153 bytes  485,653.33 bytes/sec
total size is 11,647,907  speedup is 1.23
[[email protected] ~]#

Пример: 17) Просмотр разницы в файлах и каталогах между источником и местом назначения

Используйте параметр “-i” в команде rsync, чтобы указать разницу в файлах и каталогах между источником и местом назначения. Пример показан ниже

[[email protected] ~]# rsync -avzi /home/pkumar/techi 
[email protected]:/opt
[email protected]'s password:
sending incremental file list
.d..t...... techi/
<f.st...... techi/projects.txt

sent 438 bytes  received 45 bytes  138.00 bytes/sec
total size is 11,648,064  speedup is 24,116.07
[[email protected] ~]#

Согласно вышеприведенному выводу команды, есть разница в файле с именем «projects.txt» в месте назначения. Ниже приведены значения ключевых слов в выводе выше.

  • d: указывает на изменение в файле назначения
  • f: указывает файл
  • t: указывает изменение меток времени
  • s: указывает на изменение размера

Вот и все из этого руководства, на случай, если эти примеры помогут вам лучше понять команду rsync, тогда, пожалуйста, поделитесь своими отзывами и комментариями.