Rsync расшифровывается как «remote sync» (удаленная синхронизация) и
является инструментом удаленной синхронизации локального и удаленного
файлов. Он использует алгоритм, который минимизирует объем копируемых
данных при помощи перемещения только тех частей файлов, которые были
изменены. Очень удобно им пользоваться в случае если вы редактируете один файл с двух разных компьютеров (написание текстового документа, например). Rsync является очень гибким инструментом синхронизации, рассчитанным на
работу в сетевой среде. Сетевой протокол, разработанный для
использования данного инструмента, также называется Rsync. В этой заметке я напишу как пользоваться этой замечательной утилитой.
Синтаксис Rsync весьма прост, и похож на обычную работу с файлами в командной строке. Чтобы создать два пробных каталога и несколько пробных файлов, используйте следующую команду:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}
Это создаст на сервере каталог под названием dir1, содержащий 100 пустых файлов. Также был создан пустой каталог dir2. Чтобы синхронизировать содержимое каталогов dir1 с dir2 на одной системе, введите:
rsync -r dir1/ dir2
Флаг «-r» значит «рекурсивный», что необходимо для синхронизации каталогов. Это позволит синхронизировать его содержимое. Также вместо него возможно использовать флаг -a . Он означает «архив» и синхронизирует рекурсивно, сохраняя символьные ссылки, специальные файлы и файлы устройств, время изменения, группу, владельца и разрешения. Всегда проверяйте аргументы дважды перед выполнением команды Rsync. Rsync позволяет это сделать при помощи команд -n или —dry-run. Флаг -v (что значит «подробно») также необходим для получения адекватного результата:
rsync -anv dir1/ dir2
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Синхронизация с удаленной системой проста, если есть SSH-доступ к удаленному компьютеру и на обеих системах установлена Rsync. Настройка SSH очень подробно описана в этой статье. Установив и проверив доступ SSH между двумя машинами, можно синхронизировать папку dir1 с удаленным компьютером при помощи следующей команды:
rsync -a ~/dir1 username@remote_host:каталог назначения
Данная процедура называется «push», так как она «толкает» каталог из локальной системы на удаленную. Противоположная ей операция зовется «извлечением» («pull»). Она используется для синхронизации удаленного каталога с локальной системой. Если бы dir1 находился не на локальной, а на удаленной системе, синтаксис выглядел бы так:
rsync -a username@remote_host:/home/username/dir1 путь_на_локальной_машине
При передаче еще не сжатых файлов, таких как текстовые файлы, можно уменьшить сетевой трафик, сжимая файлы при помощи параметра -z:
rsync -az источник назначение
Флаг «-P» также очень полезен. Он совмещает флаги «—progress» и «—partial». Первый выводит индикатор выполнения передачи, а второй позволяет возобновить прерванную передачу:
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .
Если запустить команду снова, будет выведен более короткий результат, потому что никакие изменения не были внесены. Это иллюстрирует способность rsync использовать время последнего изменения, чтобы определить, были ли внесены изменения в файлы. Если обновить время последнего изменения некоторых файлов, можно увидеть, что rsync повторно копирует только измененные файлы:
touch dir1/file{1..10}
rsync -azP источник назначение
sending incremental file list
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
По умолчанию, Rsync ничего не удаляет из каталога назначения. Следовательно, необходимо удалить файлы из каталога назначения, если они удаляются из исходного каталога, чтобы сохранить полную синхронизацию каталогов. Такое поведение можно изменить с помощью флага «—delete». Прежде чем применять данный флаг, используйте команду «—dry-run» и проведите тестирование, чтобы предотвратить потерю данных.
rsync -a --delete источник назначение
При необходимости исключить некоторые файлы или каталоги, расположенные в синхронизируемом каталоге, можно внести их в разделенный запятыми список при помощи команды «—exclude=»:
rsync -a --exclude=файлы для исключения источник назначение
Если шаблон исключений был определен, при помощи команды «—include=» исключение можно снять, установив другой шаблон:
rsync -a --exclude=файлы для исключения --include=файлы для включения источник назначение
Rsync может упростить передачу файлов по сетевым соединениям и повысить устойчивость локальной синхронизации каталогов. Гибкость данной утилиты делает ее хорошим инструментом для выполнения различных операций на уровне файлов.
Синтаксис Rsync весьма прост, и похож на обычную работу с файлами в командной строке. Чтобы создать два пробных каталога и несколько пробных файлов, используйте следующую команду:
cd ~
mkdir dir1
mkdir dir2
touch dir1/file{1..100}
Это создаст на сервере каталог под названием dir1, содержащий 100 пустых файлов. Также был создан пустой каталог dir2. Чтобы синхронизировать содержимое каталогов dir1 с dir2 на одной системе, введите:
rsync -r dir1/ dir2
Флаг «-r» значит «рекурсивный», что необходимо для синхронизации каталогов. Это позволит синхронизировать его содержимое. Также вместо него возможно использовать флаг -a . Он означает «архив» и синхронизирует рекурсивно, сохраняя символьные ссылки, специальные файлы и файлы устройств, время изменения, группу, владельца и разрешения. Всегда проверяйте аргументы дважды перед выполнением команды Rsync. Rsync позволяет это сделать при помощи команд -n или —dry-run. Флаг -v (что значит «подробно») также необходим для получения адекватного результата:
rsync -anv dir1/ dir2
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
Синхронизация с удаленной системой проста, если есть SSH-доступ к удаленному компьютеру и на обеих системах установлена Rsync. Настройка SSH очень подробно описана в этой статье. Установив и проверив доступ SSH между двумя машинами, можно синхронизировать папку dir1 с удаленным компьютером при помощи следующей команды:
rsync -a ~/dir1 username@remote_host:каталог назначения
Данная процедура называется «push», так как она «толкает» каталог из локальной системы на удаленную. Противоположная ей операция зовется «извлечением» («pull»). Она используется для синхронизации удаленного каталога с локальной системой. Если бы dir1 находился не на локальной, а на удаленной системе, синтаксис выглядел бы так:
rsync -a username@remote_host:/home/username/dir1 путь_на_локальной_машине
При передаче еще не сжатых файлов, таких как текстовые файлы, можно уменьшить сетевой трафик, сжимая файлы при помощи параметра -z:
rsync -az источник назначение
Флаг «-P» также очень полезен. Он совмещает флаги «—progress» и «—partial». Первый выводит индикатор выполнения передачи, а второй позволяет возобновить прерванную передачу:
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .
Если запустить команду снова, будет выведен более короткий результат, потому что никакие изменения не были внесены. Это иллюстрирует способность rsync использовать время последнего изменения, чтобы определить, были ли внесены изменения в файлы. Если обновить время последнего изменения некоторых файлов, можно увидеть, что rsync повторно копирует только измененные файлы:
touch dir1/file{1..10}
rsync -azP источник назначение
sending incremental file list
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file2
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101)
file3
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101)
. . .
По умолчанию, Rsync ничего не удаляет из каталога назначения. Следовательно, необходимо удалить файлы из каталога назначения, если они удаляются из исходного каталога, чтобы сохранить полную синхронизацию каталогов. Такое поведение можно изменить с помощью флага «—delete». Прежде чем применять данный флаг, используйте команду «—dry-run» и проведите тестирование, чтобы предотвратить потерю данных.
rsync -a --delete источник назначение
При необходимости исключить некоторые файлы или каталоги, расположенные в синхронизируемом каталоге, можно внести их в разделенный запятыми список при помощи команды «—exclude=»:
rsync -a --exclude=файлы для исключения источник назначение
Если шаблон исключений был определен, при помощи команды «—include=» исключение можно снять, установив другой шаблон:
rsync -a --exclude=файлы для исключения --include=файлы для включения источник назначение
Rsync может упростить передачу файлов по сетевым соединениям и повысить устойчивость локальной синхронизации каталогов. Гибкость данной утилиты делает ее хорошим инструментом для выполнения различных операций на уровне файлов.
Комментариев нет:
Отправить комментарий