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, тогда, пожалуйста, поделитесь своими отзывами и комментариями.