rsync: синтаксис, примеры использования |
![]() |
Добавил(а) microsin |
Утилита rsync осуществляет синхронизацию деревьев файловых каталогов между локальными дисками или между хостами сети. [Синтаксис rsync] Локальный файл - локальный файл: rsync [option]... Source [Source]... Dest Локальный файл - файл в сети: rsync [option]... Source [Source]... [user@]host:Dest # Файл в сети - локальный файл: rsync [option]... [user@]host:Source... [Dest] # # = синхронизация через удаленный шелл вместо демона rsync. Поведение rsync почти такое же, как и у программы копирования rcp, однако у rsync намного больше опций, и она использует протокол удаленного обновления (rsync remote-update) для значительного ускорения передач файла, когда он уже присутствует в месте назначения. Rsync широко используется для создания бекапов и зеркалирования данных, а также как улучшенная утилита копирования для каждодневного использования. Rsync находит файлы, которые нужно передать, используя алгоритм быстрой проверки ("quick check", используется по умолчанию), который обнаруживает файлы, у которых поменялся размер или время последнего изменения (last-modified time). Любые изменения в других зарезервированных атрибутах (которые запрошены опциями) вносятся непосредственно в файл назначения, когда быстрая проверка показала, данные файла не нуждаются в обновлении. Вот некоторые дополнительные возможности, которыми обладает rsync: ● Поддерживается копирование ссылок (links), файлов устройств (devices), атрибутов владельца (owners), группы (groups) и прав доступа (permissions). [Как используется rsync] Вы можете использовать rsync точно так же, как и rcp. Нужно указать место источника данных (source) и место назначения. Одно из этих мест может быть сетевым файловым ресурсом (remote, удаленный хост). Наверное лучше всего объяснить синтаксис на некоторых простых примерах: $ rsync -t *.c foo:src/
Эта команда передает все файлы, которые совпали с шаблоном *.c из текущей директории в каталог src машины foo (remote хост). Если какой-либо файл на хосте назначения уже существует, то для обновления файла используется протокол rsync remote-update, в котором передаются только различия между файлами. $ rsync -avz foo:src/bar /data/tmp
Эта команда рекурсивно передает все файлы из директории src/bar машины foo в директорию /data/tmp/bar на локальной машине. Файлы передаются в режиме архивирования (archive mode), который гарантирует, что в транзакции будут переданы символические ссылки, устройства, атрибуты разрешения, информация владельца и т. п. Дополнительно используемая компрессия уменьшает объем передаваемого трафика. $ rsync -avz foo:src/bar/ /data/tmp
Завершающий слеш в указании source меняет это поведение так, что все файлы из директории src/bar машины foo передаются в директорию /data/tmp/ локальной машины. Завершающий слеш / в имени источника означает "копировать содержимое этой директории". Без слеша это означает "копировать директорию". Эта разница в поведении оказывается важной, в частности, когда используется опция --delete. Вы также можете использовать rsync только локально (local-only mode), когда у source и destination нет ':' в имени. В этом случае rsync ведет себя так же, как и улучшенная команда копирования (cp или rcp). $ rsync somehost.mydomain.com::
Эта команда выведет список всех анонимных модулей rsync, доступных на хосте somehost.mydomain.com (подробности см. в следующей секции). [Соединение с сервером RSYNC] Существует возможность использовать без rsh или ssh в качестве транспорта. В этом случае вы будете подключаться к серверу rsync, работающем на TCP-порту 873. Вы можете установить соединение через web-прокси, используя переменную окружения RSYNC_PROXY, указывающую на пару значений hostname:port для вашего web proxy. Обратите внимание, что ваша конфигурация web proxy должна позволять проксирование порта 873. Использование rsync таким способом будет таким же, как и с rsh или ssh, за исключением: ● Используется двойное двоеточие :: вместо одиночного : для разделения имени хоста и пути на нем. Некоторые пути на remote сервере могут потребовать аутентификации. В этом случае при подключении будет предложено ввести пароль. Можно избежать предложения интерактивного ввода пароля путем установки пароля в переменной окружения RSYNC_PASSWORD, или путем указания опции --password-file. Это бывает полезным при использовании rsync в скрипте. ПРЕДУПРЕЖДЕНИЕ: на некоторых системах переменные окружения видят все пользователи. Для такого случая рекомендуется использовать опцию --password-file. Запуск сервера RSYNC. Сервер rsync по умолчанию конфигурируется файлом /etc/rsyncd.conf. Дополнительную информацию см. man-документацию в rsyncd.conf(5). [Примеры использования rsync] Бекап домашней директории с использованием задания планировщика (cron job): rsync -Cavz . ss64:backup Эта команда через PPP-соединение выполнит дублирование текущей директории на машине "ss64". Для синхронизации source-дерева файловой системы samba используйте следующие Makefile targets: get: →→rsync -avuzb --exclude '*~' samba:samba/ . put: →→rsync -Cavuzb . samba:samba/ sync: get put Это позволяет синхронизироваться с директорией CVS на другом конце соединения. В этом случае экономится время cvs-операций на удаленной машине, поскольку протокол remote cvs не очень эффективен. Пример зеркалирования директории между старым и новым сайтами ftp: rsync -az -e ssh --delete ~ftp/pub/samba/ nimbus:"~ftp/pub/tridge/samba" Эта команда запускается заданием cron каждые несколько часов. Здесь приведено краткое описание опций. Полное описание см. в следующей врезке. Что копировать: -r, --recursive рекурсивно заходить в директории Как копировать: -n, --dry-run тестовый запуск (trial run), без каких-либо изменений Опции места назначения (destination): -a, --archive режим архива, эквивалентный -rlptgoD (без -H,-A,-X) Разные другие опции: --address=ADDRESS привязка к указанному адресу Полное описание опций rsync см. в статье [2]. [Шаблоны исключения (Exclude Patterns)] Для rsync можно указать шаблоны exclude (исключение) и include (включение), чтобы гибко управлять тем, какие файлы пропускать (exclude) или принудительно включать (include) в процесс передачи. Утилита rsync составляет упорядоченный список опций include/exclude так, как они были указаны в командной строке. Когда встретилось имя файла, rsync проверяет это имя для каждого шаблона exclude/include по очереди. При этом сработает первое совпадение с указанным шаблоном. Если было совпадение с шаблоном exclude, то файл пропускается. Если было совпадение с шаблоном include, то файл не пропускается. Если не было обнаружено совпадение ни с каким шаблоном include/exclude, то файл не пропускается. Обратите внимание, что если используется -r (что подразумевается при -a), то каждый субкомпонент каждого обрабатывается сверху вниз, т. е. шаблоны include/exclude применяются рекурсивно к каждому субкомпоненту. Также имейте в виду, что опции --include и --exclude принимают один шаблон каждая. Чтобы указать несколько шаблонов, используйте опции --include-from и --exclude-from (которые дают возможность прочитать шаблоны из файла), либо указывайте несколько опций --include и/или --exclude. Шаблоны могут принимать несколько форм. Правила следующие: ● Если шаблон начинается с /, то он сопоставляется с началом имени файла, иначе с концом имени файла. Таким образом "/foo" будет соответствовать файлу "foo" в основании дерева. С другой стороны, "foo" будет соответствовать любому файлу "foo" в любом месте дерева, потому что алгоритм рекурсивно просматривает директории сверху вниз; он ведет себя так, как будто каждый компонент пути получает поворот в конце имени файла. Правила +/- наиболее полезны в списках exclude, позволяя вам создать один список exclude, который содержит как опции include, так и exclude. Если вы завершаете список exclude --exclude '*', то имейте в виду, что алгоритм применяется рекурсивно, и если явно не включить родительские директории файлов, которые вы хотите подключить, то алгоритм остановиться на родительских директориях и не будет просматривать файлы ниже. Чтобы включить все директории, используйте --include '*/' перед --exclude '*'. Некоторые примеры exclude/include: --exclude "*.o" исключит все имена файлов, совпадающие с *.o. [Пакетный режим (Batch Mode)] Следующая команда сгенерирует 4 файла, в котором инкапсулирована информация для синхронизации содержимого target_dir с обновлениями, которые найдены в src_dir. $ rsync -F [здесь указываются другие опции rsync] \
/somewhere/src_dir /somewhere/target_dir
Сгенерированные файлы помечены общей меткой времени: # rsync_argvs. аргументы командной строки [Символические ссылки (symlink)] Возможны 3 базовых поведения, когда rsync встречает символические ссылки в директории источника. По умолчанию символические ссылки вообще не передаются. Для любой существующей символической ссылки выводится сообщение пропуска "skipping non-regular file". Если указана опция --links, то символические ссылки заново создаются на ту же цель уже в месте назначения. Обратите внимание, что опция --archive подразумевает --links. Если указана опция --copy-links, то символические ссылки "коллапсируют" путем копирования цели, на которую они указывают, вместо самой символической ссылки. Утилита rsync также разделяет "безопасные" (safe) и небезопасные (unsafe) символические ссылки. Пример, где это может использоваться - зеркалирование web-сайта, где в копирование не включаются символические ссылки на /etc/passwd в публичной секции сайта. Использование опции --copy-unsafe-links приведет к тому, что любые ссылки будут скопированы в место назначения в виде файла. Использование --safe-links приведет к полному пропуску небезопасных ссылок. [Диагностика] Утилита rsync иногда выдает сообщения об ошибках, которые могут показаться несколько загадочными. Одно из наиболее запутанных: "protocol version mismatch - is your shell clean?". Это сообщение обычно вызвано тем, что ваши скрипты запуска (startup scripts) или удаленный шелл создают нежелательный мусор в потоке, который rsync использует для своего транспорта. Для диагностики этой проблемы запустите удаленный шелл командой наподобие следующей: $ rsh remotehost /bin/true > out.dat
После этого просмотрите содержимое файла out.dat. Если все работает корректно, то файл out.dat должен быть нулевой длины. Если вы получили вышеупомянутую ошибку от rsync то вероятно в out.dat будут содержаться некоторые текстовые данные. На основе этих данных попробуйте разобраться с причиной, вызывающей проблему. Чаще всего причина в некорректно сконфигурированных скриптах первоначального запуска шелла (shell startup scripts, таких как .cshrc или .profile), когда в них содержатся операторы вывода для неинтерактивных логинов. Если вы сталкиваетесь с проблемами при отладке шаблонов include и exclude, то попробуйте указать опцию -vv. Это повысит уровень подробности вывода (verbosity level), на котором rsync будет показывать каждый отдельный файл, который был включен или исключен. [Установка rsync] Просмотрите файл README для получения инструкций по установке. После того, как утилита rsync установлена, вы можете использовать на любой машине, для которой можно использовать rsh. Утилита rsync использует rsh для своих процессов обмена данными за исключением случая, когда source и destination находятся локально. Также вы можете указать альтернативу для rsh либо опцией -e, либо установкой переменной окружения RSYNC_RSH. Общей заменой является ssh (указание опции -e ssh), которая представляет высокую степень безопасности. Имейте в виду, что утилита rsync должна быть установлена на обоих сторонах сетевого соединения - на обоих машинах source и destination. [Переменные окружения] CVSIGNORE RSYNC_RSH RSYNC_PROXY RSYNC_PASSWORD USER или LOGNAME HOME [Связанные с rsync команды Linux] Grsync - GUI для rsync [6]. Как установить, см. [7]. [Ссылки] 1. rsync site:ss64.com. |