Оглавление
1. Что такое rsync. Для чего используется rsync
7. Копирование директорию в папку с другим именем
8. Сортированный порядок передачи
9. Безопасность при удалённой передачи файлов
10. Продвинутое использование rsync
11. Подключение к демону (службе) rsync
12. Использование функций rsync демона (службы) через подключение удалённой оболочки
13. Запуск демона (службы) rsync для принятия подключений
14. Примеры использования rsync
15. Быстрая справка по опциям rsync
16. Подробное описание опций rsync
17. Опции демона (службы) rsync
18. Правила фильтрации в rsync
18.1 Простые правила включения/исключения файлов в rsync
18.2 Простые примеры включения/исключения файлов и директорий в rsync
18.3 Правила фильтра при удалении в rsync
18.4 Углублённое понимание правил фильтрации rsync
18.5 Правила сопоставления шаблонов rsync. Правила поиска по шаблонам rsync
18.6 Модификаторы правил фильтрации rsync
18.7 Правила фильтрации merge-file (файла слияния) в rsync
18.8 Правила фильтрации очистки списка rsync
18.9 Привязка шаблонов включения/исключения rsync
18.10 Правила per-directory (на каждую директорию) и удаление
24. Переменные окружения rsync
29. Внутренние параметры rsync
Все страницы документации rsync на русском языке:
- rsync [данная страница]
- rsyncd.conf
- rsync-ssl
- rrsync
Что такое rsync. Для чего используется rsync
rsync — это быстрый, универсальный, инструмент для удалённого (и локального) копирования файлов.
Синопсис команды rsync
Локальное использование (копирование файлов в пределах одного компьютера):
rsync [ОПЦИИ...] ИСТОЧНИК... [ПУНКТ_НАЗНАЧЕНИЯ]
Копирование файлов между компьютерами — доступ через удалённую оболочку:
Скачать на компьютер с которого запускается команда:
rsync [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ@]ХОСТ:ИСТОЧНИК... [ПУНКТ_НАЗНАЧЕНИЯ]
Выгрузить на удалённый компьютер:
rsync [ОПЦИИ...] ИСТОЧНИК... [ПОЛЬЗОВАТЕЛЬ@]ХОСТ:ПУНКТ_НАЗНАЧЕНИЯ
Копирование файлов между компьютерами — доступ через демон (службу) rsync:
Скачать на компьютер с которого запускается команда:
rsync [ОПЦИИ...] [ПОЛЬЗОВАТЕЛЬ@]ХОСТ::ИСТОЧНИК... [ПУНКТ_НАЗНАЧЕНИЯ] rsync [ОПЦИИ...] rsync://[ПОЛЬЗОВАТЕЛЬ@]ХОСТ[:ПОРТ]/ИСТОЧНИК... [ПУНКТ_НАЗНАЧЕНИЯ]
Выгрузить на удалённый компьютер:
rsync [ОПЦИИ...] ИСТОЧНИК... [ПОЛЬЗОВАТЕЛЬ@]ХОСТ::ПУНКТ_НАЗНАЧЕНИЯ rsync [ОПЦИИ...] ИСТОЧНИК... rsync://[ПОЛЬЗОВАТЕЛЬ@]ХОСТ[:ПОРТ]/ПУНКТ_НАЗНАЧЕНИЯ)
При использовании только одного аргумента ИСТОЧНИК и без аргумента ПУНКТ_НАЗНАЧЕНИЯ будет выведен список файлов на ИСТОЧНИКЕ вместо копирования в ПУНКТ_НАЗНАЧЕНИЯ.
Описание rsync
Rsync — быстрый и необычайно универсальный инструмент копирования файлов. Он может копировать локально, на другой хост или с другого хоста через любую удалённую оболочку или на удалённый демон rsync или с него. Он предлагает большое количество опций, которые контролируют каждый аспект его поведения и позволяют очень гибко определять набор копируемых файлов. Он известен своим алгоритмом дельта-передачи, который уменьшает объем данных, отправляемых по сети, отправляя только различия между исходными файлами и существующими файлами в месте назначения. Rsync широко используется для резервного копирования и зеркалирования, а также в качестве улучшенной команды копирования для повседневного использования.
Rsync находит файлы, которые необходимо перенести, с помощью алгоритма «быстрой проверки» (по умолчанию), который ищет файлы, которые изменились в размере или у которых изменилось «время последнего изменения файла». Любые изменения в других сохранённых атрибутах (по запросу опций) вносятся непосредственно в файл назначения, когда быстрая проверка показывает, что сам файл не нуждается в обновлении, а нужно обновить только его атрибуты.
Некоторые из дополнительных функций rsync:
- поддержка копирования ссылок, устройств, владельцев, групп и разрешений
- параметры исключения и исключения из, аналогичные GNU tar
- режим исключения CVS (Concurrent Versions System) для игнорирования тех же файлов, которые CVS будет игнорировать
- может использовать любую прозрачную удалённую оболочку, включая ssh или rsh
- не требует привилегий суперпользователя
- конвейеризация передачи файлов для минимизации затрат на задержку
- поддержка анонимных или аутентифицированных демонов rsync (идеально подходит для зеркалирования)
Общая информация о rsync
Rsync копирует файлы либо на удалённый хост, либо с него, либо локально на текущем хосте (не поддерживает копирование файлов между двумя удалёнными хостами).
Существует два разных способа rsync связаться с удалённой системой: использовать программу удалённой оболочки в качестве транспортировщика (например, ssh или rsh) или напрямую связаться с демоном rsync через TCP. Транспортировка по удалённой оболочке используется всякий раз, когда исходный или целевой путь содержит один разделитель двоеточие (:) после спецификации хоста. Прямое обращение к демону rsync происходит, когда исходный или целевой путь содержит разделитель в виде двойного двоеточия (::) после спецификации хоста, ИЛИ когда указан URL rsync:// (смотрите также раздел «Использование функций rsync демона (службы) через подключение удалённой оболочки» для исключения из этого последнего правила).
В качестве особого случая, если указан один аргумент ИСТОЧНИК без ПУНКТА_НАЗНАЧЕНИЯ, выводится список файлов, которые могли бы быть переданы, в формате, похожем на вывод команды:
ls -l
Если ни ИСТОЧНИК, ни ПУНКТА_НАЗНАЧЕНИЯ не указывают на удалённый хост, копирование происходит локально (смотрите также параметр --list-only).
Rsync относится к локальной стороне как клиенту, а к удалённой стороне как к серверу. Не путайте сервер с демоном rsync. Демон всегда является сервером, но сервер может быть либо демоном, либо процессом, порождённым удалённой оболочкой.
Установка rsync
Инструкции по установке см. в файле README.md (https://github.com/RsyncProject/rsync/blob/master/README.md).
После установки вы можете использовать rsync на любой машине, к которой вы можете получить доступ через удалённую оболочку (а также на некоторых, к которым вы можете получить доступ с помощью протокола rsync daemon-mode). Для удалённой передачи современный rsync использует ssh для связи, но он может быть настроен на использование другой удалённой оболочки по умолчанию, например rsh или remsh.
Вы также можете указать любую удалённую оболочку, которая вам нравится, либо с помощью параметра командной строки -e, либо путём установки переменной среды RSYNC_RSH.
Обратите внимание, что rsync должен быть установлен как на исходной, так и на целевой машине.
Использование rsync
Использование rsync очень похоже на использование rcp. Вы должны указать ИСТОЧНИК и ПУНКТ_НАЗНАЧЕНИЯ, одно из которых может быть удаленным (находиться на другом компьютере).
Возможно, лучший способ объяснить синтаксис — это несколько примеров.
Следующая команда перенесёт все файлы, соответствующие шаблону *.c, из текущего каталога в каталог src на машине foo. Если какой-либо из файлов уже существует на удалённой системе, то протокол удалённого обновления rsync используется для обновления файла путём отправки только различий в данных. Обратите внимание, что расширение подстановочных знаков в командной строке (*.c) в список файлов обрабатывается оболочкой до запуска rsync, а не самой rsync (точно так же, как и все другие программы в стиле Posix).
rsync -t *.c foo:src/
Следующая команда рекурсивно перенесёт все файлы из каталога src/bar на машине foo в каталог /data/tmp/bar на локальной машине. Файлы передаются в архивном режиме, что гарантирует сохранение символических ссылок, устройств, атрибутов, разрешений, владельцев и прочих свойств файла при передаче. Кроме того, сжатие будет использоваться для уменьшения количества передаваемых данных.
rsync -avz foo:src/bar /data/tmp
То есть предыдущая команда создаст в ПУНКТЕ_НАЗНАЧЕНИЯ каталог по пути /data/tmp/bar. Завершающий слеш в ИСТОЧНИКЕ изменяет это поведение, чтобы избежать создания дополнительного уровня каталога в ПУНКТЕ_НАЗНАЧЕНИЯ. Вы можете думать о завершающем / в источнике как означающем «скопировать содержимое этого каталога» в отличие от «копировать каталог по имени», но в обоих случаях атрибуты содержащего каталога переносятся в содержащий каталог в месте назначения.
rsync -avz foo:src/bar/ /data/tmp
Другими словами, каждая из следующих команд копирует файлы одинаково, включая настройку атрибутов /dest/foo:
rsync -av /src/foo /dest rsync -av /src/foo/ /dest/foo
Обратите внимание также, что ссылки на хост и модуль не требуют завершающего слеша для копирования содержимого каталога по умолчанию. Например, обе эти команды копируют содержимое удалённого каталога в "/dest":
rsync -av host: /dest rsync -av host::module /dest
Вы также можете использовать rsync в локальном режиме, когда и источник, и назначение не имеют ':' в имени. В этом случае rsync ведёт себя как улучшенная команда копирования.
Наконец, вы можете перечислить все (перечисляемые) модули, доступные из определённого демона rsync, опустив имя модуля:
rsync somehost.mydomain.com::
Копирование директорию в папку с другим именем
Если вы хотите скопировать каталог под другим именем, используйте завершающий слеш в исходном каталоге, чтобы поместить содержимое каталога в любой целевой каталог по вашему желанию:
rsync -ai foo/ bar/
Rsync также может настраивать имя целевого файла при копировании одного элемента. Правила для этого следующие:
- Список передачи должен состоять из одного элемента (файла или пустого каталога)
- Последний элемент целевого пути не должен существовать как каталог
- Целевой путь не должен быть указан с завершающим слешем
В этих обстоятельствах rsync установит имя единственного элемента назначения на последний элемент целевого пути. Имейте в виду, что лучше использовать эту идиому только при копировании файла и использовать указанную выше идиому завершающего слеша при копировании каталога.
Следующий пример копирует файл foo.c как bar.c в каталог save (предполагая, что bar.c не является каталогом):
rsync -ai src/foo.c save/bar.c
Правило копирования одного элемента может случайно вас укусить, если вы неосознанно скопируете один элемент и укажете каталог назначения, который не существует (без использования завершающего слеша). Например, если src/*.c соответствует одному файлу, а save/dir не существует, это собьёт вас с толку, назвав файл назначения save/dir:
rsync -ai src/*.c save/dir
Чтобы предотвратить такую случайность, либо убедитесь, что каталог назначения существует, либо укажите путь назначения с завершающим слешем:
rsync -ai src/*.c save/dir/
Сортированный порядок передачи
Rsync всегда сортирует указанные имена файлов в свой внутренний список передачи. Это обрабатывает слияние содержимого каталогов с одинаковыми именами, что упрощает удаление дубликатов имён файлов. Однако это может сбить с толку, когда файлы передаются в порядке, отличном от указанного в командной строке.
Если вам нужно, чтобы определённый файл был передан раньше другого, либо разделите файлы на разные вызовы rsync, либо рассмотрите возможность использования --delay-updates (что не влияет на сортированный порядок передачи, но значительно ускоряет финальную фазу обновления файлов).
Безопасность при удалённой передачи файлов
Rsync принимает меры для обеспечения защиты запросов файлов, которые совместно используются при передаче, от различных проблем безопасности. Большинство потенциальных проблем возникает на стороне получателя, где rsync принимает меры для обеспечения того, чтобы список передаваемых файлов оставался в пределах того, что было запрошено.
С этой целью rsync 3.1.2 и более поздние версии прерывались, когда список файлов содержал абсолютный или относительный путь, который пытался выйти за пределы верхней части передачи. Кроме того, начиная с версии 3.2.5, rsync выполняет ещё две проверки безопасности списка файлов, чтобы (1) убедиться, что в передачу не были добавлены дополнительные аргументы ИСТОЧНИКА, кроме тех, которые запросил клиент, и (2) убедиться, что список файлов подчиняется правилам исключения, которые были отправлены отправителю.
Для тех, у кого ещё нет клиента rsync 3.2.5 (или тех, кто хочет быть особенно осторожным), безопаснее всего выполнить копирование в выделенный целевой каталог для удалённых файлов, если вы не доверяете удалённому хосту. Например, вместо копирования rsync в домашний каталог:
rsync -aiv host1:dir1 ~
Выделите каталог "host1-files" для удалённого содержимого:
rsync -aiv host1:dir1 ~/host1-files
Дополнительные сведения смотрите в параметре --trust-sender.
ВНИМАНИЕ: не очень безопасно использовать rsync для копирования файлов из файловой системы, сохраняющей регистр, в файловую систему, игнорирующую регистр. Если вам необходимо выполнить такое копирование, вам следует либо отключить символические ссылки с помощью параметра --no-links, либо включить munging символических ссылок с помощью параметра --munge-links (и убедиться, что вы используете правильный локальный или удалённый параметр). Это предотвратит выполнение rsync потенциально опасных действий, если имя символической ссылки перекрывается с файлом или каталогом. Однако это не гарантирует, что вы получите полную копию всех файлов (поскольку это может быть невозможно, если имена перекрываются). Потенциально лучшим решением является перечисление всех исходных файлов и создание безопасного списка имён файлов, которые вы передаёте в параметр --files-from. Любые файлы, которые конфликтуют по имени, должны быть скопированы в разные целевые каталоги с использованием более чем одной копии.
Хотя копирование файловой системы, игнорирующей регистр, в файловую систему, игнорирующую регистр, может работать довольно хорошо, если не активны параметры --delete-during или --delete-before, rsync может потенциально обновить существующий файл на принимающей стороне, не замечая, что верхний/нижний регистр имени файла должен быть изменён для соответствия отправителю.
Продвинутое использование rsync
Синтаксис для запроса нескольких файлов с удалённого хоста выполняется путём указания дополнительных аргументов удалённого хоста в том же стиле, что и первый, или с опущенным именем хоста. Например, всё это работает:
rsync -aiv host:file1 :file2 host:file{3,4} /dest/ rsync -aiv host::modname/file{1,2} host::modname/extra /dest/ rsync -aiv host::modname/first ::extra-file{1,2} /dest/
Обратите внимание, что соединение демона поддерживает доступ только к одному модулю на команду копирования, поэтому если начало последующего пути не начинается с modname первого пути, предполагается, что это путь в модуле (например, extra-file1 и extra-file2, которые захвачены выше).
Действительно старые версии rsync (2.6.9 и более ранние) позволяли указывать только один аргумент удалённого источника, поэтому некоторые люди вместо этого полагались на то, что удалённая оболочка выполняет разделение пробелов, чтобы разбить аргумент на несколько путей. Такое неинтуитивное поведение больше не поддерживается по умолчанию (хотя вы можете запросить его, как описано ниже).
Начиная с версии 3.2.4, имена файлов передаются удалённой оболочке таким образом, чтобы сохранить символы, которые вы ей указываете. Таким образом, если вы запрашиваете файл с пробелами в имени, именно его ищет удалённый rsync:
rsync -aiv host:'a simple file.pdf' /dest/
Если вы используете скрипты, написанные для ручного применения дополнительных кавычек к удаленным аргументам rsync (или для требования разделения удалённых аргументов), вы можете попросить rsync позволить вашему скрипту обрабатывать дополнительное экранирование. Это делается либо добавлением параметра --old-args к запускам rsync в скрипте (для чего требуется новый rsync), либо экспортом RSYNC_OLD_ARGS=1 и RSYNC_PROTECT_ARGS=0 (что работает как со старыми, так и с новыми версиями rsync).
Подключение к демону (службе) rsync
Также возможно использовать rsync без удалённой оболочки в качестве транспорта. В этом случае вы напрямую подключитесь к удалённому демону rsync, обычно используя порт TCP 873. (Очевидно, что для этого требуется, чтобы демон был запущен на удалённой системе, поэтому обратитесь к разделу «Запуск демона (службы) rsync для принятия подключений» ниже для получения информации об этом.)
Использование rsync таким образом аналогично использованию его с удалённой оболочкой, за исключением того, что:
- Используйте либо синтаксис с двойным двоеточием, либо синтаксис URL rsync:// вместо синтаксиса с одним двоеточием (удалённая оболочка).
- Первый элемент «пути» на самом деле является именем модуля.
- Дополнительные аргументы удалённого источника могут использовать сокращённый синтаксис, который пропускает имя хоста и/или имя модуля, как обсуждалось в разделе Продвинутое использование rsync.
- Удалённый демон может вывести «сообщение дня» при подключении.
- Если указать только хост (без модуля или пути), то будет выведен список доступных модулей на демоне.
- Если указать путь к удалённому ИСТОЧНИКУ, но без ПУНКТА_НАЗНАЧЕНИЯ, будет выведен список соответствующих файлов на удалённом демоне.
- Параметр --rsh (-e) необходимо опустить, чтобы избежать изменения стиля подключения с использования сокетного соединения на «Использование функций rsync демона (службы) через подключение удалённой оболочки».
Пример, который копирует все файлы в удалённом модуле с именем "src":
rsync -av host::src /dest
Некоторые модули на удалённом демоне могут требовать аутентификации. В этом случае при подключении вы получите запрос пароля. Вы можете избежать запроса пароля, установив переменную окружения RSYNC_PASSWORD на нужный вам пароль или используя параметр --password-file. Это может быть полезно при написании скриптов rsync.
ПРЕДУПРЕЖДЕНИЕ: в некоторых системах переменные окружения видны всем пользователям. В таких системах рекомендуется использовать параметр --password-file.
Вы можете установить соединение через веб-прокси, установив переменную окружения RSYNC_PROXY на пару имя_хоста:порт, указывающую на ваш веб-прокси. Обратите внимание, что конфигурация вашего веб-прокси должна поддерживать прокси-подключения к порту 873.
Вы также можете установить соединение демона, используя программу в качестве прокси, установив переменную окружения RSYNC_CONNECT_PROG на команды, которые вы хотите запустить вместо прямого сокетного соединения. Строка может содержать escape-символ "%H" для представления имени хоста, указанного в команде rsync (поэтому используйте "%%", если вам нужен один "%" в вашей строке). Например:
export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873' rsync -av targethost1::module/src/ /dest/ rsync -av rsync://targethost2/module/src/ /dest/
Указанная выше команда использует ssh для запуска nc (netcat) на proxyhost, который перенаправляет все данные на порт 873 (демон rsync) на targethost (%H).
Также обратите внимание, что если задана переменная среды RSYNC_SHELL, эта программа будет использоваться для запуска команды RSYNC_CONNECT_PROG вместо использования оболочки по умолчанию вызова system().
Использование функций rsync демона (службы) через подключение удалённой оболочки
Иногда полезно использовать различные функции демона rsync (например, именованные модули), фактически не разрешая никаких новых подключений сокетов в системе (кроме тех, которые уже требуются для разрешения доступа к удалённой оболочке). Rsync поддерживает подключение к хосту с помощью удалённой оболочки, а затем создание одноразового «демона» сервера, который ожидает чтения своего файла конфигурации в домашнем каталоге удалённого пользователя. Это может быть полезно, если вы хотите зашифровать данные передачи в стиле демона, но поскольку демон запускается заново удаленным пользователем, вы не сможете использовать такие функции, как chroot или изменить uid, используемый демоном. (Другой способ шифрования передачи демона — использование ssh для туннелирования локального порта на удалённую машину и настройка обычного демона rsync на этом удалённом хосте для разрешения подключений только с «localhost».)
С точки зрения пользователя передача демона через соединение remote-shell использует почти тот же синтаксис командной строки, что и обычная передача rsync-daemon, за исключением того, что необходимо явно задать программу удалённой оболочки в командной строке с помощью параметра --rsh=КОМАНДА. (Установка RSYNC_RSH в среде не включит эту функциональность.) Например:
rsync -av --rsh=ssh host::module /dest
Если вам нужно указать другого пользователя remote-shell, помните, что префикс ПОЛЬЗОВАТЕЛЬ@ перед хостом указывает значение rsync-user (для модуля, требующего аутентификации на основе пользователя). Это означает, что вы должны указать опцию '-l user' для ssh при указании remote-shell, как в этом примере, который использует короткую версию опции --rsh:
rsync -av -e "ssh -l ssh-user" rsync-user@host::module /dest
"ssh-user" будет использоваться на уровне ssh; "rsync-user" будет использоваться для входа в "module".
В этой настройке демон запускается командой ssh, которая обращается к системе (что можно принудительно сделать через файл ~/.ssh/authorized_keys, если это необходимо). Однако при прямом доступе к демону его необходимо запустить заранее.
Запуск демона (службы) rsync для принятия подключений
Для подключения к демону rsync удалённая система должна иметь уже работающий демон (или она должна настроить что-то вроде inetd для запуска демона rsync для входящих подключений на определённом порту). Полную информацию о том, как запустить демон, который будет обрабатывать входящие сокетные подключения, смотрите на странице руководства rsyncd.conf(5) — это файл конфигурации для демона, который содержит полную информацию о том, как запустить демон (включая автономные и inetd конфигурации).
Если вы используете один из транспортов удалённой оболочки для передачи, нет необходимости вручную запускать демон rsync.
Примеры использования rsync
Вот несколько примеров того, как можно использовать rsync.
Для резервного копирования домашнего каталога, который состоит из больших файлов MS Word и почтовых папок, можно использовать задание cron для каждого пользователя, которое будет выполнять это каждый день:
rsync -aiz . bkhost:backup/joe/
Чтобы переместить некоторые файлы с удалённого хоста на локальный, можно запустить:
rsync -aiv --remove-source-files rhost:/tmp/{file1,file2}.c ~/src/
Быстрая справка по опциям rsync
Вот краткий обзор опций, доступных в rsync. Каждая опция также имеет своё собственное подробное описание далее в этой странице руководства.
--verbose, -v увеличить уровень детализации вывода --info=ФЛАГИ подробная информационная детализация --debug=ФЛАГИ подробная отладочная детализация --stderr=e|a|c изменить режим вывода stderr (по умолчанию: errors) --quiet, -q подавить сообщения без ошибок --no-motd подавить daemon-mode MOTD --checksum, -c пропустить на основе контрольной суммы, а не времени модификаций и размера --archive, -a режим архивации, то есть это опции -rlptgoD (без -A,-X,-U,-N,-H) --no-ОПЦИЯ отключить подразумеваемые ОПЦИИ (например --no-D) --recursive, -r рекурсивный обход каталогов --relative, -R использовать относительные пути --no-implied-dirs не отправлять подразумеваемые каталоги с помощью --relative --backup, -b создавать резервные копии (смотрите --suffix & --backup-dir) --backup-dir=ДИРЕКТОРИЯ создавать резервные копии в иерархии на основе ДИРЕКТОРИИ --suffix=СУФФИКС суффикс резервного копирования (по умолчанию ~ без --backup-dir) --update, -u пропускать файлы, которые более новые на принимающей стороне --inplace обновлять файлы назначения на месте --append добавлять данные в более короткие файлы --append-verify --append со старыми данными в контрольной сумме файла --dirs, -d передавать каталоги без рекурсии --old-dirs, --old-d работает как --dirs при обращении к старому rsync --mkpath создавать отсутствующие компоненты пути назначения --links, -l копировать символические ссылки как символические ссылки --copy-links, -L преобразовывать символическую ссылку в файл/каталог на которую она ссылается (скачать файл/каталог) --copy-unsafe-links преобразовываются только "небезопасные" символические ссылки --safe-links игнорировать символические ссылки, которые указывают за пределы дерева --munge-links изменить символические ссылки, чтобы сделать их безопасными и непригодными для использования --copy-dirlinks, -k преобразовать символическую ссылку на каталог на сам этот каталог (скачать каталог) --keep-dirlinks, -K обрабатывать каталог на который указывает символическая ссылка на получателе как каталог --hard-links, -H сохранять жёсткие ссылки --perms, -p сохранять разрешения --executability, -E сохранять исполняемость --chmod=CHMOD влиять на права доступа к файлам и/или каталогам --acls, -A сохранять ACL (подразумевает --perms) --xattrs, -X сохранять расширенные атрибуты --owner, -o сохранять владельца (только при запуске от суперпользователя) --group, -g сохранять группу --devices сохранять файлы устройств (только при запуске от суперпользователя) --copy-devices копировать содержимое устройства как обычный файл --write-devices записывать на устройства как на файлы (подразумевает --inplace) --specials сохранять специальные файлы -D то же, что и --devices --specials --times, -t сохранять время изменения --atimes, -U сохранить время доступа (использования) --open-noatime избегать изменения atime для открытых файлов --crtimes, -N сохранить время создания (новизна) --omit-dir-times, -O исключить каталоги из --times --omit-link-times, -J исключить символические ссылки из --times --super получатель пытается выполнить действия суперпользователя --fake-super сохранить/восстановить привилегированные атрибуты с помощью xattrs --sparse, -S превратить последовательности нулей в разреженные блоки --preallocate выделить пространство под файлы назначения перед их записью --dry-run, -n выполнить пробный запуск без внесения изменений --whole-file, -W копировать файлы целиком (без алгоритма delta-xfer) --checksum-choice=СТРОКА выбрать алгоритм контрольной суммы (он же --cc) --one-file-system, -x не пересекать границы файловой системы --block-size=РАЗМЕР, -B принудительно установить фиксированную контрольную сумму блоков указанного размера --rsh=КОМАНДА, -e указать удалённую оболочку для использования --rsync-path=ПРОГРАММА указать rsync для запуска на удалённой машине --existing пропустить создание новых файлов на приёмнике --ignore-existing пропустить обновление файлов, которые существуют на приёмнике --remove-source-files отправитель удаляет синхронизированные файлы (не каталоги) --del псевдоним для --delete-during --delete удалить посторонние файлы из каталогов назначения --delete-before получатель удаляет перед передачей, а не во время --delete-during получатель удаляет во время передачи --delete-delay найти файлы для удаления во время передачи, удалить после передачи --delete-after получатель удаляет после передачи, а не во время --delete-excluded также удалить исключённые файлы из каталогов назначения --ignore-missing-args игнорировать отсутствующие аргументы ИСТОЧНИКА без ошибок --delete-missing-args удалить отсутствующие аргументы ИСТОЧНИКА из назначения --ignore-errors удалить даже если есть ошибки ввода-вывода --force принудительное удаление каталогов, даже если они не пустые --max-delete=ЧИСЛО не удалять более ЧИСЛА файлов --max-size=РАЗМЕР не передавать файлы больше РАЗМЕРА --min-size=РАЗМЕР не передавать файлы меньше РАЗМЕРА --max-alloc=РАЗМЕР изменить ограничение на выделение памяти --partial сохранить частично переданные файлы --partial-dir=ДИРЕКТОРИЯ поместить частично переданный файл в ДИРЕКТОРИЮ --delay-updates поместить все обновлённые файлы на место в конце --prune-empty-dirs, -m удалить пустые цепочки каталогов из file-list (список файлов для передачи) --numeric-ids не сопоставлять значения uid/gid с именем пользователя/группы --usermap=СТРОКА настраиваемое сопоставление имени пользователя --groupmap=СТРОКА настраиваемое сопоставление имени группы --chown=ПОЛЬЗОВАТЕЛЬ:ГРУППА простое сопоставление имени пользователя/имени группы --timeout=СЕКУНДЫ установить тайм-аут ввода-вывода в секундах --contimeout=СЕКУНДЫ установить тайм-аут подключения демона в секундах --ignore-times, -I не пропускать файлы, которые соответствуют размеру и времени --size-only пропускать файлы, которые соответствуют размеру --modify-window=ЧИСЛО, -@ установить точность для сравнений mod-time --temp-dir=ДИРЕКТОРИЯ, -T создать временные файлы в ДИРЕКТОРИИ --fuzzy, -y найти похожий файл для основы, если нет файла назначения --compare-dest=ДИРЕКТОРИЯ также сравнить файлы назначения относительно ДИРЕКТОРИИ --copy-dest=ДИРЕКТОРИЯ ... и включить копии неизменённых файлов --link-dest=ДИРЕКТОРИЯ жесткая ссылка на файлы в ДИРЕКТОРИИ, если они не изменяются --compress, -z сжать данные файла во время передачи --compress-choice=СТРОКА выбрать алгоритм сжатия (он же --zc) --compress-level=ЧИСЛО явно установить уровень сжатия (он же --zl) --skip-compress=СПИСОК пропустить сжатие файлов с суффиксом в СПИСОКЕ --cvs-exclude, -C автоматически игнорировать файлы так же, как это делает CVS (Concurrent Versions System) --filter=ПРАВИЛО, -f добавить ПРАВИЛО фильтрации файлов -F то же, что и --filter='dir-merge /.rsync-filter' при повторе: --filter='- .rsync-filter' --exclude=ШАБЛОН исключить файлы, соответствующие ШАБЛОНУ --exclude-from=ФАЙЛ прочитать шаблоны исключения из ФАЙЛА --include=ШАБЛОН не исключать файлы, соответствующие ШАБЛОНУ --include-from=ФАЙЛ прочитать шаблоны не исключения из ФАЙЛА --files-from=ФАЙЛ прочитать список имён файлов-источника из ФАЙЛА --from0, -0 все файлы *-from/filter разделены нулями --old-args отключить современную идиому защиты аргументов --secluded-args, -s использовать протокол для безопасной отправки аргументов --trust-sender доверять списку файлов удалённого отправителя --copy-as=ПОЛЬЗОВАТЕЛЬ[:ГРУППА] указать пользователя и необязательную группу для копирования --address=АДРЕС привязать адрес для исходящего сокета к демону --port=ПОРТ указать альтернативный номер порта с двойным двоеточием --sockopts=ОПЦИИ указать пользовательские параметры TCP --blocking-io использовать блокирующий ввод-вывод для удалённой оболочки --outbuf=N|L|B установить буферизацию на None, Line или Block --stats предоставить некоторую статистику передачи файлов --8-bit-output, -8 оставить символы с высоким битом неэкранированными в выводе --human-readable, -h вывести числа в формате, удобном для чтения человеком --progress показать ход передачи -P то же, что и --partial --progress --itemize-changes, -i вывести сводку изменений для всех обновлений --remote-option=ОПЦИИ, -M отправить ОПЦИИ только на удалённую сторону --out-format=ФОРМАТ вывести обновления, используя указанный ФОРМАТ --log-file=ФАЙЛ записать в журнал то, что мы делаем с указанным ФАЙЛОМ --log-file-format=ФОРМАТ записать обновления, используя указанный ФОРМАТ --password-file=ФАЙЛ прочитать пароль доступа к демону из ФАЙЛА --early-input=ФАЙЛ использовать ФАЙЛ для раннего ввода exec демона --list-only вывести список файлов вместо их копирования --bwlimit=СКОРОСТЬ ограничить пропускную способность ввода-вывода сокета --stop-after=МИНУТЫ Остановить rsync по истечении МИНУТ минут --stop-at=y-m-dTh:m Остановить rsync в указанный момент времени --fsync fsync для каждого записанного файла --write-batch=ФАЙЛ записать пакетное обновление в ФАЙЛ --only-write-batch=ФАЙЛ как --write-batch, но без обновления в ПУНКТЕ_НАЗНАЧЕНИЯ --read-batch=ФАЙЛ прочитать пакетное обновление из FILE --protocol=NUM принудительно использовать более старую версию протокола --iconv=CONVERT_SPEC запросить преобразование набора символов для имён файлов --checksum-seed=ЧИСЛО установить начальное значение контрольной суммы блока/файла (ПРОДВИНУТОЕ) --ipv4, -4 предпочесть IPv4 --ipv6, -6 предпочесть IPv6 --version, -V вывести версию и другую информацию и выйти --help, -h (*) показать эту справку (* -h — справка только сама по себе) Rsync также может быть запущен как демон, в этом случае принимаются следующие параметры: --daemon запустить как демон rsync --address=АДРЕС привязать к указанному адресу --bwlimit=СКОРОСТЬ ограничить пропускную способность ввода-вывода сокета --config=ФАЙЛ указать альтернативный файл rsyncd.conf --dparam=OVERRIDE, -M переопределить глобальный параметр конфигурации демона --no-detach не отсоединять от родительского --port=ПОРТ прослушивать на альтернативном номере порта --log-file=ФАЙЛ переопределить настройку "log file" --log-file-format=ФОРМАТ переопределить настройку "log format" --sockopts=ОПЦИИ указать пользовательские параметры TCP --verbose, -v увеличить уровень детализации --ipv4, -4 предпочесть IPv4 --ipv6, -6 предпочесть IPv6 --help, -h показать эту справку (при использовании с --daemon)
Подробное описание опций rsync
Rsync принимает как длинные (двойное тире + слово), так и короткие (одинарное тире + буква) опции (параметры). Полный список доступных опций описан ниже. Если опцию можно указать несколькими способами, варианты разделяются запятыми. Некоторые опции имеют только длинный вариант, а не короткий.
Если после опции нужно указать какое-то значение, то в тексте ниже это значение указывается только после длинного варианта, хотя он также должен быть указан для короткого. При указании параметра можно использовать форму --option=param, --option param, -o=param, -o param или -oparam (последние варианты предполагают, что у вашего параметра есть короткий вариант).
Параметр может потребоваться каким-либо образом заключить в кавычки, чтобы он выдержал синтаксический анализ командной строки оболочки. Также имейте в виду, что начальная тильда (~) в имени пути заменяется вашей оболочкой, поэтому убедитесь, что вы отделили имя параметра от имени пути пробелом, если вы хотите, чтобы локальная оболочка расширила его.
--help
Вывести краткую страницу справки с описанием доступных в rsync параметров и выйти. Вы также можете использовать -h для --help, когда он используется без других параметров (так как обычно это означает --human-readable).
--version, -V
Вывести версию rsync и другую информацию и выйти. При указании опции дважды, информация выводится в формате JSON, который по-прежнему достаточно удобочитаем (только на стороне клиента).
Вывод включает список скомпилированных возможностей, список оптимизаций, список алгоритмов контрольной суммы по умолчанию, список алгоритмов сжатия по умолчанию, список дайджестов аутентификации демона по умолчанию, ссылку на веб-сайт rsync и несколько других элементов.
--verbose, -v
Эта опция увеличивает объем информации, которая вам предоставляется во время передачи. По умолчанию rsync работает молча. Один параметр -v предоставит вам информацию о том, какие файлы передаются, и краткую сводку в конце. Два параметра -v предоставят вам информацию о том, какие файлы пропускаются, и немного больше информации в конце. Более двух параметров -v следует использовать только при отладке rsync.
Сводка по окончании выполнения сообщает вам количество байтов, отправленных на удалённый rsync (который является принимающей стороной в локальной копии), количество байтов, полученных с удалённого хоста, и среднее количество байтов в секунду переданных данных, вычисленное для всей передачи файлов. Вторая строка показывает общий размер (в байтах), который является суммой всех размеров файлов, которые rsync считал передаваемыми. Он также показывает значение «ускорения», которое является отношением общего размера файла, делённого на сумму отправленных и полученных байтов (что на самом деле является просто числом, которое выглядит как «чем больше, тем лучше»). Обратите внимание, что эти байтовые значения можно сделать более (или менее) читаемыми человеком с помощью параметров --human-readable (или --no-human-readable).
В современном rsync параметр -v эквивалентен настройке групп параметров --info и --debug. Вы можете использовать эти новые параметры в дополнение к --verbose или вместо него, поскольку любые детальные настройки переопределяют подразумеваемые настройки -v. И --info, и --debug имеют способ запросить помощь, которая точно сообщает вам, какие флаги установлены для каждого увеличения детализации:
rsync --info=help rsync --debug=help
Однако имейте в виду, что настройка демона «максимальная детализация» ограничит, насколько высокий уровень различных отдельных флагов может быть установлен на стороне демона. Например, если max равен 2, то любой флаг информации и/или отладки, установленный на более высокое значение, чем то, что было бы установлено -vv, будет понижен до уровня -vv в журнале демона.
--info=ФЛАГИ
Эта опция позволяет вам иметь детальный контроль над выводом информации, которую вы хотите видеть. За отдельным именем флага может следовать номер уровня, где 0 означает отключение этого вывода, 1 — уровень вывода по умолчанию, а более высокие числа увеличивают вывод этого флага (для тех, которые поддерживают более высокие уровни). Используйте --info=help, чтобы увидеть все доступные имена флагов, что они выводят, и какие имена флагов добавляются для каждого увеличения подробного уровня:
rsync --info=help Используйте ОПЦИЯ или ОПЦИЯ1 для выхода уровня 1, ОПЦИЯ2 для уровня 2 и т. д.; ОПЦИЯ0 отключает вывод информации. BACKUP Упоминание файлов, для которых были созданы резервные копии COPY Упоминание файлов, скопированных локально на принимающей стороне DEL Упоминание удалений на принимающей стороне FLIST Упоминание списка файлов, полученных/отправленных (уровни 1-2) MISC Упоминание различной информации (уровни 1-2) MOUNT Упоминание найденных или пропущенных монтирований NAME Упоминание 1) обновлённых имён файлов/каталогов, 2) неизмененных имён NONREG Упоминание пропущенных нерегулярных файлов (по умолчанию 1, 0 отключает) PROGRESS Упоминание 1) прогресса по файлам или 2) общего прогресса передачи REMOVE Упоминание файлов, удалённых на отправляющей стороне SKIP Упоминание файлов, пропущенных из-за переопределений передачи (уровни 1-2) STATS Упоминание статистики по окончании выполнения (уровни 1-3) SYMSAFE Упоминание небезопасных символических ссылок ALL Установить все параметры --info (например, all4) NONE Отключить все параметры --info (то же, что и all0) HELP Вывести это сообщение справки Параметры, добавленные на каждом уровне детализации: 0) NONREG 1) COPY,DEL,FLIST,MISC,NAME,STATS,SYMSAFE 2) BACKUP,MISC2,MOUNT,NAME2,REMOVE,SKIP
Вот несколько примеров:
rsync -a --info=progress2 src/ dest/ rsync -avv --info=stats2,misc1,flist0 src/ dest/
Обратите внимание, что на вывод --info=name влияют параметры --out-format и --itemize-changes (-i). Ознакомьтесь с этими параметрами для получения дополнительной информации о том, что выводится и когда.
Этот параметр был добавлен в 3.1.0, поэтому старый rsync на стороне сервера может отклонить ваши попытки детального управления (если один или несколько флагов необходимо отправить на сервер, а сервер слишком стар, чтобы их понять). Также смотрите предупреждение о «максимальной детализации» выше при работе с демоном.
--debug=ФЛАГИ
Этот параметр позволяет вам иметь детальный контроль над отладочным выводом, который вы хотите видеть. За именем отдельного флага может следовать номер уровня, где 0 означает отключение этого вывода, 1 — уровень вывода по умолчанию, а более высокие числа увеличивают вывод этого флага (для тех, которые поддерживают более высокие уровни). Используйте --debug=help, чтобы увидеть все доступные имена флагов, что они выводят, и какие имена флагов добавляются для каждого увеличения уровня детализации.
rsync --debug=help Используйте ОПЦИЯ или ОПЦИЯ1 для выхода уровня 1, ОПЦИЯ2 для уровня 2 и т. д.; ОПЦИЯ0 отключает вывод отладочной информации. ACL Отладка дополнительной информации ACL BACKUP Отладка действий резервного копирования (уровни 1-2) BIND Отладка действий привязки сокета CHDIR Отладка при изменении текущего каталога CONNECT Отладка событий подключения (уровни 1-2) CMD Отладка команд+параметров, которые выдаются (уровни 1-2) DEL Отладка действий удаления (уровни 1-3) DELTASUM Отладка контрольной суммы дельта-передачи (уровни 1-4) DUP Отладка прополки дубликатов имён EXIT Отладка событий выхода (уровни 1-3) FILTER Отладка действий фильтра (уровни 1-3) FLIST Отладка операций со списком файлов (уровни 1-4) FUZZY Отладка нечёткой оценки (уровни 1-2) GENR Отладка функций генератора HASH Отладка кода хеш-таблицы HLINK Отладка действий жёстких ссылок (уровни 1-3) ICONV Отладка преобразований символов iconv (уровни 1-2) IO Отладка процедур ввода-вывода (уровни 1-4) NSTR Отладка строк согласования OWN Отладка изменений владельца у пользователей и групп (уровни 1-2) PROTO Отладка информации протокола RECV Отладка функций получателя SEND Отладка функций отправителя TIME Отладка настройки изменённого времени (уровни 1-2) ALL Установить все параметры --debug (например, all4) NONE Отключить все параметры --debug (то же, что и all0) HELP Вывести это сообщение справки Параметры, добавляемые на каждом уровне детализации: 2) BIND,CONNECT,CMD,DEL,DELTASUM,DUP,FILTER,FLIST,ICONV 3) ACL,BACKUP,CONNECT2,DEL2,DELTASUM2,EXIT,FILTER2,FLIST2,FUZZY,GENR,OWN,RECV,SEND,TIME 4) CMD2,DEL3,DELTASUM3,EXIT2,FLIST3,ICONV2,OWN2,PROTO,TIME2 5) CHDIR,DELTASUM4,FLIST4,FUZZY2,HASH,HLINK
Вот несколько примеров:
rsync -avvv --debug=none src/ dest/ rsync -avA --del --debug=del2,acl src/ dest/
Обратите внимание, что некоторые отладочные сообщения будут выводиться только при указании параметра --stderr=all, особенно те, которые относятся к отладке ввода-вывода и буфера.
Начиная с версии 3.2.0, этот параметр больше не пересылается автоматически на серверную сторону, чтобы вы могли указать разные значения отладки для каждой стороны передачи, а также указать новый параметр отладки, который присутствует только в одной из версий rsync. Если вы хотите дублировать один и тот же параметр на обеих сторонах, использование расширения фигурных скобок — простой способ сэкономить время на вводе. Это работает в zsh и bash:
rsync -aiv {-M,}--debug=del2 src/ dest/
--stderr=errors|all|client
Эта опция управляет тем, какие процессы выводят данные в stderr и изменяются ли информационные сообщения также в stderr. Строки режима можно сокращать, поэтому смело используйте однобуквенное значение. Возможны 3 варианта:
- errors (ошибки) — (по умолчанию) заставляет все процессы rsync отправлять ошибку непосредственно в stderr, даже если процесс находится на удалённой стороне передачи. Информационные сообщения отправляются на сторону клиента через поток протокола. Если stderr недоступен (т. е. при прямом подключении к демону через сокет), ошибки возвращаются к отправке через поток протокола.
- all (все) — заставляет все сообщения rsync (info и error) записываться непосредственно в stderr из всех (возможных) процессов. Это приводит к тому, что stderr становится строково-буферизованным (вместо необработанного) и исключает возможность разделения информации и сообщений об ошибках по дескриптору файла. Для тех, кто занимается отладкой или использует несколько уровней детализации, эта опция может помочь избежать засорения потока передачи (что должно предотвратить любую вероятность ошибки deadlock (блокировки), которая приводит к зависанию). Она также позволяет --debug включить некоторые дополнительные сообщения, связанные с вводом-выводом.
- client (клиент) — заставляет все сообщения rsync отправляться на сторону клиента через поток протокола. Один клиентский процесс выводит все сообщения, с ошибками на stderr и информационными сообщениями на stdout. Это было значением по умолчанию в старых версиях rsync, но может вызывать задержки ошибок, когда много данных передачи опережает сообщения. Если вы отправляете файлы на старый rsync, вы можете использовать --stderr=all, так как эта идиома существует уже в нескольких выпусках.
Эта опция была добавлена в rsync 3.2.3. Эта версия также начала пересылку нестандартных настроек на удалённую сторону, хотя rsync использует обратно совместимые опции --msgs2stderr и --no-msgs2stderr для представления всех и клиентских настроек соответственно. Более новая версия rsync продолжит принимать эти старые имена опций для поддержания совместимости.
--quiet, -q
Эта опция уменьшает объем информации, которую вы получаете во время передачи, в частности, подавляя информационные сообщения с удалённого сервера. Эта опция полезна при вызове rsync из cron.
--no-motd
Эта опция влияет на информацию, выводимую клиентом в начале передачи демона. Это подавляет текст сообщения дня (MOTD), но также влияет на список модулей, которые демон отправляет в ответ на запрос «rsync host::» (из-за ограничения в протоколе rsync), поэтому опустите эту опцию, если вы хотите запросить список модулей у демона.
--ignore-times, -I
Обычно rsync пропускает все файлы, которые уже имеют одинаковый размер и одинаковую временную метку изменения. Эта опция отключает это поведение «быстрой проверки», в результате чего все файлы обновляются.
Эта опция может сбивать с толку по сравнению с --ignore-existing и --ignore-non-existing, поскольку они заставляют rsync передавать меньше файлов, в то время как эта опция заставляет rsync передавать больше файлов.
--size-only
Это изменяет алгоритм «быстрой проверки» rsync для поиска файлов, которые необходимо передать, изменяя его с передачи файлов по умолчанию либо с измененным размером, либо с измененным временем последнего изменения на простой поиск файлов, размер которых изменился. Это полезно при начале использования rsync после использования другой системы зеркалирования, которая может не сохранять точные временные метки.
--modify-window=ЧИСЛО, -@
При сравнении двух временных меток rsync считает временные метки равными, если они отличаются не более чем на значение окна изменения. Значение по умолчанию равно 0, что соответствует только целым секундам. Если указать отрицательное значение (и получатель имеет версию не ниже 3.1.3), то будут учитываться также наносекунды. Указание 1 полезно для копирования в/из файловых систем MS Windows FAT, поскольку FAT представляет время с разрешением в 2 секунды (что позволяет времени отличаться от оригинала до 1 секунды).
Если вы хотите, чтобы все ваши передачи по умолчанию сравнивались с наносекундами, вы можете создать файл ~/.popt и поместить в него следующие строки:
rsync alias -a -a@-1 rsync alias -t -t@-1
Если вы настроили предыдущий вариант опции как значение по умолчанию, то если вам понадобиться вернуться к стандартному поведению, то вам нужно указать --modify-window=0 (он же -@0), чтобы переопределить его и игнорировать наносекунды, например, если вы копируете между ext3 и ext4 или если принимающий rsync старше 3.1.3.
--checksum, -c
Это изменяет способ проверки rsync того, были ли файлы изменены и нуждаются ли они в передаче. Без этой опции rsync использует «быструю проверку», которая (по умолчанию) проверяет, совпадают ли размер каждого файла и время последнего изменения между отправителем и получателем. Эта опция изменяет это, чтобы сравнивать 128-битную контрольную сумму для каждого файла, имеющего соответствующий размер. Генерация контрольных сумм означает, что обе стороны будут тратить много дискового ввода-вывода на чтение всех данных в файлах при передаче, поэтому это может значительно замедлить работу (и это до любого чтения, которое будет сделано для передачи изменённых файлов)
Отправляющая сторона генерирует свои контрольные суммы во время сканирования файловой системы, которое создаёт список доступных файлов. Получатель генерирует свои контрольные суммы, когда сканирует изменённые файлы, и будет выполнять контрольную сумму любого файла, который имеет тот же размер, что и соответствующий файл отправителя: файлы с измененным размером или измененной контрольной суммой выбираются для передачи.
Обратите внимание, что rsync всегда проверяет, что каждый переданный файл был правильно восстановлен на принимающей стороне, проверяя контрольную сумму всего файла, которая генерируется при передаче файла, но эта автоматическая проверка после передачи не имеет ничего общего с проверкой перед передачей «Нужно ли обновить этот файл?».
Используемая контрольная сумма автоматически согласовывается между клиентом и сервером, но может быть переопределена с помощью параметра --checksum-choice (--cc) или переменной среды, которая обсуждается в разделе этого параметра.
--archive, -a
Это эквивалентно -rlptgoD.
Примечание: опции состоящие из одной буквы в командной строке Linux можно объединять (сливать) в одно слово, в этом случае нужно указать дефис только один раз, перед первой опцией. В общем, строка -rlptgoD означает совокупность следующих опций:
-r -l -p -t -g -o -D
Расшифровка значения опций -rlptgoD:
- -r: рекурсивный обход каталогов
- -l: копировать символические ссылки как символические ссылки
- -p: сохранять разрешения
- -t: сохранять время изменения
- -g: сохранять группу
- -o: сохранять владельца (только при запуске от суперпользователя)
- -D: (то же, что и --devices --specials), то есть сохранять файлы устройств (только при запуске от суперпользователя) и сохранять специальные файлы
Это быстрый способ сказать, что вы хотите рекурсию и хотите сохранить почти всё. Имейте в виду, что это не включает сохранение ACL (-A), xattrs (-X), atimes (-U), crtimes (-N), а также поиск и сохранение жёстких ссылок (-H).
Единственным исключением из приведённой выше эквивалентности является указание --files-from, в этом случае -r не подразумевается.
--no-ОПЦИЯ
Вы можете отключить один или несколько подразумеваемых параметров, добавив к имени параметра префикс "no-". Не все положительные опции имеют отрицательную противоположность, но многие имеют, включая те, которые можно использовать для отключения подразумеваемой опции (например, --no-D, --no-perms) или иметь разные значения по умолчанию в различных обстоятельствах (например, --no-whole-file, --no-blocking-io, --no-dirs). Каждая допустимая отрицательная опция принимает как короткое, так и длинное имя опции после префикса "no-" (например, --no-R то же самое, что и --no-relative).
Например, если вы хотите использовать --archive (-a), но не хотите --owner (-o), вместо преобразования -a в -rlptgD вы можете указать -a --no-o (он же --archive --no-owner).
Порядок опций важен: если вы указываете --no-r -a, опция -r в конечном итоге будет включена, в отличии от варианта -a --no-r, который эту опцию всё-таки отключает. Обратите внимание также, что побочные эффекты параметра --files-from НЕ являются позиционными, поскольку он влияет на состояние по умолчанию нескольких параметров и немного изменяет значение -a (более подробную информацию смотрите в описании параметра --files-from).
--recursive, -r
Эта опция указывает rsync копировать каталоги рекурсивно. Смотрите также --dirs (-d) для параметра, который позволяет сканировать один каталог.
Смотрите параметр --inc-recursive для обсуждения инкрементальной рекурсии для создания списка файлов для передачи.
--inc-recursive, --i-r
Этот параметр явно включает инкрементальную рекурсию при сканировании файлов, которая включена по умолчанию при использовании параметра --recursive и обе стороны передачи используют rsync 3.0.0 или более новую версию.
Инкрементальная рекурсия использует гораздо меньше памяти, чем неинкрементальная, а также начинает передачу быстрее (поскольку ей не нужно сканировать всю иерархию передачи перед началом передачи файлов). Если рекурсия не включена в исходных файлах, этот параметр не имеет никакого эффекта.
Некоторые параметры требуют, чтобы rsync знал полный список файлов, поэтому эти параметры отключают режим инкрементальной рекурсии. К ним относятся:
- --delete-before (старое значение по умолчанию для --delete)
- --delete-after
- --prune-empty-dirs
- --delay-updates
Чтобы сделать --delete совместимым с инкрементальной рекурсией, rsync 3.0.0 сделал --delete-during режимом удаления по умолчанию (который был впервые добавлен в 2.6.4).
Одним из побочных эффектов инкрементальной рекурсии является то, что любые отсутствующие подкаталоги внутри рекурсивно сканируемого каталога (по умолчанию) создаются до рекурсии в подкаталоги. Эта более ранняя точка создания (по сравнению с неинкрементальной рекурсией) позволяет rsync сразу же устанавливать время изменения готового каталога (без необходимости откладывать это до завершения кучи рекурсивного копирования). Однако эти ранние каталоги ещё не имеют своего завершённого режима, mtime или набора прав собственности — они имеют более ограничивающие права, пока не начнётся фактическое копирование подкаталога. Эту идиому раннего создания можно обойти, используя параметр --omit-dir-times.
Инкрементальную рекурсию можно отключить с помощью параметра --no-inc-recursive (--no-i-r).
--no-inc-recursive, --no-i-r
Отключает новый алгоритм инкрементальной рекурсии параметра --recursive. Это заставляет rsync сканировать полный список файлов перед началом передачи файлов. Смотрите --inc-recursive для получения дополнительной информации.
--relative, -R
Использовать относительные пути. Это означает, что на сервер отправляются полные имена путей, указанные в командной строке, а не только последние части имён файлов. Это особенно полезно, когда вы хотите отправить несколько разных каталогов одновременно. Например, если вы использовали эту команду:
rsync -av /foo/bar/baz.c remote:/tmp/
то она создаст файл с именем baz.c в /tmp/ на удалённой машине. Если вместо этого вы используете
rsync -avR /foo/bar/baz.c remote:/tmp/
то файл с именем /tmp/foo/bar/baz.c будет создан на удалённой машине, сохраняя его полный путь. Эти дополнительные элементы пути называются «подразумеваемыми каталогами» (т. е. каталогами «foo» и «foo/bar» в приведённом выше примере).
Начиная с rsync 3.0.0, rsync всегда отправляет эти подразумеваемые каталоги как реальные каталоги в списке файлов, даже если элемент пути на самом деле является символической ссылкой на отправляющей стороне. Это предотвращает некоторые действительно неожиданные поведения при копировании полного пути файла, о наличии символической ссылки в пути которого вы не знали. Если вы хотите дублировать символическую ссылку на стороне сервера, включите как символическую ссылку через её путь, так и референтный каталог через её реальный путь. Если вы имеете дело со старой версией rsync на отправляющей стороне, вам может потребоваться использовать опцию --no-implied-dirs.
Также можно ограничить объем информации о пути, отправляемой в качестве подразумеваемых каталогов для каждого указанного вами пути. С современной версией rsync на отправляющей стороне (начиная с 2.6.7) вы можете вставить точку и косую черту в исходный путь, например:
rsync -avR /foo/./bar/baz.c remote:/tmp/
Это создаст /tmp/bar/baz.c на удалённой машине. (Обратите внимание, что за точкой должна следовать косая черта, поэтому "/foo/." не будет сокращено.) Для старых версий rsync вам потребуется использовать chdir для ограничения исходного пути. Например, при загрузке файлов:
(cd /foo; rsync -avR bar/baz.c remote:/tmp/)
(Обратите внимание, что скобки помещают две команды в под-оболочку, так что команда "cd" не останется в силе для будущих команд.) Если вы извлекаете файлы из старого rsync, используйте эту идиому (но только для передачи без демона):
rsync -avR --rsync-path="cd /foo; rsync" remote:bar/baz.c /tmp/
--no-implied-dirs
Эта опция влияет на поведение по умолчанию опции --relative. Когда она указана, атрибуты подразумеваемых каталогов из исходных имён не включаются в передачу. Это означает, что соответствующие элементы пути в целевой системе остаются неизменными, если они существуют, и любые отсутствующие подразумеваемые каталоги создаются с атрибутами по умолчанию. Это даже позволяет этим подразумеваемым элементам пути иметь большие различия, например, быть символической ссылкой на каталог на принимающей стороне.
Например, если аргумент командной строки или запись files-from указали rsync передать файл «path/foo/file», каталоги «path» и «path/foo» подразумеваются при использовании --relative. Если «path/foo» является символической ссылкой на «bar» в целевой системе, принимающий rsync обычно удаляет «path/foo», воссоздаёт его как каталог и получает файл в новый каталог. С --no-implied-dirs принимающий rsync обновляет «path/foo/file», используя существующие элементы пути, что означает, что файл в конечном итоге создаётся в «path/bar». Другой способ сохранения этой ссылки — использовать параметр --keep-dirlinks (который также повлияет на символические ссылки на каталоги в остальной части передачи).
При извлечении файлов из rsync старше 3.0.0 вам может потребоваться использовать этот параметр, если у отправляющей стороны есть символическая ссылка в запрашиваемом вами пути, и вы хотите, чтобы подразумеваемые каталоги были переданы как обычные каталоги.
--backup, -b
С этим параметром существующие файлы назначения переименовываются при передаче или удалении каждого файла. Вы можете контролировать, куда отправляется файл резервной копии и какой (при желании) суффикс добавляется, с помощью параметров --backup-dir и --suffix.
Если вы не укажете --backup-dir:
- опция --omit-dir-times будет принудительно включена
- использование --delete (без --delete-excluded) заставляет rsync добавлять правило фильтра «protect» для суффикса резервной копии в конец всех существующих фильтров, которое выглядит так: -f "P *~". Это правило предотвращает удаление ранее скопированных файлов.
Обратите внимание, что если вы предоставляете собственные правила фильтрации, вам может потребоваться вручную вставить собственное правило исключения/защиты где-то выше в списке, чтобы оно имело достаточно высокий приоритет для эффективности (например, если ваши правила указывают завершающее включение/исключение *, автоматически добавленное правило никогда не будет достигнуто).
--backup-dir=ДИРЕКТОРИЯ
Эта опция подразумевает опцию --backup и сообщает rsync о необходимости сохранять все резервные копии в указанном каталоге на принимающей стороне. Это можно использовать для инкрементного резервного копирования. Вы можете дополнительно указать суффикс резервной копии с помощью параметра --suffix (иначе файлы, скопированные в указанный каталог, сохранят свои исходные имена).
Обратите внимание, что если вы указываете относительный путь, каталог резервной копии будет относительным к каталогу назначения, поэтому вам, вероятно, следует указать либо абсолютный путь, либо путь, начинающийся с «../». Если получателем является демон rsync, каталог резервной копии не может выходить за пределы иерархии путей модуля, поэтому будьте особенно осторожны, чтобы не удалить его или не скопировать в него.
--suffix=СУФФИКС
Этот параметр позволяет переопределить суффикс резервной копии по умолчанию, используемый с параметром --backup (-b). Суффикс по умолчанию это «~», если параметр --backup-dir не указан, в противном случае это пустая строка.
--update, -u
Это заставляет rsync пропускать все файлы, которые существуют в месте назначения и имеют время изменения, которое новее, чем у исходного файла. (Если существующий файл назначения имеет время изменения, равное времени изменения исходного файла, он будет обновлён, если размеры отличаются.)
Обратите внимание, что это не влияет на копирование каталогов, символических ссылок или других специальных файлов. Кроме того, разница в форматах файлов между отправителем и получателем всегда считается достаточно важной для обновления, независимо от даты на объектах. Другими словами, если у источника есть каталог, в котором у получателя есть файл, передача будет выполнена независимо от временных меток.
Этот параметр является «Правилом передачи», поэтому не ожидайте никаких побочных эффектов исключения.
Предупреждение для тех, кто решит объединить --inplace с --update: прерванная передача оставит после себя частичный файл на принимающей стороне с очень недавним временем изменения, поэтому повторный запуск передачи, вероятно, не продолжит прерванный файл. Таким образом, обычно лучше избегать объединения этого с --inplace, если вы не реализовали ручные шаги для обработки любых файлов, чьё скачивание было прервано.
--inplace
Этот параметр изменяет способ передачи файла программой rsync, когда его данные необходимо обновить: вместо метода по умолчанию создания новой копии файла и перемещения её на место после завершения, rsync записывает обновлённые данные непосредственно в целевой файл.
Это имеет несколько эффектов:
- Жёсткие ссылки не разрываются. Это означает, что новые данные будут видны через другие жёсткие ссылки на целевой файл. Более того, попытки скопировать различные исходные файлы в многосвязный целевой файл приведут к «перетягиванию каната», когда данные назначения будут меняться туда-сюда.
- Используемые двоичные файлы не могут быть обновлены (либо ОС не позволит этому произойти, либо двоичные файлы, которые пытаются подкачать свои данные, будут вести себя неправильно или дадут сбой).
- Данные файла будут находиться в несогласованном состоянии во время передачи и останутся в таком состоянии, если передача будет прервана или обновление завершится неудачей.
- Файл, в который rsync не может записать данные, не может быть обновлён. В то время как суперпользователь может обновить любой файл, обычному пользователю необходимо предоставить разрешение на запись для открытия файла, чтобы запись была успешной.
- Эффективность алгоритма дельта-передачи rsync может быть снижена, если некоторые данные в целевом файле будут перезаписаны до того, как их можно будет скопировать в более позднее положение в файле. Это не применимо, если вы используете --backup, так как rsync достаточно умён, чтобы использовать файл резервной копии в качестве базового файла для передачи.
ПРЕДУПРЕЖДЕНИЕ: вы не должны использовать эту опцию для обновления файлов, к которым обращаются другие, поэтому будьте осторожны, выбирая её для копирования.
Эта опция полезна для передачи больших файлов с изменениями на основе блоков или добавленными данными, а также в системах, которые привязаны к диску, а не к сети. Она также может помочь предотвратить расхождение моментального снимка файловой системы с копированием при записи всего содержимого файла, в котором есть только незначительные изменения.
Опция подразумевает --partial (так как прерванная передача не удаляет файл), но конфликтует с --partial-dir и --delay-updates. До rsync 2.6.4 --inplace также был несовместим с --compare-dest и --link-dest.
--append
Этот специальный режим копирования работает только для эффективного обновления файлов, которые, как известно, увеличиваются, когда любой существующий контент на принимающей стороне также известен как тот же, что и контент на отправителе. Использование --append может быть опасным, если вы не уверены на 100%, что все файлы в передаче являются общими, растущими файлами. Поэтому вам следует использовать правила фильтрации, чтобы убедиться, что вы отсеиваете все файлы, которые не соответствуют этому критерию.
Rsync обновляет эти растущие файлы на месте, не проверяя какой-либо существующий контент в файле (он проверяет только контент, который он добавляет). Rsync пропускает все файлы, которые существуют на принимающей стороне, которые не короче связанного файла на отправляющей стороне (что означает, что передаются новые файлы). Он также пропускает все файлы, размер которых на отправляющей стороне становится короче во время согласования отправки (rsync предупреждает об «уменьшенном» файле, когда это происходит).
Это не мешает обновлению атрибутов файла, не относящихся к содержимому (например, разрешений, владельца и т. д.), когда файл не нужно переносить, а также не влияет на обновление каких-либо каталогов или нестандартных файлов.
--append-verify
Этот специальный режим копирования работает как --append, за исключением того, что все данные в файле включаются в проверку контрольной суммы (что делает его менее эффективным, но и потенциально более безопасным). Этот параметр может быть опасным, если вы не уверены на 100%, что все файлы в передаче являются общими, растущими файлами. Смотрите параметр --append для получения более подробной информации.
Примечание: до rsync 3.0.0 параметр --append работал как --append-verify, поэтому если вы взаимодействуете со старым rsync (или передача использует протокол до 30), указание любого параметра append инициирует передачу --append-verify.
--dirs, -d
Сообщите отправляющей стороне о необходимости включить все обнаруженные каталоги. В отличие от --recursive, содержимое каталога не копируется, если указанное имя каталога не является "." или не заканчивается косой чертой (например, ".", "dir/.", "dir/" и т. д.). Без этой опции или опции --recursive rsync пропустит все каталоги, которые встретит (и выведет сообщение об этом для каждого из них). Если указать и --dirs, и --recursive, приоритет будет иметь --recursive.
Опция --dirs подразумевается опцией --files-from или опцией --list-only (включая подразумеваемое использование --list-only), если --recursive не указана (чтобы каталоги были видны в списке). Укажите --no-dirs (или --no-d), если хотите отключить это.
Также есть вспомогательная опция обратной совместимости --old-dirs (--old-d), которая сообщает rsync использовать хак -r --exclude='/*/*', чтобы заставить старый rsync вывести список одного каталога без рекурсии.
--mkpath
Создать все отсутствующие компоненты пути назначения.
По умолчанию rsync допускает отсутствие только последнего компонента пути назначения, что является попыткой помочь вам проверить ваш путь назначения. С этой опцией rsync создаёт все отсутствующие компоненты пути назначения, как если бы mkdir -p $DEST_PATH был запущен на принимающей стороне.
При указании пути назначения включение завершающего слеша гарантирует, что весь путь будет рассматриваться как имена каталогов, которые будут созданы, даже если список файлов содержит один элемент. Смотрите раздел «Копирование директорию в папку с другим именем» для получения полной информации о том, как rsync решает, следует ли создавать конечный компонент пути назначения как каталог или нет.
Если вы хотите, чтобы вновь созданные каталоги назначения соответствовали каталогам на отправляющей стороне, вам следует использовать --relative (-R) вместо --mkpath. Например, следующие две команды создают одно и то же дерево назначения, но только вторая команда гарантирует, что компоненты "некий/дополнительный/путь" соответствуют каталогам на отправляющей стороне:
rsync -ai --mkpath host:some/extra/path/*.c some/extra/path/ rsync -aiR host:some/extra/path/*.c ./
--links, -l
Добавлять символические ссылки к передаваемым файлам вместо их шумного игнорирования с предупреждением «нерегулярный файл» для каждой обнаруженной символической ссылки. Вы также можете отключить предупреждение, указав --info=nonreg0.
Обработка символических ссылок по умолчанию заключается в воссоздании неизменённого значения каждой символической ссылки на принимающей стороне.
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--copy-links, -L
Отправитель преобразует каждую символическую ссылку, обнаруженную при передаче, в референтный элемент, следуя цепочке символических ссылок к файлу или каталогу, на который она ссылается. Если цепочка символических ссылок разорвана, выводится ошибка, и файл удаляется из передачи.
Примечание: в этом мануале «референтными элементами», «референтными файлами» и «референтными директории» называются файлы и каталоги, на которые ссылается символическая ссылка.
Эта опция заменяет любые другие опции, которые влияют на символические ссылки при передаче, поскольку в передаче не осталось символических ссылок.
Эта опция не изменяет обработку существующих символических ссылок на принимающей стороне, в отличие от версий rsync до 2.6.3, которые имели побочный эффект, сообщая принимающей стороне также следовать символическим ссылкам. Современный rsync не будет пересылать эту опцию удалённому получателю (поскольку только отправитель должен знать об этом), поэтому это предостережение должно касаться только тех, кто использует клиент rsync старше 2.6.7 (когда -L перестал пересылаться получателю).
Смотрите опцию --keep-dirlinks (-K), если вам нужно, чтобы символическая ссылка на каталог обрабатывалась как реальный каталог на принимающей стороне.
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--copy-unsafe-links
Эта опция указывает rsync копировать референт символических ссылок, которые указывают за пределы скопированного дерева. Абсолютные символические ссылки также обрабатываются как обычные файлы, как и любые символические ссылки в самом исходном пути при использовании --relative.
Обратите внимание, что точкой отсечения является начало передачи, то есть часть пути, которую rsync не упоминает в подробном выводе. Если вы копируете «/src/subdir» в «/dest/», то каталог «subdir» является именем внутри дерева передачи, а не вершиной передачи (которой является /src), поэтому допустимо, чтобы созданные относительные символические ссылки ссылались на другие имена внутри каталогов /src и /dest. Если вместо этого вы копируете «/src/subdir/» (с завершающим слешем) в «/dest/subdir», это не позволит создавать символические ссылки на файлы за пределами «subdir».
Обратите внимание, что безопасные символические ссылки копируются только в том случае, если также указан или подразумевается --links. Параметр --copy-unsafe-links не имеет дополнительного эффекта в сочетании с --copy-links.
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--safe-links
Это сообщает принимающему rsync игнорировать любые символические ссылки в передаче, которые указывают за пределы скопированного дерева. Все абсолютные символические ссылки также игнорируются.
Поскольку это игнорирование происходит на принимающей стороне, оно всё равно будет эффективным, даже если отправляющая сторона имеет munged символические ссылки (когда она использует --munge-links). Это также влияет на удаления, поскольку файл, присутствующий в передаче, предотвращает удаление любого соответствующего файла на получателе, когда символическая ссылка считается небезопасной и пропускается.
Этот параметр должен быть объединён с --links (или --archive), чтобы иметь любые символические ссылки в передаче для условного игнорирования. Его эффект заменяется --copy-unsafe-links.
Использование этого параметра в сочетании с --relative может дать неожиданные результаты.
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--munge-links
Эта опция влияет только на одну сторону передачи и сообщает rsync о необходимости munge (изменения) значений символических ссылок при получении файлов или unmunge (восстановления) значений символических ссылок при отправке файлов. Изменённые (munged) значения делают символические ссылки непригодными для использования на диске, но позволяют восстановить исходное содержимое символических ссылок.
Серверная rsync часто включает эту опцию без ведома клиента, например, в файле конфигурации демона rsync или с помощью опции, заданной для скрипта rrsync (restricted rsync / ограниченный rsync). При указании на стороне клиента укажите опцию обычным образом, если это сторона клиента, которая имеет/нуждается в изменённых символических ссылках, или используйте -M--munge-links, чтобы предоставить опцию серверу, когда он имеет/нуждается в изменённых символических ссылках. Обратите внимание, что при локальной передаче клиент является отправителем, поэтому указание опции напрямую восстанавливает (unmunge) символические ссылки, а указание её как удалённой опции меняет (munge) символические ссылки.
Эта опция не действует при отправке демону через --remote-option, поскольку демон настраивает, хочет ли он изменённые символические ссылки, с помощью своего параметра «munge symlinks».
Значение символической ссылки изменено/восстановлено, как только оно попадает в передачу, поэтому любая опция, преобразующая символические ссылки в несимволические, выполняется до изменения/восстановления, за исключением --safe-links, что является выбором, который делает получатель, поэтому он основывает своё решение на изменённом/восстановленном значении. Это означает, что если получатель включил изменение, то использование --safe-links приведёт к игнорированию всех символических ссылок (поскольку все они абсолютные).
Метод, который rsync использует для изменения символических ссылок, заключается в добавлении к каждому значению префикса строки "/rsyncd-munged/". Это предотвращает использование ссылок, пока каталог не существует. Если эта опция включена, rsync откажется запускаться, если этот путь является каталогом или символической ссылкой на каталог (хотя он проверяет только при запуске). Смотрите также скрипт python "munge-symlinks" в каталоге support исходного кода (https://github.com/RsyncProject/rsync/blob/master/support/munge-symlinks), чтобы узнать, как изменить/восстановить одну или несколько символических ссылок на месте.
--copy-dirlinks, -k
Эта опция заставляет отправляющую сторону обрабатывать символическую ссылку на каталог так, как будто это реальный каталог. Это полезно, если вы не хотите, чтобы затрагивались символические ссылки на не-каталоги, поскольку они будут использовать --copy-links.
Без этой опции, если отправляющая сторона заменила каталог символической ссылкой на каталог, принимающая сторона удалит всё, что находится на пути новой символической ссылки, включая иерархию каталогов (при условии, что действуют --force или --delete).
Смотрите также --keep-dirlinks, чтобы узнать об аналогичной опции для принимающей стороны.
--copy-dirlinks применяется ко всем символическим ссылкам на каталоги в ИСТОЧНИКЕ. Если вы хотите следовать только нескольким указанным символическим ссылкам, вы можете использовать трюк, чтобы передать их как дополнительные аргументы источника с завершающим слешем, используя --relative, чтобы пути совпадали правильно. Например:
rsync -r --relative src/./ src/./follow-me/ dest/
Это работает, потому что rsync вызывает lstat(2) для исходного аргумента, как указано, а завершающий слеш заставляет lstat(2) следовать за символической ссылкой, создавая каталог в списке файлов, который переопределяет символическую ссылку, найденную во время сканирования "src/./".
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--keep-dirlinks, -K
Эта опция заставляет принимающую сторону обрабатывать символическую ссылку на каталог так, как будто это реальный каталог, но только если она соответствует реальному каталогу отправителя. Без этой опции символическая ссылка получателя будет удалена и заменена реальным каталогом.
Например, предположим, что вы передаёте каталог "foo", содержащий файл "file", но "foo" является символической ссылкой на каталог "bar" на получателе. Без --keep-dirlinks получатель удаляет символическую ссылку "foo", воссоздаёт её как каталог и получает файл в новый каталог. С --keep-dirlinks получатель сохраняет символическую ссылку, а "file" оказывается в "bar".
Одно предостережение: если вы используете --keep-dirlinks, вы должны доверять всем символическим ссылкам в копии или включить опцию --munge-links на принимающей стороне! Если ненадёжный пользователь может создать свою собственную символическую ссылку на любой реальный каталог, пользователь может затем (при последующей копии) заменить символическую ссылку реальным каталогом и повлиять на содержимое любого каталога, на который ссылается символическая ссылка. Для резервных копий вам лучше использовать что-то вроде монтирования привязки (bind mount) вместо символической ссылки, чтобы изменить иерархию получения.
Смотрите также --copy-dirlinks для аналогичной опции для отправляющей стороны.
Смотрите раздел «Символические ссылки» для получения информации о порядке обработки и комбинировании опций, связанных с символическими ссылками.
--hard-links, -H
Это указывает rsync искать файлы с жёсткими ссылками в источнике и связывать вместе соответствующие файлы в месте назначения. Без этой опции файлы с жёсткими ссылками в источнике обрабатываются так, как если бы они были отдельными файлами.
Эта опция НЕ обязательно гарантирует, что шаблон жёстких ссылок в месте назначения точно соответствует шаблону в источнике. Случаи, в которых место назначения может оказаться с дополнительными жёсткими ссылками, включают следующее:
- Если место назначения содержит лишние жёсткие ссылки (больше ссылок, чем в списке исходных файлов), алгоритм копирования не разорвёт их явно. Однако, если один или несколько путей имеют различия в содержимом, обычный процесс обновления файлов разорвёт эти дополнительные ссылки (если вы не используете опцию --inplace).
- Если вы указываете каталог --link-dest, содержащий жёсткие ссылки, связывание файлов назначения с файлами --link-dest может привести к тому, что некоторые пути в месте назначения станут связанными из-за ассоциаций --link-dest.
Обратите внимание, что rsync может обнаруживать жёсткие ссылки только между файлами, которые находятся внутри набора передачи. Если rsync обновляет файл, который имеет дополнительные жёсткие ссылки на файлы за пределами передачи, эта связь будет разорвана. Если вы хотите использовать опцию --inplace, чтобы избежать этой поломки, будьте очень осторожны и знайте, как обновляются ваши файлы, чтобы быть уверенными, что не произойдёт никаких непреднамеренных изменений из-за сохраняющихся жёстких ссылок (и смотрите опцию --inplace для получения дополнительных предостережений).
Если активна инкрементальная рекурсия (смотрите --inc-recursive), rsync может передать отсутствующий жёстко связанный файл до того, как обнаружит, что другая ссылка на это содержимое существует в другом месте иерархии. Это не влияет на точность передачи (т. е. какие файлы жёстко связаны друг с другом), а только на её эффективность (т. е. копирование данных для новой, ранней копии жёстко связанного файла, который мог быть найден позже при передаче в другом члене жёстко связанного набора файлов). Один из способов избежать этой неэффективности — отключить инкрементальную рекурсию с помощью опции --no-inc-recursive.
--perms, -p
Эта опция заставляет принимающий rsync устанавливать разрешения назначения такими же, как разрешения источника. (Смотрите также опцию --chmod для способа изменения того, что rsync считает разрешениями источника.)
Когда эта опция выключена, разрешения устанавливаются следующим образом:
- Существующие файлы (включая обновлённые файлы) сохраняют свои существующие разрешения, хотя опция --executability может изменить только разрешение на выполнение для файла.
- Новые файлы получают свои «обычные» биты разрешений, установленные на разрешения исходного файла, замаскированные (masked) с помощью разрешений по умолчанию принимающего каталога (либо umask принимающего процесса, либо разрешений, указанных через ACL по умолчанию целевого каталога), а их специальные биты разрешений отключаются, за исключением случая, когда новый каталог наследует бит setgid от своего родительского каталога.
Таким образом, когда отключены и --perms, и --executability, поведение rsync такое же, как и у других утилит копирования файлов, таких как cp(1) и tar(1).
Коротко говоря: чтобы предоставить файлам назначения (как старым, так и новым) исходные разрешения, используйте --perms. Чтобы предоставить новым файлам разрешения назначения по умолчанию (оставив существующие файлы без изменений), убедитесь, что опция --perms отключена, и используйте --chmod=ugo=rwX (что гарантирует включение всех немаскированных битов). Если вы хотите сделать это последнее поведение более простым для ввода, вы можете определить для него псевдоним popt, например, поместив эту строку в файл ~/.popt (следующее определяет опцию -Z и включает --no-g для использования группы по умолчанию каталога назначения):
rsync alias -Z --no-p --no-g --chmod=ugo=rwX
Затем вы можете использовать эту новую опцию в команде, например, такой:
rsync -avZ src/ dest/
(Предостережение: убедитесь, что -a не следует за -Z, иначе это снова включит две опции --no-*, упомянутые выше.)
Сохранение бита setgid назначения для вновь созданных каталогов при отключённом --perms было добавлено в rsync 2.6.7. Более старые версии rsync ошибочно сохраняли три специальных бита разрешений для вновь созданных файлов при отключённом --perms, переопределяя настройку бита setgid назначения для вновь созданного каталога. Соблюдение ACL по умолчанию было добавлено в исправление ACL для rsync 2.6.7, поэтому более старые (или не поддерживающие ACL) rsync используют umask, даже если присутствуют списки ACL по умолчанию. (Помните, что на это поведение влияет версия принимающего rsync.)
--executability, -E
Этот параметр заставляет rsync сохранять исполняемость (или неисполняемость) обычных файлов, когда --perms не включён. Обычный файл считается исполняемым, если в его разрешениях включён хотя бы один 'x'. Когда исполняемость существующего целевого файла отличается от исполняемости соответствующего исходного файла, rsync изменяет разрешения целевого файла следующим образом:
- Чтобы сделать файл неисполняемым, rsync отключает все его разрешения 'x'.
- Чтобы сделать файл исполняемым, rsync включает каждое разрешение 'x', которому соответствует включённое разрешение 'r'.
Если включён --perms, этот параметр игнорируется.
--acls, -A
Этот параметр заставляет rsync обновлять целевые ACL, чтобы они были такими же, как исходные ACL. Параметр также подразумевает --perms.
Для корректной работы этой опции исходная и целевая системы должны иметь совместимые записи ACL. Смотрите опцию --fake-super для способа резервного копирования и восстановления несовместимых ACL.
--xattrs, -X
Эта опция заставляет rsync обновить расширенные атрибуты назначения, чтобы они были такими же, как исходные.
Для систем, которые поддерживают пространства имён с расширенными атрибутами, копирование, выполняемое суперпользователем, копирует всё пространства имён, кроме system.*. Обычный пользователь копирует только пространство имён user.*. Чтобы иметь возможность резервного копирования и восстановления не пользовательских пространств имён как обычный пользователь, смотрите опцию --fake-super.
Вышеуказанную фильтрацию имён можно переопределить с помощью одного или нескольких параметров фильтра с модификатором x. Когда вы указываете правило фильтра, влияющее на xattr, rsync требует, чтобы вы выполнили собственную фильтрацию системы/пользователя, а также любую дополнительную фильтрацию для того, какие имена xattr копируются и какие имена разрешено удалять. Например, чтобы пропустить системное пространство имён, вы можете указать:
--filter='-x system.*'
Чтобы пропустить всё пространства имён, кроме пространства имён пользователя, можно указать шаблон пользователя с отрицанием:
--filter='-x! user.*'
Чтобы предотвратить удаление любых атрибутов, можно указать правило только для получателя, которое исключает все имена:
--filter='-xr *'
Обратите внимание, что опция -X не копирует специальные значения xattr rsync (например, используемые --fake-super), если только вы не повторите опцию (например, -XX). Этот режим «копировать все xattrs» нельзя использовать с --fake-super.
--chmod=РЕЖИМ_CHMOD
Эта опция указывает rsync применить один или несколько разделённых запятыми режимов «chmod» к разрешению (правам доступа) файлов в передаче. Полученное значение обрабатывается так, как если бы это были разрешения, предоставленные отправляющей стороной для файла, что означает, что эта опция может не иметь никакого эффекта на существующие файлы, если --perms не включён.
В дополнение к обычным правилам анализа, указанным на странице руководства chmod(1), вы можете указать элемент, который должен применяться только к каталогу, добавив к нему префикс 'D', или указать элемент, который должен применяться только к файлу, добавив к нему префикс 'F'. Например, следующее гарантирует, что все каталоги будут помечены как set-gid, что ни один файл не будет доступен для записи другим, что оба будут доступны для записи пользователю и группе, и что оба будут иметь согласованную исполняемость во всех битах:
--chmod=Dg+s,ug+w,Fo-w,+X
Также разрешено использование восьмеричных номеров режима:
--chmod=D2775,F664
Также допустимо указывать несколько параметров --chmod, поскольку каждый дополнительный параметр просто добавляется к списку изменений, которые необходимо внести.
Смотрите параметры --perms и --executability, чтобы узнать, как можно применить результирующее значение разрешения к файлам в передаче.
--owner, -o
Эта опция заставляет rsync устанавливать владельца целевого файла таким же, как и исходный файл, но только если принимающий rsync запускается как суперпользователь (смотрите также опции --super и --fake-super). Без этой опции владельцем новых и/или переданных файлов становится вызывающий пользователь на принимающей стороне.
Сохранение права собственности по умолчанию свяжет соответствующие имена, но в некоторых случаях может вернуться к использованию идентификационного номера (смотрите также опцию --numeric-ids для полного обсуждения).
--group, -g
Эта опция заставляет rsync устанавливать группу целевого файла такой же, как и исходный файл. Если принимающая программа не запущена как суперпользователь (или если был указан параметр --no-super), будут сохранены только группы, в которые входит вызывающий пользователь на принимающей стороне. Без этой опции группа устанавливается на группу по умолчанию вызывающего пользователя на принимающей стороне.
Сохранение информации о группе по умолчанию свяжет совпадающие имена, но в некоторых случаях может использоваться идентификационный номер (смотрите также параметр --numeric-ids для полного обсуждения).
--devices
Этот параметр заставляет rsync передавать файлы символьных и блочных устройств в удалённую систему для повторного создания этих устройств. Если принимающий rsync не запущен как суперпользователь, rsync молча пропускает создание файлов устройств (смотрите также параметры --super и --fake-super).
По умолчанию rsync генерирует предупреждение «нерегулярный файл» для каждого обнаруженного файла устройства, если этот параметр не установлен. Вы можете отключить предупреждение, указав --info=nonreg0.
--specials
Этот параметр заставляет rsync передавать специальные файлы, такие как именованные сокеты и fifo. Если принимающий rsync не запущен как суперпользователь, rsync молча пропускает создание специальных файлов (смотрите также параметры --super и --fake-super).
По умолчанию rsync генерирует предупреждение «нерегулярный файл» для каждого обнаруженного специального файла, если этот параметр не установлен. Вы можете отключить предупреждение, указав --info=nonreg0.
-D
Параметр -D эквивалентен "--devices --specials".
--copy-devices
Это указывает rsync рассматривать устройство на стороне отправителя как обычный файл, что позволяет копировать его в обычный файл назначения (или другое устройство, если также указан параметр --write-devices).
Этот параметр по умолчанию отклоняется демоном rsync.
--write-devices
Это указывает rsync рассматривать устройство на стороне получателя как обычный файл, что позволяет записывать данные файла на устройство.
Этот параметр подразумевает параметр --inplace.
Будьте осторожны, используя его, так как вы должны знать, какие устройства присутствуют на стороне получателя передачи, особенно при запуске rsync от имени root.
Этот параметр по умолчанию отклоняется демоном rsync.
--times, -t
Это указывает rsync передавать время модификации вместе с файлами и обновлять их на удалённой системе. Обратите внимание, что если этот параметр не используется, оптимизация, исключающая файлы, которые не были изменены, не может быть эффективной. Другими словами, отсутствие -t (или -a) приведёт к тому, что следующая передача будет вести себя так, как будто она использовала --ignore-times (-I), что приведёт к обновлению всех файлов (хотя алгоритм дельта-передачи rsync сделает обновление довольно эффективным, если файлы на самом деле не изменились, вам гораздо лучше использовать -t).
Современный rsync, использующий протокол передачи 30 или 31, передаёт время изменения, используя до 8 байтов. Если rsync вынужден использовать старый протокол (возможно, из-за того, что удалённый rsync старше 3.0.0), время изменения передаётся с помощью 4 байтов. До версии 3.2.7 эти более короткие значения могли передавать диапазон дат от 13 декабря 1901 г. до 19 января 2038 г. Начиная с версии 3.2.7 эти 4-байтовые значения теперь передают диапазон дат от 1 января 1970 г. до 7 февраля 2106 г. Если у вас есть файлы, датированные более 1970 годом, убедитесь, что исполняемые файлы rsync обновлены, чтобы можно было передать весь диапазон дат.
--atimes, -U
Это указывает rsync на необходимость установки времени доступа (использования) целевых файлов на то же значение, что и у исходных файлов.
При повторении также устанавливается параметр --open-noatime, который может помочь вам сделать так, чтобы отправляющая и принимающая системы имели одинаковое время доступа к переданным файлам без необходимости запускать rsync дополнительно после передачи файла.
Обратите внимание, что некоторые старые версии rsync (до 3.2.0) могли быть собраны с предварительным патчем --atimes, который не подразумевает --open-noatime при повторном использовании этого параметра.
--open-noatime
Это указывает rsync на необходимость открывать файлы с флагом O_NOATIME (в системах, которые его поддерживают), чтобы избежать изменения времени доступа к передаваемым файлам. Если ваша ОС не поддерживает флаг O_NOATIME, то rsync будет молча игнорировать этот параметр. Обратите внимание также, что некоторые файловые системы монтируются так, чтобы не обновлять atime при доступе на чтение даже без установки флага O_NOATIME.
--crtimes, -N,
Это указывает rsync на необходимость установки времени создания (новости) целевых файлов на то же значение, что и у исходных файлов. Ваша ОС и файловая система должны поддерживать установку произвольного времени создания (рождения), чтобы эта опция поддерживалась.
--omit-dir-times, -O
Это указывает rsync на необходимость пропускать каталоги при сохранении времени изменения, доступа и создания. Если NFS совместно использует каталоги на принимающей стороне, рекомендуется использовать -O. Этот параметр подразумевается, если вы используете --backup без --backup-dir.
Этот параметр также имеет побочный эффект, заключающийся в избежании раннего создания отсутствующих подкаталогов при включённой инкрементной рекурсии, как обсуждалось в разделе --inc-recursive.
--omit-link-times, -J
Это указывает rsync на необходимость пропускать символические ссылки при сохранении времени изменения, доступа и создания.
--super
Это сообщает принимающей стороне о необходимости попытаться выполнить действия суперпользователя, даже если принимающий rsync не был запущен суперпользователем. К этим действиям относятся: сохранение пользователей с помощью параметра --owner, сохранение всех групп (не только групп текущего пользователя) с помощью параметра --group и копирование устройств с помощью параметра --devices. Это полезно для систем, которые допускают такие действия без прав суперпользователя, а также для обеспечения того, чтобы вы получили ошибки, если принимающая сторона не запущена как суперпользователь. Чтобы отключить действия суперпользователя, суперпользователь может использовать --no-super.
--fake-super
Когда этот параметр включён, rsync имитирует действия суперпользователя, сохраняя/восстанавливая привилегированные атрибуты с помощью специальных расширенных атрибутов, которые прикрепляются к каждому файлу (по мере необходимости). Сюда входит владелец файла и группа (если это не по умолчанию), информация об устройстве файла (устройства и специальные файлы создаются как пустые текстовые файлы) и любые биты разрешений, которые мы не позволим устанавливать для реального файла (например, реальный файл получает u-s,g-s,o-t для безопасности) или которые ограничат доступ владельца (поскольку настоящий суперпользователь всегда может получить доступ к файлу или изменить его, создавший его пользователь всегда может получить доступ к файлам или изменить их). Эта опция также обрабатывает списки управления доступом (если был указан --acls) и непользовательские расширенные атрибуты (если был указан --xattrs).
Это хороший способ резервного копирования данных без использования суперпользователя и сохранения списков управления доступом из несовместимых систем.
Опция --fake-super влияет только на ту сторону, где она используется. Чтобы повлиять на удалённую сторону подключения к удалённой оболочке, используйте опцию --remote-option (-M):
rsync -av -M--fake-super /src/ host:/dest/
Для локальной копии эта опция влияет как на источник, так и на место назначения. Если вы хотите, чтобы локальная копия включила эту опцию только для файлов назначения, укажите -M--fake-super. Если вы хотите, чтобы локальная копия включила эту опцию только для исходных файлов, объедините --fake-super с -M--super.
Эта опция переопределяется как --super, так и --no-super.
Смотрите также настройку fake super в файле rsyncd.conf (/etc/rsyncd.conf) демона.
--sparse, -S
Стараться эффективно обрабатывать разреженные файлы, чтобы они занимали меньше места в месте назначения. Если объединить с --inplace, с некоторыми комбинациями версии ядра и/или типа файловой системы созданный файл может не содержать разреженные блоки. Если действует --whole-file (например, для локальной копии), то это всегда будет работать, потому что rsync обрезает файл перед записью обновлённой версии.
Обратите внимание, что версии rsync старше 3.1.3 отклонят комбинацию --sparse и --inplace.
--preallocate
Это сообщает получателю о необходимости выделить каждому файлу назначения его конечный размер перед записью данных в файл. Rsync будет использовать только реальную поддержку предварительного выделения на уровне файловой системы, предоставляемую системным вызовом Linux fallocate(2) или posix_fallocate(3) Cygwin, а не медленную реализацию glibc, которая записывает нулевой байт в каждый блок.
Без этой опции большие файлы могут быть не полностью непрерывными в файловой системе, но с этой опцией rsync, вероятно, будет копировать медленнее. Если местом назначения не является файловая система с поддержкой экстентов (например, ext4, xfs, NTFS и т. д.), эта опция может вообще не иметь положительного эффекта.
В сочетании с --sparse файл будет иметь только разреженные блоки (в отличие от выделенных последовательностей нулевых байтов), если версия ядра и тип файловой системы поддерживают создание дыр в выделенных данных.
--dry-run, -n
Это заставляет rsync выполнить пробный запуск, который не вносит никаких изменений (и выдаёт в основном тот же вывод, что и реальный запуск). Чаще всего он используется в сочетании с параметрами --verbose (-v) и/или --itemize-changes (-i), чтобы увидеть, что команда rsync собирается сделать, прежде чем её фактически запустить.
Вывод --itemize-changes должен быть абсолютно одинаковым при пробном запуске и последующем реальном запуске (за исключением преднамеренных уловок и сбоёв системных вызовов); если это не так, это ошибка. Другие выходные данные должны быть в основном неизменными, но могут отличаться в некоторых областях. В частности, пробный запуск не отправляет фактические данные для передачи файлов, поэтому --progress не оказывает никакого эффекта, статистика «отправлено байтов», «получено байтов», «литеральные данные» и «совпадающие данные» слишком мала, а значение «ускорения» эквивалентно запуску, в котором не требовалось передачи файлов.
--whole-file, -W
Эта опция отключает алгоритм дельта-передачи rsync, что в свою очередь заставляет все передаваемые файлы отправляться целиком. Передача может быть быстрее, если эта опция используется, когда пропускная способность между исходной и целевой машинами выше, чем пропускная способность к диску (особенно когда «диск» на самом деле является сетевой файловой системой). Это значение по умолчанию, когда и источник, и назначение указаны как локальные пути, но только если не действует параметр пакетной записи.
--no-whole-file, --no-W
Отключить обновление файлов целиком, когда оно включено по умолчанию для локальной передачи. Обычно это замедляет rsync, но может быть полезно, если вы пытаетесь минимизировать запись в целевой файл (если сочетается с --inplace) или для тестирования алгоритма обновления на основе контрольной суммы.
Смотрите также параметр --whole-file.
--checksum-choice=СТРОКА, --cc=СТРОКА
Эта опция переопределяет алгоритмы контрольной суммы. Если указано одно имя алгоритма, оно используется как для контрольных сумм передачи, так и (при условии, что указано --checksum) для контрольных сумм до передачи. Если указаны два имени, разделённых запятыми, первое имя влияет на контрольные суммы передачи, а второе имя влияет на контрольные суммы до передачи (-c).
Параметры контрольной суммы, которые вы можете использовать:
- auto (автоматический выбор по умолчанию)
- xxh128
- xxh3
- xxh64 (aka xxhash)
- md5
- md4
- sha1
- none
Запустите rsync --version, чтобы увидеть список контрольных сумм по умолчанию, скомпилированный в вашей версии (который может отличаться от списка выше).
Если для первого (или единственного) имени указано «none», опция --whole-file принудительно включается, и проверка контрольной суммы для переданных данных не выполняется. Если для второго (или единственного) имени указано «none», опция --checksum не может быть использована.
Параметр «auto» является значением по умолчанию, при котором rsync основывает свой выбор алгоритма на согласовании между клиентом и сервером следующим образом:
Если обе стороны передачи имеют версию не ниже 3.2.0, rsync выбирает первый алгоритм в списке выбора клиента, который также есть в списке выбора сервера. Если не найдено общего выбора контрольной суммы, rsync завершает работу с ошибкой. Если удалённый rsync слишком стар для поддержки согласования контрольной суммы, значение выбирается на основе версии протокола (которая выбирает между MD5 и различными разновидностями MD4 на основе возраста протокола).
Порядок по умолчанию можно настроить, установив переменную окружения RSYNC_CHECKSUM_LIST в список допустимых имён контрольных сумм, разделённых пробелами. Если строка содержит символ «&», она разделяется на «строку клиента и строку сервера», в противном случае одна и та же строка применяется к обеим сторонам. Если строка (или её часть) не содержит непробельных символов, используется список контрольных сумм по умолчанию. Этот метод не позволяет вам указывать контрольную сумму передачи отдельно от контрольной суммы до передачи, и он отбрасывает «auto» и все неизвестные имена контрольных сумм. Список, содержащий только недопустимые имена, приводит к неудачному согласованию.
Использование параметра --checksum-choice переопределяет этот список окружения.
--one-file-system, -x
Это сообщает rsync о необходимости избегать пересечения границы файловой системы при рекурсии. Это не ограничивает возможности пользователя указывать элементы для копирования из нескольких файловых систем, только рекурсию rsync по иерархии каждого каталога, указанного пользователем, а также аналогичную рекурсию на принимающей стороне во время удаления. Также имейте в виду, что rsync рассматривает монтирование «bind» к тому же устройству как находящееся в той же файловой системе.
Если эта опция повторяется, rsync исключает все каталоги точек монтирования из копии. В противном случае он включает пустой каталог в каждую точку монтирования, с которой сталкивается (используя атрибуты смонтированного каталога, поскольку атрибуты базового каталога точки монтирования недоступны).
Если rsync было сказано свернуть символические ссылки (через --copy-links или --copy-unsafe-links), символическая ссылка на каталог на другом устройстве обрабатывается как точка монтирования. Символические ссылки на не-каталоги не затрагиваются этой опцией.
--ignore-non-existing, --existing
Это говорит rsync пропустить создание файлов (включая каталоги), которые ещё не существуют в месте назначения. Если этот параметр объединён с параметром --ignore-existing, файлы не будут обновлены (что может быть полезно, если всё, что вам нужно сделать, это удалить лишние файлы).
Этот параметр является «Правилом передачи», поэтому не ожидайте никаких побочных эффектов исключения.
--ignore-existing
Это говорит rsync пропустить обновление файлов, которые уже существуют в месте назначения (это не игнорирует существующие каталоги, иначе ничего бы не было сделано). Смотрите также --ignore-non-existing.
Этот параметр является «Правилом передачи», поэтому не ожидайте никаких побочных эффектов исключения.
Этот параметр может быть полезен для тех, кто делает резервное копирование с помощью параметра --link-dest, когда им нужно продолжить прерванный запуск резервного копирования. Поскольку запуск --link-dest копируется в новую иерархию каталогов (при правильном использовании), использование --ignore-existing гарантирует, что уже обработанные файлы не будут изменены (что позволяет избежать изменения разрешений для жёстко связанных файлов). Это означает, что эта опция просматривает только существующие файлы в самой иерархии назначения.
При использовании --info=skip2 программа rsync выведет сообщения «FILENAME exist (INFO)», где INFO указывает на одно из «type change», «sum change» (требуется -c), «file change» (на основе быстрой проверки), «attr change» или «uptodate». Использование --info=skip1 (которое также подразумевается двумя опциями -v) выводит сообщение exist без суффикса INFO.
--remove-source-files
Это говорит rsync удалить с отправляющей стороны файлы (имеются в виду некаталоги), которые являются частью передачи и были успешно продублированы на принимающей стороне.
Обратите внимание, что вы должны использовать эту опцию только для файлов на ИСТОЧНИКЕ, которые находятся в состоянии покоя. Если вы используете это для перемещения на другой хост файлов в которые в данный момент выполняется запись, то выполните это следующим образом: сначала создаются новые файлы с другим именем, а затем они переименовываются, заменяя файл. Это сможет гарантировать, что rsync не будет передавать не полностью записанный файл. Если вы не можете сначала записать файлы в другой каталог, вы должны использовать идиому именования, которая позволяет rsync избегать передачи файлов, которые ещё не завершены (например, назвать файл «foo.new» при записи, переименовать его в «foo» по завершении, а затем использовать опцию --exclude='*.new' для передачи rsync).
Начиная с версии 3.1.0, rsync пропускает удаление на стороне отправителя (и выводит ошибку), если размер файла или время изменения не остались неизменными.
Начиная с версии 3.2.6, локальное копирование rsync гарантирует, что отправитель не удалит файл, который только что проверил получатель, например, если пользователь случайно сделает исходный и целевой каталоги одинаковыми.
--delete
Это сообщает rsync об удалении посторонних файлов с принимающей стороны (тех, которые не находятся на отправляющей стороне), но только для синхронизируемых каталогов. Вы должны были попросить rsync отправить весь каталог (например, "dir" или "dir/") без использования подстановочного знака для содержимого каталога (например, "dir/*"), поскольку подстановочный знак раскрывается оболочкой, и rsync, таким образом, получает запрос на передачу отдельных файлов, а не родительского каталога файлов. Файлы, исключённые из передачи, также исключаются из удаления, если вы не используете параметр --delete-excluded или не отмечаете правила как соответствующие только на отправляющей стороне (смотрите модификаторы include/exclude в разделе «Правила фильтрации в rsync»).
До rsync 2.6.7 этот параметр не имел никакого эффекта, если только не был включён параметр --recursive. Начиная с версии 2.6.7, удаления также будут происходить при включении --dirs (-d), но только для каталогов, содержимое которых копируется.
Этот параметр может быть опасным при неправильном использовании! Очень хорошая идея сначала попробовать запустить с использованием параметра --dry-run (-n), чтобы увидеть, какие файлы будут удалены.
Если отправляющая сторона обнаруживает какие-либо ошибки ввода-вывода, то удаление любых файлов в месте назначения будет автоматически отключено. Это необходимо для предотвращения временных сбоёв файловой системы (таких как ошибки NFS) на отправляющей стороне, приводящих к массовому удалению файлов в месте назначения. Вы можете переопределить это с помощью параметра --ignore-errors.
Параметр --delete можно комбинировать с одним из параметров --delete-КОГДА без конфликта, а также с --delete-excluded. Однако, если не указан ни один из параметров --delete-КОГДА, rsync выберет алгоритм --delete-during при обращении к rsync 3.0.0 или более новой версии или алгоритм --delete-before при обращении к более старой версии rsync. Смотрите также --delete-delay и --delete-after.
--delete-before
Запросить, чтобы удаление файлов на принимающей стороне было выполнено до начала передачи. Смотрите --delete (который подразумевается) для получения более подробной информации об удалении файлов.
Удаление перед передачей полезно, если файловая система ограничена по пространству, и удаление посторонних файлов помогло бы сделать передачу возможной. Однако это вносит задержку перед началом передачи, и эта задержка может привести к тайм-ауту передачи (если был указан --timeout). Это также заставляет rsync использовать старый, неинкрементный алгоритм рекурсии, который требует от rsync одновременного сканирования всех файлов при передаче в память (смотрите --recursive).
--delete-during, --del
Запросить, чтобы удаления файлов на принимающей стороне выполнялись постепенно по мере передачи. Сканирование удаления по каталогам выполняется непосредственно перед проверкой обновлений каждого каталога, поэтому оно ведёт себя как более эффективное --delete-before, включая выполнение удалений до обновления любых файлов фильтров по каталогам. Эта опция была впервые добавлена в rsync версии 2.6.4. Смотрите --delete (что подразумевается) для получения более подробной информации об удалении файлов.
--delete-delay
Запросить, чтобы удаления файлов на принимающей стороне вычислялись во время передачи (как --delete-during), а затем удалялись после завершения передачи. Это полезно в сочетании с --delay-updates и/или --fuzzy, и более эффективно, чем использование --delete-after (но может вести себя иначе, поскольку --delete-after вычисляет удаления в отдельном проходе после выполнения всех обновлений). Если количество удалённых файлов переполняет внутренний буфер, на принимающей стороне будет создан временный файл для хранения имён (он удаляется, пока открыт, поэтому вы не должны его видеть во время передачи). Если создание временного файла не удаётся, rsync попытается вернуться к использованию --delete-after (что невозможно, если --recursive выполняет инкрементальное сканирование). Смотрите --delete (эта опция подразумевается) для получения более подробной информации об удалении файлов.
--delete-after
Запросить, чтобы удаление файлов на принимающей стороне было выполнено после завершения передачи. Это полезно, если вы отправляете новые файлы слияния для каждого каталога как часть передачи и хотите, чтобы их исключения вступили в силу для фазы удаления текущей передачи. Это также заставляет rsync использовать старый, неинкрементальный алгоритм рекурсии, который требует, чтобы rsync сканировал все файлы в передаче в память одновременно (смотрите --recursive). Смотрите опцию --delete (которая подразумевается) для получения более подробной информации об удалении файлов.
Смотрите также параметр --delete-delay, который может оказаться более быстрым выбором для тех, кто хочет, чтобы удаления происходили только в конце передачи.
--delete-excluded
Эта опция превращает любые неквалифицированные правила исключения/включения в правила на стороне сервера, которые не влияют на удаления на получателе.
По умолчанию исключение или включение имеет как эффект на стороне сервера (чтобы «скрыть» и «показать» файлы при построении списка файлов сервера), так и эффект на стороне получателя (чтобы «защитить» и «рисковать» файлами при удалении). Любое правило, у которого нет модификатора, указывающего, на каких сторонах оно выполняется, будет вместо этого рассматриваться как правило только на стороне сервера, избегая любых «защитных» эффектов правил.
Правило всё ещё может применяться к обеим сторонам даже с указанной этой опцией, если правилу заданы как буквы-модификаторы отправителя, так и получателя (например, -f'-sr foo'). Правила защиты/риска на стороне получателя также могут быть явно указаны для ограничения удалений. Это избавит вас от необходимости редактировать кучу правил -f'- foo' в правилах -f'-s foo' (они же -f'H foo') (не говоря уже о соответствующих включениях).
Смотрите раздел «Правила фильтрации в rsync» для получения дополнительной информации. Смотрите опцию --delete (которая подразумевается) для получения дополнительной информации об удалении.
--ignore-missing-args
Когда rsync первыми обрабатывает явно запрошенные файлы на ИСТОЧНИКЕ (например, из аргументов командной строки или пункты --files-from), обычно возникает ошибка, если файл не может быть найден. Эта опция подавляет эту ошибку и не пытается передать файл. Это не влияет на последующие ошибки исчезнувшего файла, если файл изначально был обнаружен как существующий, а затем его больше нет.
--delete-missing-args
Эта опция на шаг дальше продвигает поведение (подразумеваемой) опции --ignore-missing-args: каждый отсутствующий аргумент станет запросом на удаление соответствующего целевого файла на принимающей стороне (если он существует). Если конечный файл – непустой каталог, он будет успешно удалён только в том случае, если действуют --force или --delete. В остальном этот параметр не зависит от любого другого типа обработки удаления.
Отсутствующие исходные файлы представлены специальными записями списка файлов, которые отображаются как запись «*missing» в выводе --list-only.
--ignore-errors
Сообщает --delete продолжать и удалять файлы даже при наличии ошибок ввода-вывода.
--force
Этот параметр сообщает rsync о необходимости удаления непустого каталога, когда он должен быть заменён некаталогом. Это актуально только в том случае, если удаления неактивны (смотрите --delete для получения подробной информации).
Примечание для старых версий rsync: --force всё ещё требовалось при использовании --delete-after, и он был нефункционален, если также не была включена опция --recursive.
--max-delete=ЧИСЛА
Это сообщает rsync не удалять более ЧИСЛА файлов или каталогов. Если этот лимит превышен, все дальнейшие удаления пропускаются до конца передачи. В конце rsync выводит предупреждение (включая количество пропущенных удалений) и завершает работу с кодом ошибки 25 (если только не произошло какое-либо более важное условие ошибки).
Начиная с версии 3.0.0, вы можете указать --max-delete=0, чтобы получать предупреждения о любых посторонних файлах в месте назначения, не удаляя ни один из них. Более старые клиенты интерпретировали это как «неограниченно», поэтому, если вы не знаете, какая версия клиента, вы можете использовать менее очевидный --max-delete=-1 как обратно совместимый способ указать, что удаления не допускаются (хотя на самом деле старые версии не предупреждали при превышении лимита).
--max-size=РАЗМЕР
Это сообщает rsync, что не следует передавать файлы, размер которых больше указанного РАЗМЕРА. Числовое значение может быть дополнено строкой для указания числовых единиц или оставлено без указания байтов. Вы можете свободно использовать дробное значение вместе с единицами, например, --max-size=1.5m.
Эта опция является «Правилом передачи», поэтому не ожидайте никаких побочных эффектов исключения.
Первая буква строки единиц может быть B (байты), K (кило), M (мега), G (гига), T (тера) или P (пета). Если строка представляет собой один символ или к ней добавлено "ib" (например, "G" или "GiB"), то единицы измерения кратны 1024. Если вы используете двухбуквенный суффикс, заканчивающийся на "B" (например, "kb"), то вы получите единицы измерения, кратные 1000. Буквы строки могут быть любой комбинацией верхнего и нижнего регистра, которую вы хотите использовать.
Наконец, если строка заканчивается на «+1» или «-1», она смещается на один байт в указанном направлении. Максимально возможное значение обычно составляет 8192P-1.
Примеры: --max-size=1.5mb-1 составляет 1499999 байт, а --max-size=2g+1 составляет 2147483649 байт.
Обратите внимание, что версии rsync до 3.1.0 не допускали --max-size=0.
--min-size=РАЗМЕР
Это говорит rsync избегать передачи любых файлов, которые меньше указанного РАЗМЕРА, что может помочь не передавать мелкие, ненужные файлы. Смотрите параметр --max-size для описания РАЗМЕРА и другой информации.
Обратите внимание, что версии rsync до 3.1.0 не допускали --min-size=0.
--max-alloc=РАЗМЕР
По умолчанию rsync ограничивает размер отдельного malloc/realloc примерно 1 ГБ. Для большинства людей этот предел работает нормально и предотвращает ошибку протокола, из-за которой rsync запрашивает огромные объёмы памяти. Однако, если у вас много миллионов файлов в передаче, большой объем памяти сервера и вы не хотите разбивать передачу на несколько частей, вы можете увеличить предел для выделения памяти до большего значения, и rsync будет потреблять больше памяти.
Помните, что это не ограничение на общий размер выделенной памяти. Это контрольное значение для каждого отдельного выделения.
Описание того, как можно указать РАЗМЕР, смотрите в параметре --max-size. Суффикс по умолчанию, если ничего не указано, — байты.
Начиная с версии 3.2.7, значение 0 — это простой способ указать SIZE_MAX (максимально возможный предел).
Вы можете задать значение по умолчанию с помощью переменной окружения RSYNC_MAX_ALLOC, используя те же значения РАЗМЕРА, которые поддерживаются этим параметром. Если удалённый rsync не понимает параметр --max-alloc, вы можете переопределить значение окружения, указав --max-alloc=1g, что заставит rsync избегать отправки параметра на удалённую сторону (потому что по умолчанию используется "1G").
--block-size=РАЗМЕР, -B
Это принудительно устанавливает размер блока, используемый в алгоритме дельта-передачи rsync, на фиксированное значение. Обычно он выбирается на основе размера каждого обновляемого файла. Подробности смотрите в техническом отчёте.
Начиная с версии 3.2.3 РАЗМЕР может быть указан с суффиксом, как описано в опции --max-size. Более старые версии принимали только количество байтов.
--rsh=КОМАНДА, -e
Эта опция позволяет выбрать альтернативную удалённую программу оболочки для использования для связи между локальной и удалённой копиями rsync. Обычно rsync настроен на использование ssh по умолчанию, но вы можете предпочесть использовать rsh в локальной сети.
Если эта опция используется с [ПОЛЬЗОВАТЕЛЬ@]ХОСТ::МОДУЛЬ/ПУТЬ, то удалённая КОМАНДА оболочки будет использоваться для запуска демона rsync на удалённом хосте, и все данные будут передаваться через это удалённое соединение оболочки, а не через прямое сокетное соединение к работающему демону rsync на удалённом хосте. Смотрите раздел «Использование функций rsync демона (службы) через подключение удалённой оболочки» выше.
Начиная с rsync 3.2.0, переменная среды RSYNC_PORT будет установлена, когда соединение демона выполняется через соединение remote-shell. Он устанавливается в 0, если предполагается порт демона по умолчанию, или он устанавливается в значение порта rsync, которое было указано либо с помощью параметра --port, либо непустого значения порта в URL-адресе rsync://. Это позволяет скрипту распознавать, запрашивается ли нестандартный порт, что позволяет таким вещам, как SSL или вспомогательный скрипт stunnel, подключаться к порту по умолчанию или альтернативному порту.
Аргументы командной строки разрешены в КОМАНДЕ при условии, что КОМАНДА представлена rsync как один аргумент. Вы должны использовать пробелы (не табуляции или другие белые пробелы) для разделения команды и аргументов друг от друга, и вы можете использовать одинарные и/или двойные кавычки для сохранения пробелов в аргументе (но не обратные слеши). Обратите внимание, что вы можете использовать одинарные кавычки внутри строки помещённой в двойные кавычки, или наоборот — вы можете использовать двойные кавычки внутри строки, помещённой в одинарные кавычки (хотя вам нужно обратить внимание на то, какие кавычки анализирует ваша оболочка, а какие кавычки анализирует rsync).
Вот несколько примеров:
-e 'ssh -p 2234' -e 'ssh -o "ProxyCommand nohup ssh firewall nc -w1 %h %p"'
(Обратите внимание, что пользователи ssh могут поочередно настраивать параметры подключения, специфичные для сайта, в своих файлах .ssh/config.)
Вы также можете выбрать удалённую программу оболочки с помощью переменной среды RSYNC_RSH, которая принимает тот же диапазон значений, что и -e.
Смотрите также параметр --blocking-io, на который влияет этот параметр.
--rsync-path=ПРОГРАММА
Используйте эту опцию, чтобы указать, какая программа должна быть запущена на удалённой машине для запуска rsync. Часто используется, когда rsync не находится в пути удалённой оболочки по умолчанию (например, --rsync-path=/usr/local/bin/rsync). Обратите внимание, что ПРОГРАММА запускается с помощью оболочки, поэтому это может быть любая программа, скрипт или последовательность команд, которые вы захотите запустить, если они ничего не отправляют в стандартный ввод и стандартный вывод, которые rsync использует для связи.
Один сложный пример — установить другой каталог по умолчанию на удалённой машине для использования с опцией --relative. Например:
rsync -avR --rsync-path="cd /a/b && rsync" host:c/d /e/
--remote-option=УДАЛЁННЫЕ_ОПЦИИ, -M
Этот параметр используется для более сложных ситуаций, когда вы хотите, чтобы определённые эффекты были ограничены только одной стороной передачи. Например, если вы хотите передать --log-file=ФАЙЛ и --fake-super удалённой системе, укажите это следующим образом:
rsync -av -M --log-file=foo -M--fake-super src/ dest/
Если вы хотите, чтобы параметр влиял только на локальную сторону передачи, когда он обычно влияет на обе стороны, отправьте его отрицание на удалённую сторону. Например:
rsync -av -x -M--no-x src/ dest/
Будьте осторожны, используя это, так как можно переключить параметр, который заставит rsync иметь другое представление о том, какие данные ожидать следующими через сокет, и это приведёт к его сбою в неявном виде.
Обратите внимание, что вы должны использовать отдельный параметр -M для каждого удалённого параметра, который вы хотите передать. В старых версиях rsync наличие пробелов в аргументе УДАЛЁННЫЕ_ОПЦИИ может привести к его разделению на отдельные удалённые аргументы, но для этого требуется использование --old-args в современном rsync.
При выполнении локальной передачи «локальная» сторона является отправителем, а «удалённая» сторона — получателем.
Обратите внимание, что в некоторых версиях библиотеки анализа параметров popt есть ошибка, которая не позволяет использовать смежный аргумент с равным рядом с короткой буквой параметра (например, -M--log-file=/tmp/foo). Если эта ошибка затрагивает вашу версию popt, вы можете использовать версию popt, включённую в rsync.
--cvs-exclude, -C
Это полезное сокращение для исключения широкого спектра файлов, которые вы часто не хотите передавать между системами. Он использует алгоритм, аналогичный CVS (Concurrent Versions System), чтобы определить, следует ли игнорировать файл.
Список исключений инициализируется для исключения следующих пунктов (эти исходные элементы помечены как perishable (скоропортящиеся) — смотрите раздел «Правила фильтрации в rsync»):
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/ .git/ .hg/ .bzr/
затем файлы, перечисленные в $HOME/.cvsignore, добавляются в этот список и любые файлы, перечисленные в переменной среды CVSIGNORE (все имена cvsignore разделены пробелами).
Наконец, любой файл игнорируется, если он находится в том же каталоге, что и файл .cvsignore, и соответствует одному из шаблонов, перечисленных в нём. В отличие от файлов фильтров/исключений rsync, эти шаблоны разделены по пробелам. Смотрите руководство cvs(1) для получения дополнительной информации.
Если вы объединяете -C со своими собственными правилами --filter, вы должны отметить, что эти исключения CVS добавляются в конце ваших собственных правил, независимо от того, где -C было размещено в командной строке. Это делает их более низкими по приоритету, чем любые правила, указанные вами явно. Если вы хотите контролировать, где эти исключения CVS будут вставлены в ваши правила фильтрации, вам следует опустить -C как параметр командной строки и использовать комбинацию --filter=:C и --filter=-C (либо в вашей командной строке, либо поместив правила ":C" и "-C" в файл фильтра с другими вашими правилами). Первый параметр включает сканирование по каталогам для файла .cvsignore. Второй параметр выполняет однократный импорт исключений CVS, упомянутых выше.
--filter=ПРАВИЛО, -f
Этот параметр позволяет вам добавлять правила для выборочного исключения определённых файлов из списка файлов для передачи. Это наиболее полезно в сочетании с рекурсивной передачей.
Вы можете использовать столько параметров --filter в командной строке, сколько захотите, чтобы составить список файлов для исключения. Если фильтр содержит пробелы, обязательно заключите его в кавычки, чтобы оболочка передала правило rsync в качестве одного аргумента. В тексте ниже также упоминается, что вы можете использовать подчёркивание для замены пробела, который отделяет правило от его аргумента.
Подробную информацию об этой опции смотрите в разделе «Правила фильтрации в rsync».
-F
Опция -F — это сокращение для добавления двух правил --filter к вашей команде. При первом использовании это сокращение для этого правила:
--filter='dir-merge /.rsync-filter'
Это указывает rsync искать файлы .rsync-filter для каждого каталога, которые были разбросаны по иерархии, и использовать их правила для фильтрации файлов в передаче. Если -F повторяется, это сокращение для этого правила:
--filter='exclude .rsync-filter'
Это отфильтровывает сами файлы .rsync-filter из передачи.
Подробную информацию о том, как работают эти параметры, смотрите в разделе «Правила фильтрации в rsync».
--exclude=ШАБЛОН
Этот параметр является упрощённой формой параметра --filter, который задаёт правило исключения и не допускает полный синтаксис анализа правил обычных правил фильтрации. Это эквивалентно указанию -f'- ШАБЛОН'.
Подробную информацию об этой опции смотрите в разделе «Правила фильтрации в rsync».
--exclude-from=ФАЙЛ
Этот параметр связан с параметром --exclude, но он задаёт ФАЙЛ, содержащий шаблоны исключения (по одному на строку). Пустые строки в файле игнорируются, как и комментарии в целые строки, начинающиеся с «;» или «#» (правила имён файлов, содержащие эти символы, не затрагиваются).
Если строка начинается с «- » (тире, пробел) или «+ » (плюс, пробел), то тип правила явно указывается как исключение или включение (соответственно). Любые правила без такого префикса считаются исключаемыми.
Если строка состоит только из «!», то текущие правила фильтрации очищаются перед добавлением любых дополнительных правил.
Если ФАЙЛ равен «-», список будет считан из стандартного ввода.
--include=ШАБЛОН
Эта опция является упрощённой формой опции --filter, которая указывает правило включения и не допускает полный синтаксис разбора правил обычных правил фильтрации. Это эквивалентно указанию -f'+ ШАБЛОН'.
Подробную информацию об этой опции смотрите в разделе «Правила фильтрации в rsync».
--include-from=ФАЙЛ
Эта опция связана с опцией --include, но она указывает ФАЙЛ, содержащий шаблоны включения (по одному на строку). Пустые строки в файле игнорируются, как и комментарии в целые строки, начинающиеся с «;» или «#» (правила имён файлов, содержащие эти символы, не затрагиваются).
Если строка начинается с «- » (тире, пробел) или «+ » (плюс, пробел), то тип правила явно указан как исключение или включение (соответственно). Любые правила без такого префикса считаются включением.
Если строка состоит только из «!», то текущие правила фильтра очищаются перед добавлением любых дополнительных правил.
Если ФАЙЛ равен «-», список будет считан из стандартного ввода.
--files-from=ФАЙЛ
Использование этой опции позволяет указать точный список файлов для передачи (как считано из указанного ФАЙЛ или «-» для стандартного ввода). Она также изменяет поведение rsync по умолчанию, чтобы упростить передачу только указанных файлов и каталогов:
- Подразумевается опция --relative (-R), которая сохраняет информацию о пути, указанную для каждого элемента в файле (используйте --no-relative или --no-R, если вы хотите отключить её).
- Подразумевается опция --dirs (-d), которая создаст каталоги, указанные в списке, на месте назначения, а не будет их шумно пропускать (используйте --no-dirs или --no-d, если хотите отключить её).
- Поведение опции --archive (-a) не подразумевает --recursive (-r), поэтому укажите её явно, если хотите.
- Эти побочные эффекты изменяют состояние rsync по умолчанию, поэтому положение опции --files-from в командной строке не влияет на то, как анализируются другие опции (например, -a работает одинаково до или после --files-from, как и --no-R и все другие опции).
Все имена файлов, считываемые из ФАЙЛА, относятся к исходному каталогу — все начальные слеши удаляются, и никакие ссылки «..» не могут быть выше исходного каталога. Например, возьмём эту команду:
rsync -a --files-from=/tmp/foo /usr remote:/backup
Если /tmp/foo содержит строку «bin» (или даже «/bin»), каталог /usr/bin будет создан как /backup/bin на удалённом хосте. Если он содержит «bin/» (обратите внимание на завершающий слеш), немедленное содержимое каталога также будет отправлено (без необходимости явного упоминания в файле — такое поведение началось с версии 2.6.4). В обоих случаях, если опция -r была включена, вся иерархия этого каталога также будет передана (имейте в виду, что -r необходимо явно указать с помощью --files-from, поскольку это не подразумевается опцией -a. Также обратите внимание, что эффект опции -r (включённой по умолчанию) заключается в дублировании только информации о пути, считываемой из файла, — она не вызывает дублирования исходного пути (в данном случае /usr).
Кроме того, файл --files-from может быть прочитан с удалённого хоста вместо локального, если вы укажете «host:» перед файлом (хост должен соответствовать одному из концов передачи). В качестве сокращения вы можете указать только префикс «:», что означает «использовать удалённый конец передачи». Например:
rsync -a --files-from=:/path/file-list src:/ /tmp/copy
Это скопирует все файлы, указанные в файле /path/file-list, которые были расположены на «src» удалённого хоста.
Если указаны параметры --iconv и --secluded-args, а имена файлов --files-from отправляются с одного хоста на другой, имена файлов будут переведены из кодировки отправляющего хоста в кодировку принимающего хоста.
ПРИМЕЧАНИЕ: сортировка списка файлов во входных данных --files-from помогает rsync быть более эффективным, так как это позволяет избежать повторного посещения элементов пути, которые являются общими для соседних записей. Если входные данные не сортируются, некоторые элементы пути (подразумеваемые каталоги) могут оказаться просканированными несколько раз, и rsync в конечном итоге удалит их дубликаты после того, как они превратятся в элементы списка файлов.
--from0, -0
Это сообщает rsync, что правила/имена файлов, которые он считывает из файла, заканчиваются нулевым символом («\0»), а не символом NL, CR или CR+LF. Это влияет на --exclude-from, --include-from, --files-from и любые объединённые файлы, указанные в правиле --filter. Он не влияет на --cvs-exclude (так как все имена, считываемые из файла .cvsignore, разделяются по пробелам).
--old-args
Этот параметр сообщает rsync, что не следует пытаться защитить значения аргументов на удалённой стороне от непреднамеренного разделения слов или другой неверной интерпретации. Он также позволяет клиенту обрабатывать пустой аргумент как «.» вместо генерации ошибки.
По умолчанию в современном rsync символы «shell-active», то есть символы, имеющие специальное значение для оболочки (включая пробелы), экранируются обратной косой чертой в аргументах, отправляемых в удалённую оболочку. Подстановочные знаки *, ?, [, & ] не экранируются в аргументах имён файлов (что позволяет им расширяться в несколько имён файлов), при этом они защищены в аргументах параметров, таких как --usermap.
Если у вас есть скрипт, который хочет использовать старое разделение аргументов в своих именах файлов, укажите этот параметр один раз. Если у удалённой оболочки есть проблема с любыми экранированиями обратной косой черты, укажите этот параметр дважды.
Вы также можете управлять этим параметром через переменную окружения RSYNC_OLD_ARGS. Если она имеет значение «1», rsync по умолчанию будет использовать настройку с одним параметром. Если она имеет значение «2» (или больше), rsync по умолчанию будет использовать настройку с повторяющимися параметрами. Если она равна «0», вы получите поведение экранирования по умолчанию. Окружение всегда переопределяется вручную указанными положительными или отрицательными параметрами (отрицательным является --no-old-args).
Обратите внимание, что этот параметр также отключает дополнительную проверку безопасности, добавленную в 3.2.5, которая гарантирует, что удалённый отправитель не включает дополнительные элементы верхнего уровня в список файлов, которые вы не запрашивали. Этот побочный эффект необходим, поскольку мы не можем точно знать, какие имена ожидать, когда удалённая оболочка интерпретирует аргументы.
Этот параметр конфликтует с параметром --secluded-args.
--secluded-args, -s
Эта опция отправляет все имена файлов и большинство опций на удалённый rsync через протокол (а не через командную строку удалённой оболочки), что позволяет удалённой оболочке не изменять их. Подстановочные знаки раскрываются на удалённом хосте rsync, а не оболочкой.
Это похоже на экранирование аргументов по умолчанию обратной косой чертой, которое было добавлено в 3.2.4 (смотрите --old-args), в том смысле, что оно предотвращает такие вещи, как разделение пробелов и нежелательные побочные эффекты специальных символов. Однако у него есть недостатки: он несовместим со старыми версиями rsync (до 3.0.0) и отклоняется ограниченными оболочками, которые хотят иметь возможность проверять все значения опций для безопасности.
Эта опция полезна в тех случаях, когда вам необходимо преобразовать набор символов аргумента для удалённого хоста, если удалённая оболочка несовместима с методом backslash-escpaing по умолчанию или есть какая-то другая причина, по которой вы хотите, чтобы большинство параметров и аргументов обходили командную строку удалённой оболочки.
Если вы объедините эту опцию с --iconv, аргументы, относящиеся к удалённой стороне, будут переведены из локального в удалённый набор символов. Перевод происходит до раскрытия подстановочных знаков. Смотрите также опцию --files-from.
Вы также можете управлять этим параметром с помощью переменной среды RSYNC_PROTECT_ARGS. Если она имеет ненулевое значение, эта настройка будет включена по умолчанию, в противном случае она будет отключена по умолчанию. Любое состояние переопределяется вручную указанной положительной или отрицательной версией этой опции (обратите внимание, что --no-s и --no-secluded-args являются отрицательными версиями). Эта переменная среды также заменяется ненулевым экспортом RSYNC_OLD_ARGS.
Эта опция конфликтует с опцией --old-args.
Эта опция раньше называлась --protect-args (до 3.2.6), и это старое имя всё ещё можно использовать (хотя указание её как -s всегда является самым простым и совместимым выбором).
--trust-sender
Эта опция отключает две дополнительные проверки, которые локальный клиент выполняет в списке файлов, сгенерированном удаленным отправителем. Эту опцию следует использовать только в том случае, если вы уверены, что отправитель не поместит что-либо вредоносное в список файлов (что может быть сделано с помощью изменённого rsync, изменённой оболочки или какой-либо другой подобной манипуляции).
Обычно клиент rsync (начиная с версии 3.2.5) запускает две дополнительные проверки при извлечении файлов из удалённого rsync:
- Он проверяет, что дополнительные элементы аргументов не были добавлены в начало передачи.
- Он проверяет, что ни один из элементов в списке файлов не является именами, которые должны были быть исключены (если были указаны правила фильтрации).
Обратите внимание, что различные параметры могут отключить одну или обе проверки, если параметр мешает проверке. Например:
- Использование файла фильтра для каждого каталога считывает правила фильтрации, о которых знает только сервер, поэтому проверка фильтра отключается.
- Использование параметра --old-args позволяет отправителю манипулировать запрошенными аргументами, поэтому проверка аргументов отключается.
- Чтение списка файлов со стороны сервера означает, что клиент не знает список аргументов, поэтому проверка аргументов отключается.
- Использование параметра --read-batch отключает обе проверки, поскольку содержимое пакетного файла будет проверено при его создании.
Этот параметр может помочь недостаточно мощному клиентскому серверу, если дополнительное сопоставление с шаблоном замедляет работу при большой передаче. Его также можно использовать для обхода неизвестной в настоящее время ошибки в логике проверки для передачи от доверенного отправителя.
При использовании этого параметра рекомендуется указать выделенный целевой каталог, как обсуждалось в разделе «Безопасность при удалённой передачи файлов».
--copy-as=ПОЛЬЗОВАТЕЛЬ[:ГРУППА]
Этот параметр указывает rsync использовать ПОЛЬЗОВАТЕЛЯ и (если указано после двоеточия) ГРУППУ для операций копирования. Это работает только в том случае, если пользователь, запускающий rsync, имеет возможность изменять пользователей. Если группа не указана, то используются группы пользователя по умолчанию.
Этот параметр может помочь снизить риск запуска rsync как root в или из каталога, в котором могут происходить изменения в реальном времени, и вы хотите убедиться, что действия чтения или записи системных файлов на уровне root невозможны. Хотя вы можете также запустить весь rsync как указанный пользователь, иногда вам необходимо использовать учётные данные доступа к хосту на уровне root, поэтому это позволяет rsync отключать root для части операций копирования после установки соединения с удалённой оболочкой или демоном.
Параметр влияет только на одну сторону передачи, если только передача не локальная, в этом случае он влияет на обе стороны. Используйте --remote-option, чтобы повлиять на удалённую сторону, например -M--copy-as=joe. Для локальной передачи файл в директории support с именем lsh (или lsh.sh) предоставляет вспомогательный скрипт local-shell (https://github.com/RsyncProject/rsync/blob/master/support/lsh), который можно использовать для указания host-spec «localhost:» или «lh:» без необходимости настройки удалённых оболочек, что позволяет вам указывать удалённые параметры, которые влияют на сторону передачи, использующую host-spec (а использование имени хоста «lh» позволяет избежать переопределения удалённого каталога в домашний каталог пользователя).
Например, следующий rsync записывает локальные файлы как пользователь «joe»:
sudo rsync -aiv --copy-as=joe host1:backups/joe/ /home/joe/
Это делает все файлы собственностью пользователя «joe», ограничивает группы теми, которые доступны этому пользователю, и делает невозможным для пользователя joe использовать временную эксплуатацию пути, чтобы вызвать изменение файла, на изменение которого у пользователя joe нет прав.
Следующая команда выполняет локальное копирование в каталог «dest/» от имени пользователя «joe» (предполагается, что вы установили support/lsh в каталог в вашем $PATH):
sudo rsync -aive lsh -M--copy-as=joe src/ lh:dest/
--temp-dir=ДИРЕКТОРИЯ, -T
Эта опция указывает rsync использовать ДИРЕКТОРИЮ в качестве временного каталога при создании временных копий файлов, переданных на принимающей стороне. Поведение по умолчанию — создавать каждый временный файл в том же каталоге, что и связанный файл назначения. Начиная с rsync 3.1.1, имена временных файлов внутри указанной ДИРЕКТОРИИ не будут начинаться с дополнительной точки (хотя к ним по-прежнему будет добавлен случайный суффикс).
Эта опция чаще всего используется, когда в принимающем разделе диска недостаточно свободного места для хранения копии самого большого файла в передаче. В этом случае (т. е. когда временный каталог находится на другом разделе диска) rsync не сможет переименовать каждый полученный временный файл поверх связанного файла назначения, а вместо этого должен скопировать его на место. Rsync делает это, копируя файл поверх файла назначения, что означает, что файл назначения будет содержать сеченные данные во время этого копирования. Если бы это не было сделано таким образом (даже если бы целевой файл был сначала удалён, данные локально скопированы во временный файл в целевом каталоге, а затем переименованы на место), старый файл мог бы продолжать занимать место на диске (если бы кто-то его открыл), и, таким образом, на диске могло бы не хватить места для размещения новой версии в то же время.
Если вы используете эту опцию по причинам, отличным от нехватки дискового пространства, вы можете объединить её с опцией --delay-updates, которая гарантирует, что все скопированные файлы будут помещены в подкаталоги в иерархии назначения, ожидая окончания передачи. Если у вас недостаточно места для дублирования всех поступающих файлов в разделе назначения, другой способ сообщить rsync, что вы не слишком обеспокоены дисковым пространством, — использовать опцию --partial-dir с относительным путём; поскольку это сообщает rsync, что можно сохранять копию одного файла в подкаталоге в иерархии назначения, rsync будет использовать частичный (partial) каталог в качестве промежуточной области для переноса скопированного файла, а затем переименует его оттуда. (Указание --partial-dir с абсолютным путём не имеет этого побочного эффекта.)
--fuzzy, -y
Эта опция сообщает rsync, что он должен искать базовый файл для любого отсутствующего целевого файла. Текущий алгоритм ищет в том же каталоге, что и целевой файл, либо файл с идентичным размером и временем изменения, либо файл с похожим именем. Если он найден, rsync использует нечёткий (fuzzy) файл в качестве базового, чтобы попытаться ускорить передачу.
Если опция повторяется, fuzzy сканирование также будет выполнено в любых соответствующих альтернативных целевых каталогах, указанных с помощью --compare-dest, --copy-dest или --link-dest.
Обратите внимание, что использование параметра --delete может привести к удалению любых потенциальных файлов с нечёткими соответствиями, поэтому используйте параметр --delete-after или укажите некоторые исключения имён файлов, если вам нужно предотвратить это.
--compare-dest=ДИРЕКТОРИЯ
Этот параметр указывает rsync использовать ДИРЕКТОРИЮ на целевой машине в качестве дополнительной иерархии для сравнения целевых файлов с выполнением передач (если файлы отсутствуют в целевом каталоге). Если в ДИРЕКТОРИИ найден файл, идентичный файлу отправителя, он НЕ будет передан в целевой каталог. Это полезно для создания разреженной резервной копии только файлов, которые изменились по сравнению с более ранней резервной копией. Этот параметр обычно используется для копирования в пустой (или вновь созданный) каталог.
Начиная с версии 2.6.4, может быть указано несколько каталогов --compare-dest, что заставит rsync искать в списке в указанном порядке для точного соответствия. Если найдено совпадение, которое отличается только атрибутами, создаётся локальная копия и атрибуты обновляются. Если совпадение не найдено, будет выбран базовый файл из одной из ДИРЕКТОРИЙ, чтобы попытаться ускорить передачу.
Если ДИРЕКТОРИЯ это относительный путь, то она относится к целевому каталогу. Смотрите также --copy-dest и --link-dest.
ПРИМЕЧАНИЕ: начиная с версии 3.1.0, rsync удалит файл из непустой целевой иерархии, если в одной из иерархий compare-dest будет найдено точное совпадение (что сделает конечный результат более близким к новой копии).
--copy-dest=ДИРЕКТОРИЯ
Эта опция ведёт себя как --compare-dest, но rsync также скопирует неизмененные файлы, найденные в ДИРЕКТОРИИ, в целевой каталог, используя локальную копию. Это полезно для выполнения передач в новое место назначения, оставляя существующие файлы нетронутыми, а затем выполняя flash-cutover, когда все файлы будут успешно переданы.
Можно указать несколько каталогов --copy-dest, что заставит rsync искать в списке в указанном порядке для неизмененного файла. Если совпадение не найдено, будет выбран базовый файл из одной из ДИРЕКТОРИЙ, чтобы попытаться ускорить передачу.
Если ДИРЕКТОРИЯ это относительный путь, то она относится к целевому каталогу. Смотрите также --compare-dest и --link-dest.
--link-dest=ДИРЕКТОРИЯ
Эта опция ведёт себя как --copy-dest, но неизмененные файлы жёстко связаны из ДИРЕКТОРИИ в целевой каталог. Файлы должны быть идентичны по всем сохраненным атрибутам (например, разрешениям, возможно владение), чтобы файлы были связаны друг с другом. Пример:
rsync -av --link-dest=$PWD/prior_dir host:src_dir/ new_dir/
Если файлы не связываются, дважды проверьте их атрибуты. Также проверьте, не выходят ли некоторые атрибуты за пределы контроля rsync, например, опция монтирования, которая сжимает root до одного пользователя, или монтирует съёмный диск с общим владением (например, опция OS X «Игнорировать владение на этом томе» (“Ignore ownership on this volume”)).
Начиная с версии 2.6.4, может быть предоставлено несколько каталогов --link-dest, что заставит rsync искать список в указанном порядке для точного совпадения (существует ограничение в 20 таких каталогов). Если найдено совпадение, отличающееся только атрибутами, создаётся локальная копия и атрибуты обновляются. Если совпадение не найдено, будет выбран базовый файл из одной из ДИРЕКТОРИЙ, чтобы попытаться ускорить передачу.
Этот параметр лучше всего работает при копировании в пустую иерархию назначения, так как атрибуты существующих файлов могут быть изменены, и это может повлиять на альтернативные файлы назначения через жёсткие ссылки. Кроме того, перечисление изменений может быть немного запутанным. Обратите внимание, что до версии 3.1.0 точное совпадение альтернативного каталога никогда не будет найдено (и не будет связано с назначением), если файл назначения уже существует.
Обратите внимание, что если вы объедините этот параметр с --ignore-times, то rsync не будет связывать никакие файлы вместе, потому что он связывает только идентичные файлы вместе в качестве замены для передачи файла, а не в качестве дополнительной проверки после обновления файла.
Если ДИРЕКТОРИЯ является относительным путём, то она относится к каталогу назначения. Смотрите также --compare-dest и --copy-dest.
Обратите внимание, что версии rsync до 2.6.1 содержали ошибку, которая могла помешать --link-dest работать правильно для не-суперпользователя, когда был указан (или подразумевался) --owner (-o). Вы можете обойти эту ошибку, избегая опции -o (или используя --no-o) при отправке на старый rsync.
--compress, -z
С этой опцией rsync сжимает данные файла при отправке на целевой компьютер, что уменьшает объем передаваемых данных — что полезно при медленном соединении.
Rsync поддерживает несколько методов сжатия и выберет один за вас, если вы не заставите сделать выбор с помощью опции --compress-choice (--zc).
Запустите rsync --version, чтобы увидеть список компрессии по умолчанию, скомпилированный в вашей версии.
Если обе стороны передачи имеют версию не ниже 3.2.0, rsync выбирает первый алгоритм в списке выбора клиента, который также есть в списке выбора сервера. Если не найдено общего выбора компрессии, rsync завершает работу с ошибкой. Если удалённый rsync слишком стар для поддержки согласования контрольной суммы, его список предполагается как "zlib".
Порядок по умолчанию можно настроить, установив переменную окружения RSYNC_COMPRESS_LIST в список допустимых имён сжатия, разделённых пробелами. Если строка содержит символ «&», она разделяется на «строку клиента и строку сервера», в противном случае та же строка применяется к обеим сторонам. Если строка (или часть строки) не содержит непробельных символов, используется список сжатия по умолчанию. Любые неизвестные имена сжатия отбрасываются из списка, но список только с недопустимыми именами приводит к неудачному согласованию.
Существуют некоторые старые версии rsync, которые были настроены на отклонение параметра -z и требуют использования -zz, поскольку их библиотека сжатия несовместима с методом сжатия zlib по умолчанию. Обычно вы можете игнорировать эту странность, если только сервер rsync не жалуется и не просит вас указать -zz.
--compress-choice=СТРОКА, --zc=СТРОКА
Этот параметр можно использовать для переопределения автоматического согласования алгоритма сжатия, которое происходит при использовании --compress. Параметр подразумевает --compress, если не указано «none», а если указан «none», то подразумевает --no-compress.
Параметры сжатия, которые вы можете использовать:
- zstd
- lz4
- zlibx
- zlib
- none
Запустите rsync --version, чтобы увидеть список компрессии по умолчанию, скомпилированный в вашей версии (который может отличаться от списка выше).
Обратите внимание, что если вы видите ошибку об опции с именем --old-compress или --new-compress, это rsync пытается отправить опцию --compress-choice=zlib или --compress-choice=zlibx обратно совместимым способом, который понимают другие версии rsync. Эта ошибка указывает на то, что старая версия rsync на сервере не позволит вам принудительно задать тип сжатия.
Обратите внимание, что алгоритм сжатия «zlibx» – это просто алгоритм «zlib» с соответствующими данными, исключёнными из потока сжатия (чтобы попытаться сделать его более совместимым с внешней реализацией zlib).
--compress-level=ЧИСЛО, --zl=ЧИСЛО
Явно задаёт уровень сжатия для использования (смотрите --compress, -z) вместо того, чтобы позволить программе использовать значение по умолчанию. Параметр --compress подразумевается, пока выбранный уровень не является уровнем «не сжимать» для действующего алгоритма сжатия (например, сжатие zlib обрабатывает уровень 0 как «выключено»).
Значения уровня различаются в зависимости от действующей контрольной суммы. Поскольку rsync будет согласовывать выбор контрольной суммы по умолчанию (если удалённый rsync достаточно новый), может быть полезно объединить этот параметр с параметром --compress-choice (--zc), если вы не уверены в действующем выборе. Например:
rsync -aiv --zc=zstd --zl=22 host:src/ dest/
Для сжатия zlib и zlibx допустимые значения – от 1 до 9, по умолчанию — 6. Указание --zl=0 отключает сжатие, а указание --zl=-1 выбирает уровень по умолчанию 6.
Для сжатия zstd допустимые значения — от -131072 до 22, по умолчанию — 3. Указание 0 выбирает уровень по умолчанию 3.
Для сжатия lz4 нет уровней, поэтому значение всегда равно 0.
Если указать слишком большое или слишком маленькое значение, число будет автоматически ограничено допустимым значением. Это позволяет указать что-то вроде --zl=999999999 и быть уверенным, что вы получите максимальный уровень сжатия независимо от выбранного алгоритма.
Если вы хотите узнать действующий уровень сжатия, укажите --debug=nstr, чтобы увидеть результаты «согласованной строки». Это сообщит что-то вроде «Client compress: zstd (level 3)» (вместе с выбором контрольной суммы в действии).
--skip-compress=СПИСОК
ПРИМЕЧАНИЕ: ни один метод сжатия в настоящее время не поддерживает изменения сжатия per-file (пофайлово), поэтому эта опция не имеет эффекта.
Переопределить список суффиксов файлов, которые будут сжиматься как можно меньше. Rsync устанавливает уровень сжатия для каждого файла на основе суффикса файла. Если алгоритм сжатия имеет уровень «off», то для этих файлов сжатие не выполняется. Другие алгоритмы, которые поддерживают изменение уровня потоковой передачи на лету, будут минимизировать уровень, чтобы максимально снизить использование ЦП для соответствующего файла.
СПИСОК должен содержать один или несколько суффиксов файлов (без точки), разделённых косыми чертами (/). Вы можете указать пустую строку, чтобы указать, что не следует пропускать файлы.
Поддерживается простое сопоставление классов символов: каждый класс символов должен состоять из списка букв внутри квадратных скобок (например, не поддерживаются специальные классы, такие как «[:alpha:]», а «-» не имеет специального значения).
Символы звёздочка (*) и вопросительный знак (?) не имеют специального значения.
Вот пример, который указывает 6 суффиксов для пропуска (поскольку 1 из 5 правил соответствует 2 суффиксам):
--skip-compress=gz/jpg/mp[34]/7z/bz2
Суффиксы файлов по умолчанию в списке пропуска сжатия в этой версии rsync следующие:
3g2 3gp 7z aac ace apk avi bz2 deb dmg ear f4v flac flv gpg gz iso jar jpeg jpg lrz lz lz4 lzma lzo m1a m1v m2a m2ts m2v m4a m4b m4p m4r m4v mka mkv mov mp1 mp2 mp3 mp4 mpa mpeg mpg mpv mts odb odf odg odi odm odp ods odt oga ogg ogm ogv ogx opus otg oth otp ots ott oxt png qt rar rpm rz rzip spx squashfs sxc sxd sxg sxm sxw sz tbz tbz2 tgz tlz ts txz tzo vob war webm webp xz z zip zst
Этот список будет заменён вашим списком --skip-compress во всех ситуациях, кроме одной: копия из демона rsync добавит ваши суффиксы для пропуска файлов в свой список несжимаемых файлов (и его список может быть настроен на другое значение по умолчанию).
--numeric-ids
С этой опцией rsync будет передавать числовые идентификаторы групп и пользователей вместо использования имён пользователей и групп и сопоставления их на обоих концах.
По умолчанию rsync будет использовать имя пользователя и имя группы для определения владельца, которому следует предоставить файлы. Специальный uid 0 и специальная группа 0 никогда не сопоставляются с именами пользователей/групп, даже если не указана опция --numeric-ids.
Если у пользователя или группы нет имени в исходной системе или нет соответствия в целевой системе, то вместо этого используется числовой идентификатор из исходной системы. Смотрите также настройку «use chroot» на странице руководства rsyncd.conf для некоторых комментариев о том, как настройка chroot влияет на способность rsync искать имена пользователей и групп, и что можно с этим сделать.
--usermap=СТРОКА, --groupmap=СТРОКА
Эти параметры позволяют указать пользователей и группы, которые должны быть сопоставлены с другими значениями принимающей стороной. СТРОКА — это одна или несколько пар значений ИЗ:В, разделённых запятыми. Любое совпадающее значение ИЗ от отправителя заменяется значением В от получателя. Вы можете указать имена пользователей или идентификаторы пользователей для значений ИЗ и В, а значение ИЗ также может быть строкой подстановочных знаков, которая будет сопоставлена с именами отправителя (подстановочные знаки НЕ сопоставляются с номерами идентификаторов, хотя ниже описано, почему «*» соответствует всему). Вместо этого вы можете указать диапазон номеров идентификаторов с помощью включающего диапазона: НАЧАЛО-КОНЕЦ. Например:
--usermap=0-99:nobody,wayne:admin,*:normal --groupmap=usr:1,1:usr
Первое совпадение в списке — это то, которое используется. Вам следует указать все сопоставления пользователей с помощью одной опции --usermap и/или все сопоставления групп с помощью одной опции --groupmap.
Обратите внимание, что имя отправителя для пользователя и группы 0 не передаётся получателю, поэтому вам следует либо сопоставить эти значения с помощью 0, либо использовать имена, действующие на принимающей стороне (обычно «root»). Все остальные имена ИЗ соответствуют тем, которые используются на отправляющей стороне. Все имена В соответствуют тем, которые используются на принимающей стороне.
Любые идентификаторы, не имеющие имени на отправляющей стороне, рассматриваются как имеющие пустое имя для сопоставления. Это позволяет сопоставлять их с помощью «*» или с помощью пустого имени. Например:
--usermap=:nobody --groupmap=*:nobody
При использовании параметра --numeric-ids отправитель не отправляет никаких имён, поэтому все идентификаторы рассматриваются как имеющие пустое имя. Это означает, что вам нужно будет указать числовые значения ИЗ, если вы хотите сопоставить эти безымянные идентификаторы с другими значениями.
Для работы параметра --usermap получатель должен работать как суперпользователь (смотрите также параметры --super и --fake-super). Для работы параметра --groupmap получатель должен иметь разрешения на установку этой группы.
Начиная с rsync 3.2.4, параметр --usermap подразумевает параметр --owner (-o), а параметр --groupmap подразумевает параметр --group (-g) (поскольку rsync должен включить эти параметры для работы параметров сопоставления).
Старому клиенту rsync может потребоваться использовать -s, чтобы избежать жалоб на подстановочные знаки, но современный rsync обрабатывает это автоматически.
--chown=ПОЛЬЗОВАТЕЛЬ:ГРУППА
Эта опция заставляет всех файлов принадлежать ПОЛЬЗОВАТЕЛЮ с группой ГРУППА. Это более простой интерфейс, чем использование --usermap и --groupmap напрямую, но он реализован с использованием этих опций внутри, поэтому их нельзя смешивать. Если ПОЛЬЗОВАТЕЛЬ или ГРУППА пусты, сопоставление для пропущенного пользователя/группы не произойдёт. Если ГРУППА пуста, завершающее двоеточие можно опустить, но если ПОЛЬЗОВАТЕЛЬ пуст, должно быть указано начальное двоеточие.
Если указать «--chown=foo:bar», это то же самое, что указать «--usermap=*:foo --groupmap=*:bar», только проще (и с теми же подразумеваемыми опциями --owner и/или --group).
Старому клиенту rsync может потребоваться использовать -s, чтобы избежать жалоб на подстановочные знаки, но современный rsync обрабатывает это автоматически.
--timeout=СЕКУНДЫ
Эта опция позволяет вам установить максимальное время ожидания ввода-вывода в секундах. Если в течение указанного времени данные не передаются, rsync завершает работу. Значение по умолчанию – 0, что означает отсутствие тайм-аута.
--contimeout=СЕКУНДЫ
Этот параметр позволяет задать время, в течение которого rsync будет ожидать успешного подключения к демону rsync. Если тайм-аут достигнут, rsync завершает работу с ошибкой.
--address=АДРЕС
По умолчанию rsync будет привязываться ко всем адресам при подключении к демону rsync. Параметр --address позволяет указать конкретный IP-адрес (или имя хоста) для привязки.
Смотрите также версию параметра --address для демона (службы).
--port=ПОРТ
Это указывает альтернативный номер порта TCP для использования вместо значения по умолчанию 873. Это необходимо только в том случае, если вы используете синтаксис с двойным двоеточием (::) для подключения к демону rsync (поскольку синтаксис URL позволяет указать порт как часть URL).
Смотрите также версию параметра --port для демона (службы).
--sockopts=ОПЦИИ
Эта опция может обеспечить бесконечное веселье для людей, которые любят настраивать свои системы по максимуму. Вы можете задать всевозможные параметры сокета, которые могут ускорить (или замедлить!) передачу данных. Прочитайте страницу руководства для системного вызова setsockopt(), чтобы узнать подробности о некоторых параметрах, которые вы можете установить. По умолчанию никакие специальные параметры сокета не заданы. Это влияет только на прямые соединения сокета с удаленным демоном rsync.
Смотрите также версию параметра --sockopts для демона (службы).
--blocking-io
Это указывает rsync использовать блокирующий ввод-вывод при запуске удалённого транспорта оболочки. Если удалённая оболочка – rsh или remsh, rsync по умолчанию использует блокирующий ввод-вывод, в противном случае по умолчанию используется неблокирующий ввод-вывод. (Обратите внимание, что ssh предпочитает неблокирующий ввод-вывод.)
--outbuf=РЕЖИМ
Это устанавливает режим буферизации вывода. Режим может быть None (он же Unbuffered), Line или Block (он же Full). Вы можете указать всего одну букву для режима и использовать верхний или нижний регистр.
Основное применение этой опции – изменить полную (Full) буферизацию на строчную (Line) буферизацию, когда вывод rsync направляется в файл или канал.
--itemize-changes, -i
Запрашивает простой подробный список изменений, которые вносятся в каждый файл, включая изменения атрибутов. Это то же самое, что указать --out-format='%i %n%L'. Если вы повторите опцию, неизмененные файлы также будут выводиться, но только если принимающая версия rsync не ниже 2.6.7 (вы можете использовать -vv с более старыми версиями rsync, но это также включает вывод других подробных сообщений).
Управляющий код «%i» имеет криптографический вывод длиной 11 букв. Общий формат похож на строку YXcstpoguax, где Y заменяется типом выполняемого обновления, X заменяется типом файла, а другие буквы представляют атрибуты, которые могут выводиться, если они изменяются.
Типы обновлений, которые заменяют Y, следующие:
- < означает, что файл передаётся на удалённый хост (отправляется).
- > означает, что файл передаётся на локальный хост (принимается).
- c означает, что для элемента происходит локальное изменение/создание (например, создание каталога или изменение символической ссылки и т. д.).
- h означает, что элемент является жёсткой ссылкой на другой элемент (требуется --hard-links).
- . означает, что элемент не обновляется (хотя у него могут быть изменённые атрибуты).
- * означает, что остальная часть области детализированного вывода содержит сообщение (например, «удаление»).
Типы файлов, которые заменяют X:
- f для файла
- d для каталога
- L для символической ссылки
- D для устройства
- S для специального файла (например, именованные сокеты и fifos).
Другие буквы в строке указывают, были ли изменены некоторые атрибуты файла, следующим образом:
- "." - атрибут не изменился.
- "+" - файл создан заново.
- " " - все атрибуты не изменились (все точки превращаются в пробелы).
- "?" - изменение неизвестно (когда удалённый rsync старый).
- Буква указывает на то, что атрибут обновляется.
Атрибут, связанный с каждой буквой, выглядит следующим образом:
- c означает, что либо обычный файл имеет другую контрольную сумму (требуется --checksum), либо что символическая ссылка, устройство или специальный файл имеют измененное значение. Обратите внимание, что если вы отправляете файлы в rsync до версии 3.0.1, этот флаг изменения будет присутствовать только для обычных файлов с отличающейся контрольной суммой.
- s означает, что размер обычного файла отличается и будет обновлён при передаче файла.
- t означает, что время изменения отличается и обновляется до значения отправителя (требуется --times). Альтернативное значение T означает, что время изменения будет установлено на время передачи, что происходит, когда файл/символическая ссылка/устройство обновляется без --times и когда символическая ссылка изменяется, а получатель не может установить своё время. (Примечание: при использовании клиента rsync 3.0.0 вы можете увидеть флаг s в сочетании с t вместо надлежащего флага T для этой ошибки установки времени.)
- p означает, что разрешения отличаются и обновляются до значения отправителя (требуется --perms).
- o означает, что владелец отличается и обновляется до значения отправителя (требуется --owner и привилегии суперпользователя).
- g означает, что группа отличается и обновляется до значения отправителя (требуется --group и полномочия для установки группы).
- u|n|b указывает на следующую информацию:
- u означает, что время доступа (использования) отличается и обновляется до значения отправителя (требуется --atimes)
- n означает, что время создания (новизна) отличается и обновляется до значения отправителя (требуется --crtimes)
- b означает, что обновляются как время доступа, так и время создания
- a означает, что информация ACL изменяется.
- x означает, что изменяется информация о расширенных атрибутах.
Возможен ещё один вывод: при удалении файлов «%i» выведет строку «*deleting» для каждого удаляемого элемента (предполагается, что вы общаетесь с достаточно новым rsync, который регистрирует удаления, а не выводит их в виде подробного сообщения).
--out-format=ФОРМАТ
Эта опция позволяет вам точно указать, что клиент rsync выводит пользователю на основе каждого обновления. Формат представляет собой текстовую строку, содержащую встроенные односимвольные escape-последовательности с префиксом в виде символа процента (%). Формат по умолчанию «%n%L» предполагается, если указано --info=name или -v (это сообщает вам только имя файла и, если элемент является ссылкой, то куда он указывает). Полный список возможных escape-символов смотрите в настройке формата журнала на странице руководства rsyncd.conf:
man rsyncd.conf
Указание параметра --out-format подразумевает параметр --info=name, который будет упоминать каждый файл, каталог и т. д., который обновляется существенным образом (перенесённый файл, повторно созданная символическая ссылка/устройство или затронутый каталог). Кроме того, если в строку включена escape-последовательность itemize-changes (%i) (например, если была использована опция --itemize-changes), то протоколирование имён увеличивается для упоминания любого элемента, который каким-либо образом изменён (при условии, что принимающая сторона имеет версию не ниже 2.6.4). Описание вывода «%i» смотрите в опции --itemize-changes.
Rsync выведет строку out-format до передачи файла, если только не запрошена одна из escape-последовательностей transfer-statistic, в этом случае протоколирование выполняется в конце передачи файла. Если действует эта поздняя протоколирование и также указана опция --progress, rsync также выведет имя передаваемого файла до информации о ходе его выполнения (конечно, за которой следует вывод out-format).
--log-file=ФАЙЛ
Эта опция заставляет rsync регистрировать то, что он делает с файлом. Это похоже на ведение журнала, которое делает демон, но может быть запрошено для клиентской стороны и/или серверной стороны передачи, не являющейся демоном. Если указано как клиентская опция, ведение журнала передачи будет включено с форматом по умолчанию «%i %n%L». Смотрите опцию --log-file-format, если вы хотите переопределить это.
Вот пример команды, которая запрашивает удалённую сторону для ведения журнала того, что происходит:
rsync -av --remote-option=--log-file=/tmp/rlog src/ dest/
Это очень полезно, если вам нужно отладить, почему соединение неожиданно закрывается.
Смотрите также версию опции --log-file для демона.
--log-file-format=ФОРМАТ
Это позволяет вам точно указать, какой журнал для каждого обновления помещается в файл, указанный опцией --log-file (которая также должна быть указана, чтобы эта опция имела какой-либо эффект). Если вы укажете пустую строку, обновленные файлы не будут упомянуты в файле журнала. Список возможных экранирующих символов смотрите в настройке формата журнала на странице руководства rsyncd.conf:
man rsyncd.conf
ФОРМАТ по умолчанию, используемый, если указан --log-file, а эта опция не задана, — '%i %n%L'.
Смотрите также версию параметра --log-file-format для демона (службы).
--stats
Это указывает rsync на необходимость выводить подробный набор статистики по передаче файлов, что позволяет вам определить, насколько эффективен алгоритм дельта-передачи rsync для ваших данных. Эта опция эквивалентна --info=stats2 в сочетании с 0 или 1 опциями -v или --info=stats3 в сочетании с 2 или более опциями -v.
Текущая статистика выглядит следующим образом:
- Number of files (Количество файлов) – это количество всех «файлов» (в общем смысле), включая каталоги, символические ссылки и т. д. За общим количеством будет следовать список количеств по типу файла (если общее количество не равно нулю). Например: «(reg: 5, dir: 3, link: 2, dev: 1, special: 1)» перечисляет общее количество обычных файлов, каталогов, символических ссылок, устройств и специальных файлов. Если какое-либо значение равно 0, оно полностью исключается из списка.
- Number of created files (Количество созданных файлов) – это количество созданных (в общем смысле) «файлов» (в отличие от обновлённых). За общим количеством будет следовать список количества по типу файла (если общее количество не равно нулю).
- Number of deleted files (Количество удалённых файлов) – это количество удалённых «файлов» (в общем смысле). За общим количеством будет следовать список количества по типу файлов (если общее количество не равно нулю). Обратите внимание, что эта строка выводится только в том случае, если удаления выполняются и только если используется протокол 31 (по умолчанию для rsync 3.1.x).
- Number of regular files transferred (Количество переданных обычных файлов) – это количество обычных файлов, которые были обновлены с помощью алгоритма дельта-передачи rsync, который не включает каталоги, символические ссылки и т. д. Обратите внимание, что rsync 3.1.0 добавил слово «regular» («обычный») в этот заголовок.
- Total file size (Общий размер файлов) – это общая сумма размеров всех файлов в передаче. Здесь не учитывается размер каталогов или специальных файлов, но сюда включается размер символических ссылок.
- Total transferred file size (Общий размер переданный файлов) – это общая сумма размеров всех файлов только для переданных файлов.
- Literal data (Буквальные данные) – это сколько не совпавших данных обновления файлов нам пришлось отправить получателю, чтобы он воссоздал обновлённые файлы.
- Matched data (Совпавшие данные) – это сколько данных получил локальный получатель при воссоздании обновлённых файлов.
- File list size (Размер списка файлов) – это размер данных списка файлов, когда отправитель отправлял их получателю. Это меньше размера списка файлов в памяти из-за некоторого сжатия дублирующихся данных при отправке списка rsync.
- File list generation time (Время генерации списка файлов) – это количество секунд, которое отправитель потратил на создание списка файлов. Для этого требуется современный rsync на стороне отправителя.
- File list transfer time (Время передачи списка файлов) – это количество секунд, которое отправитель потратил на отправку списка файлов получателю.
- Total bytes sent (Общее количество отправленных байт) – это количество всех байтов, которые rsync отправил со стороны клиента на сторону сервера.
- Total bytes received (Общее количество полученных байт) – это количество всех байтов, не являющихся сообщениями, которые rsync получил со стороны клиента со стороны сервера. Байты «не являющиеся сообщениями» означают, что мы не учитываем байты для подробного сообщения, которое сервер отправил нам, что делает статистику более единообразной.
--8-bit-output, -8
Это говорит rsync оставить все символы с высоким битом неэкранированными в выводе вместо того, чтобы пытаться проверить их на допустимость в текущей локали и экранировать недопустимые. Все управляющие символы (но никогда не символы табуляции) всегда экранируются, независимо от настройки этого параметра.
Идиома экранирования, которая появилась в версии 2.6.7, заключается в выводе буквального обратного слеша (\) и хэша (#), за которыми следуют ровно 3 восьмеричные цифры. Например, новая строка будет выведена как «\#012». Буквальный обратный слеш, который находится в имени файла, не экранируется, если за ним не следуют хэш и 3 цифры (0-9).
--human-readable, -h
Выводить числа в более удобном для восприятия человеком формате. Существует 3 возможных уровня:
- вывод чисел с разделителем между каждым набором из 3 цифр (запятой или точкой, в зависимости от того, представлена ли десятичная точка точкой или запятой).
- вывод чисел в единицах по 1000 (с символьным суффиксом для более крупных единиц — смотрите ниже).
- вывод чисел в единицах по 1024.
По умолчанию используется понятный человеку уровень 1. Каждая опция -h увеличивает уровень на единицу. Вы можете понизить уровень до 0 (чтобы выводить числа как чистые цифры), указав опцию --no-human-readable (--no-h).
Буквы единиц, которые добавляются на уровнях 2 и 3: K (кило), M (мега), G (гига), T (тера) или P (пета). Например, файл размером 1234567 байт будет выведен как 1,23 М на втором уровне (предполагая, что точка — это ваша локальная десятичная точка).
Примечание об обратной совместимости: версии rsync до 3.1.0 не поддерживают понятный человеку уровень 1, и по умолчанию они используют уровень 0. Таким образом, указание одного или двух параметров -h будет вести себя сопоставимым образом в старых и новых версиях, если вы не указали параметр --no-h перед одним или несколькими параметрами -h. Смотрите параметр --list-only для одного различия.
--partial
По умолчанию rsync удалит любой частично переданный файл, если передача прервана. В некоторых обстоятельствах более желательно сохранить частично переданные файлы. Использование параметра --partial указывает rsync сохранить частичный файл, что должно значительно ускорить последующую передачу оставшейся части файла.
--partial-dir=ДИРЕКТОРИЯ
Этот параметр изменяет поведение параметра --partial, а также подразумевает, что он включён. Этот улучшенный метод частичного файла помещает все частично переданные файлы в указанную ДИРЕКТОРИЮ вместо записи частичного файла в файл назначения. При следующей передаче rsync будет использовать файл, найденный в этом каталоге, в качестве данных для ускорения возобновления передачи, а затем удалит его после того, как он выполнит свою задачу.
Обратите внимание, что если указано (или подразумевается) --whole-file, любые файлы частичного каталога, найденные для обновляемого файла, будут просто удалены (поскольку rsync отправляет файлы без использования алгоритма дельта-передачи rsync).
Rsync создаст ДИРЕКТОРИЮ, если она отсутствует, но только последний каталог – а не весь путь. Это упрощает использование относительного пути (например, "--partial-dir=.rsync-partial"), чтобы rsync создал частичный каталог в каталоге файла назначения, когда он нужен, а затем снова удалит его, когда частичный файл будет удалён. Обратите внимание, что это удаление каталога выполняется только для относительного пути, так как ожидается, что абсолютный путь ведёт к каталогу, зарезервированному для работы с частичным каталогом.
Если значение частичного каталога не является абсолютным путём, rsync добавит правило исключения в конец всех ваших существующих исключений. Это предотвратит отправку любых файлов частичного каталога, которые могут существовать на отправляющей стороне, а также предотвратит несвоевременное удаление элементов частичного каталога на принимающей стороне. Пример: указанная выше опция --partial-dir добавит эквивалент этого «perishable» (недолговечного, скоропортящегося) исключения в конец любых других правил фильтрации: -f '-p .rsync-partial/'
Если вы предоставляете собственные правила исключения, вам может потребоваться добавить собственное правило исключения/скрытия/защиты для директории для частично скаченных файлов, потому что:
- автоматически добавленное правило может быть неэффективным в конце других ваших правил, или
- вы можете захотеть переопределить выбор исключения rsync.
Например, если вы хотите, чтобы rsync очистил все оставшиеся директории для частично скаченных файлов, которые больше не нужны после завершения копирования, вам следует указать --delete-after и добавить правило фильтра «risk», например, -f 'R .rsync-partial/'. Избегайте использования --delete-before или --delete-during, если только вам не нужно, чтобы rsync использовал какие-либо оставшиеся данные директории для частично скаченных файлов во время текущего запуска.
ВАЖНО: --partial-dir не должен быть доступен для записи другим пользователям, иначе это представляет угрозу безопасности! Например, ИЗБЕГАЙТЕ такое значение этой опции как «/tmp»!
Вы также можете задать значение partial-dir переменной среды RSYNC_PARTIAL_DIR. Установка этого в среде не приводит к принудительному включению --partial, но влияет на то, куда попадают частичные файлы, когда указан --partial. Например, вместо использования --partial-dir=.rsync-tmp вместе с --progress, вы можете задать RSYNC_PARTIAL_DIR=.rsync-tmp в своей среде, а затем использовать параметр -P, чтобы включить использование каталога .rsync-tmp для частичных передач. Единственные случаи, когда параметр --partial не ищет это значение среды:
- когда был указан --inplace (так как --inplace конфликтует с --partial-dir), и
- когда был указан --delay-updates (смотрите ниже).
Когда современный rsync возобновляет передачу файла в директории для частично скаченных файлов, этот частичный файл теперь обновляется на месте, а не создаёт ещё одну копию tmp-файла (поэтому он достигает максимума в dest + tmp вместо dest + partial + tmp). Для этого требуется, чтобы оба конца передачи были как минимум версии 3.2.0.
Для целей настройки «refuse options» («опций отказа») в конфигурации демона, --partial-dir не подразумевает --partial. Это сделано для того, чтобы отказ от опции --partial можно было использовать для запрета перезаписи целевых файлов с частичной передачей, при этом всё ещё позволяя использовать более безопасную идиому, предоставляемую --partial-dir.
--delay-updates
Эта опция помещает временный файл из каждого обновлённого файла в каталог хранения до конца передачи, после чего все файлы быстро переименовываются на месте. Это пытается сделать обновление файлов немного более атомарным. По умолчанию файлы помещаются в каталог с именем «.~tmp~» в каталоге назначения каждого файла, но если вы указали опцию --partial-dir, вместо этого будет использоваться этот каталог. Смотрите комментарии в разделе --partial-dir для обсуждения того, как этот каталог «.~tmp~» будет исключён из передачи, и что вы можете сделать, если хотите, чтобы rsync очистил старые каталоги «.~tmp~», которые могут остаться. Конфликтует с --inplace и --append.
Эта опция подразумевает --no-inc-recursive, поскольку ей нужен полный список файлов в памяти, чтобы иметь возможность перебрать его в конце.
Эта опция использует больше памяти на принимающей стороне (один бит на каждый переданный файл), а также требует достаточно свободного места на диске на принимающей стороне для хранения дополнительной копии всех обновлённых файлов. Обратите внимание, что не следует использовать абсолютный путь к --partial-dir, если только:
- нет вероятности, что какой-либо из файлов в передаче будет иметь одинаковое имя (поскольку все обновлённые файлы будут помещены в один каталог, если путь абсолютный), и
- нет точек монтирования в иерархии (поскольку отложенные обновления не будут выполнены, если их нельзя будет переименовать на место).
Смотрите также скрипт Python «atomic-rsync» в подкаталоге «support» для алгоритма обновления (https://github.com/RsyncProject/rsync/blob/master/support/atomic-rsync), который является ещё более атомарным (он использует --link-dest и параллельную иерархию файлов).
--prune-empty-dirs, -m
Эта опция сообщает принимающему rsync о необходимости избавиться от пустых каталогов из списка файлов, включая вложенные каталоги, не имеющие дочерних элементов, не являющихся каталогами. Это полезно для предотвращения создания множества бесполезных каталогов, когда отправляющий rsync рекурсивно сканирует иерархию файлов с использованием правил include/exclude/filter.
Эта опция всё ещё может оставлять пустые каталоги на принимающей стороне, если вы используете Правила передачи.
Поскольку список файлов фактически очищается, эта опция также влияет на то, какие каталоги удаляются при активном удалении. Однако имейте в виду, что исключённые файлы и каталоги могут помешать удалению существующих элементов из-за исключения как скрываемых файлов на ИСТОЧНИКЕ, так и защищённых файлов в ПУНКТЕ_НАЗНАЧЕНИЯ. Смотрите параметр perishable (скоропортящиеся) в Правилах фильтрации, чтобы узнать, как этого избежать.
Вы можете предотвратить удаление определённых пустых каталогов из списка файлов, используя глобальный фильтр «protect». Например, эта опция гарантирует, что каталог «emptydir» будет сохранен в списке файлов:
--filter 'protect emptydir/'
Вот пример, который копирует все файлы .pdf в иерархии, создавая только необходимые каталоги назначения для хранения файлов .pdf и гарантируя, что все лишние файлы и каталоги в месте назначения будут удалены (обратите внимание на фильтр скрытия не-каталогов, который используется вместо исключения):
rsync -avm --del --include='*.pdf' -f 'hide,! */' src/ dest
Если вы не хотите удалять лишние файлы назначения, более проверенные временем параметры --include='*/' --exclude='*' будут работать отлично вместо фильтров сокрытия (если вам так удобнее).
--progress
Эта опция указывает rsync выводить информацию, показывающую ход передачи. Это даёт скучающему пользователю что-то, на что можно посмотреть. С современным rsync это то же самое, что указать --info=flist2,name,progress, но любые пользовательские настройки для этих информационных флагов имеют приоритет (например, --info=flist0 --progress).
Пока rsync передаёт обычный файл, он обновляет строку прогресса, которая выглядит следующим образом:
782448 63% 110.64kB/s 0:00:04
В этом примере получатель реконструировал 782448 байт или 63% файла отправителя, который реконструируется со скоростью 110,64 килобайт в секунду, и передача завершится через 4 секунды, если текущая скорость сохранится до конца.
Эти статистические данные могут вводить в заблуждение, если используется алгоритм дельта-передачи rsync. Например, если файл отправителя состоит из базового файла, за которым следуют дополнительные данные, сообщаемая скорость, вероятно, резко снизится, когда получатель доберётся до буквальных (фактически передаваемых) данных, и передача, вероятно, займёт гораздо больше времени, чем предполагал получатель, чем это предполагалось до этапа фактической передачи данных.
Когда передача файла завершается, rsync заменяет строку прогресса на итоговую строку, которая выглядит следующим образом:
1,238,099 100% 146.38kB/s 0:00:08 (xfr#5, to-chk=169/396)
В этом примере файл имел общую длину 1 238 099 байт, средняя скорость передачи всего файла составила 146,38 килобайт в секунду за 8 секунд, которые потребовались для завершения, это была 5-я передача обычного файла в текущем сеансе rsync, и осталось ещё 169 файлов, которые получатель должен проверить (узнать, являются ли они актуальными или нет) из 396 файлов в списке файлов.
При инкрементальном рекурсивном сканировании rsync не будет знать общее количество файлов в списке файлов, пока не достигнет конца сканирования, но поскольку он начинает передавать файлы во время сканирования, он будет отображать строку с текстом «ir-chk» (для проверки инкрементальной рекурсии) вместо «to-chk» до тех пор, пока не узнает полный размер списка, после чего переключится на использование «to-chk». Таким образом, видя «ir-chk», вы узнаете, что общее количество файлов в списке файлов все ещё будет увеличиваться (и каждый раз, когда это происходит, количество файлов, оставшихся для проверки, будет увеличиваться на количество файлов, добавленных в список).
-P
Параметр -P эквивалентен «--partial --progress» . Его цель — значительно упростить указание этих двух параметров для длительной передачи, которая может быть прервана.
Также есть параметр --info=progress2, который выводит статистику на основе всей передачи, а не отдельных файлов. Используйте этот флаг без вывода имени файла (например, избегайте -v или укажите --info=name0), если вы хотите увидеть, как идёт передача, не прокручивая экран с большим количеством имён. (Вам не нужно указывать опцию --progress, чтобы использовать --info=progress2.)
Наконец, вы можете получить мгновенный отчёт о ходе выполнения, отправив rsync сигнал SIGINFO или SIGVTALRM. В системах BSD сигнал SIGINFO генерируется при нажатии Ctrl+T (Linux в настоящее время не поддерживает сигнал SIGINFO). Когда клиентский процесс получает один из этих сигналов, он устанавливает флаг для вывода одного отчёта о ходе выполнения, который выводится после завершения текущей передачи файла (поэтому это может занять некоторое время, если при поступлении сигнала обрабатывается большой файл). Выводится имя файла (при необходимости), за которым следует формат --info=progress2 информации о ходе выполнения. Если вы не знаете, какой из 3 процессов rsync является клиентским, можно подать сигнал им всем (поскольку неклиентские процессы игнорируют сигнал).
ВНИМАНИЕ: отправка SIGVTALRM в старый rsync (до 3.2.0) завершит его.
--password-file=ФАЙЛ
Эта опция позволяет вам указать пароль для доступа к демону rsync через файл или через стандартный ввод, если ФАЙЛ равен «-». Файл должен содержать только пароль в первой строке (все остальные строки игнорируются). Rsync завершит работу с ошибкой, если ФАЙЛ доступен для чтения всем или если команда rsync, запущенная с правами root, обнаружит файл, не принадлежащий root.
Эта опция не предоставляет пароль для удалённого транспорта оболочки, такого как ssh; чтобы узнать, как это сделать, обратитесь к документации удалённой оболочки. При доступе к демону rsync с использованием удалённой оболочки в качестве транспорта эта опция вступает в силу только после того, как удалённая оболочка завершит свою аутентификацию (т. е. если вы также указали пароль в файле конфигурации демона).
--early-input=ФАЙЛ
Эта опция позволяет rsync отправлять до 5 КБ данных в сценарий «early exec» на его stdin. Одно из возможных применений этих данных — предоставить скрипту секрет, который можно использовать для монтирования зашифрованной файловой системы (которую следует размонтировать в скрипте «post-xfer exec»).
Демон должен быть не ниже версии 3.2.1.
--list-only
Эта опция приведёт к тому, что будет показан список файлов с ИСТОЧНИКА, вместо того, чтобы их пересылать на ПУНКТ_НАЗНАЧЕНИЯ. Эта опция автоматически применяется, если есть только один аргумент ИСТОЧНИК и не указан ПУНКТ_НАЗНАЧЕНИЯ, поэтому её основные применения:
- для преобразования команды копирования, которая включает аргумент ПУНКТ_НАЗНАЧЕНИЯ, в команду листинга файлов или
- для возможности указать более одного аргумента ИСТОЧНИКА. Примечание: обязательно укажите ПУНКТ_НАЗНАЧЕНИЯ.
ВНИМАНИЕ: имейте в виду, что аргумент ИСТОЧНИКА с подстановочным знаком расширяется оболочкой в несколько аргументов, поэтому никогда не безопасно пытаться указать только подстановочный знак без каких-либо уточнений (а именно «*»). Безопасный пример:
rsync -av --list-only foo* dest/
Эта опция всегда использует формат вывода, который выглядит примерно так:
drwxrwxr-x 4,096 2022/09/30 12:53:11 support -rw-rw-r-- 80 2005/01/11 10:37:37 support/Makefile
Единственная опция, которая влияет на этот стиль вывода, — это (начиная с версии 3.1.0) опция --human-readable (-h). По умолчанию размеры выводятся как количество байтов с разделителями цифр (в столбце шириной 14 символов). Указание хотя бы одной опции -h заставляет размеры выводить с суффиксами единиц измерения. Если вам нужны старые размеры байтов без разделителей цифр (и столбец шириной 11 символов), используйте --no-h.
Примечание о совместимости: при запросе удалённого списка файлов из rsync версии 2.6.3 или более ранней вы можете столкнуться с ошибкой, если запросите нерекурсивный список. Это связано с тем, что список файлов подразумевает опцию --dirs без --recursive, а в старых rsync такой опции нет. Чтобы избежать этой проблемы, либо укажите параметр --no-dirs (если вам не нужно расширять содержимое каталога), либо включите рекурсию и исключите содержимое подкаталогов: -r --exclude='/*/*'.
--bwlimit=СКОРОСТЬ
Этот параметр позволяет указать максимальную скорость передачи данных, отправляемых через сокет, в единицах в секунду. Значение СКОРОСТЬ может быть дополнено строкой, указывающей множитель размера, и может быть дробным значением (например, --bwlimit=1.5m). Если суффикс не указан, будет предполагаться, что значение будет в единицах по 1024 байта (как если бы были добавлены «K» или «KiB»). Описание всех доступных суффиксов смотрите в параметре --max-size. Значение 0 указывает на отсутствие ограничений.
Для обеспечения обратной совместимости ограничение скорости будет округлено до ближайшей единицы KiB, поэтому скорость менее 1024 байт в секунду невозможна.
Rsync записывает данные через сокет блоками, и эта опция ограничивает размер блоков, которые записывает rsync, и пытается поддерживать среднюю скорость передачи на запрошенном пределе. Может наблюдаться некоторая пульсация, когда rsync записывает блок данных, а затем засыпает, чтобы привести среднюю скорость в соответствие.
Из-за внутренней буферизации данных опция --progress может неточно отражать скорость отправки данных. Это связано с тем, что некоторые файлы могут отображаться как быстро отправляемые, когда данные быстро буферизуются, в то время как другие могут отображаться как очень медленные, когда происходит очистка выходного буфера. Это может быть исправлено в будущей версии.
Смотрите также версию демона опции --bwlimit.
--stop-after=МИНУТЫ, (--time-limit=МИНУТЫ)
Эта опция сообщает rsync о необходимости прекратить копирование по истечении указанного количества минут.
Для максимальной гибкости rsync не передаёт эту опцию удалённому rsync, поскольку обычно достаточно, чтобы одна сторона соединения завершила работу, если это установлено пользователем. Это позволяет использовать опцию, даже если её поддерживает только одна сторона соединения. Вы можете сообщить удалённой стороне об ограничении по времени с помощью --remote-option (-M), если возникнет такая необходимость.
Версия этой опции --time-limit устарела.
--stop-at=y-m-dTh:m
Эта опция сообщает rsync о необходимости прекратить копирование по достижении указанного момента времени. Дату и время можно полностью указать в числовом формате год-месяц-деньTчас:минута (например, 2000-12-31T23:59) в местном часовом поясе. Вы можете выбрать разделение дат косыми чертами вместо тире.
Значение также может быть сокращено различными способами, например, указанием года из 2 цифр и/или пропуском различных значений. Во всех случаях значение будет взято как следующий возможный момент времени, когда предоставленная информация совпадает. Если значение указывает текущее время или прошедшее время, rsync завершает работу с ошибкой.
Например, «1-30» указывает следующее 30 января (в полночь по местному времени), «14:00» указывает следующие 2 часа дня, «1» указывает следующее 1-е число месяца в полночь, «31» указывает следующий месяц, в котором мы можем остановиться на его 31-м дне, а «:59» указывает следующую 59-ю минуту после часа.
Для максимальной гибкости rsync не сообщает эту опцию удалённому rsync, поскольку обычно достаточно, чтобы одна сторона соединения завершила работу, если это указано пользователем. Это позволяет использовать опцию, даже если её поддерживает только одна сторона соединения. Вы можете сообщить удалённой стороне об ограничении времени с помощью --remote-option (-M), если возникнет такая необходимость. Помните, что удалённый хост может иметь другой часовой пояс по умолчанию, чем ваш локальный хост.
--fsync
Заставить принимающую сторону синхронизировать каждый готовый файл. Это может замедлить передачу, но может помочь обеспечить спокойствие при обновлении критических файлов.
--write-batch=ФАЙЛ
Записать файл, который позже можно применить к другому идентичному месту назначения с помощью --read-batch. Подробности смотрите в разделе «Пакетный режим», а также параметр --only-write-batch.
Этот параметр переопределяет согласованные контрольные суммы и списки сжатия и всегда согласовывает выбор на основе старых вариантов md5/md4/zlib. Если вам нужен более современный выбор, используйте параметры --checksum-choice (--cc) и/или --compress-choice (--zc).
--only-write-batch=ФАЙЛ
Работает как --write-batch, за исключением того, что при создании пакета обновления в целевой системе не производятся. Это позволяет переносить изменения в целевую систему другими способами, а затем применять изменения с помощью --read-batch.
Обратите внимание, что вы можете свободно записывать пакет непосредственно на какой-либо портативный носитель: если этот носитель заполнится до конца передачи, вы можете просто применить эту частичную передачу к месту назначения и повторить весь процесс, чтобы получить остальные изменения (если вас не смущает частично обновлённая система назначения во время цикла множественных обновлений).
Также обратите внимание, что вы экономите полосу пропускания только при отправке изменений в удалённую систему, поскольку это позволяет перенаправлять пакетные данные от отправителя в пакетный файл без необходимости передачи по проводам к получателю (при извлечении отправитель находится удалённо и, таким образом, не может записать пакет).
--read-batch=ФАЙЛ
Применить все изменения, сохранённые в ФАЙЛЕ, к файлу, ранее созданному опцией --write-batch. Если ФАЙЛ равен «-», пакетные данные будут считаны со стандартного ввода. Подробности смотрите в разделе «Пакетный режим».
--protocol=ЧИСЛО
Принудительно использовать более старую версию протокола. Это полезно для создания пакетного файла, совместимого со старой версией rsync. Например, если rsync 2.6.4 используется с опцией --write-batch, но для запуска опции --read-batch будет использоваться rsync 2.6.3, то при создании пакетного файла следует использовать «--protocol=28», чтобы принудительно использовать в пакетном файле старую версию протокола (при условии, что вы не можете обновить rsync в системе чтения).
--iconv=CONVERT_SPEC
Rsync может преобразовывать имена файлов между наборами символов с помощью этой опции. Использование CONVERT_SPEC со значением «.» сообщает rsync о необходимости поиска набора символов по умолчанию через настройку локали. В качестве альтернативы вы можете полностью указать, какое преобразование следует выполнить, указав локальный и удалённый набор символов, разделённые запятой в порядке --iconv=ЛОКАЛЬНЫЙ,УДАЛЁННЫЙ, например --iconv=utf8,iso88591. Такой порядок гарантирует, что параметр останется неизменным, независимо от того, отправляете ли вы файлы или извлекаете их. Наконец, вы можете указать либо --no-iconv, либо CONVERT_SPEC со значением «-», чтобы отключить любое преобразование. Значение по умолчанию этого параметра зависит от компьютера и также может быть изменено с помощью переменной среды RSYNC_ICONV.
Для получения списка имён наборов символов, поддерживаемых вашей локальной библиотекой iconv, вы можете выполнить команду:
iconv --list
Если вы укажете опцию --secluded-args (-s), то rsync переведёт имена файлов, указанные вами в командной строке, которые отправляются на удалённый хост. Смотрите также опцию --files-from.
Обратите внимание, что rsync не выполняет преобразование имён в файлах фильтров (включая файлы включения/исключения). Вы должны убедиться, что указываете соотносимые правила, которые могут совпадать на обеих сторонах передачи. Например, вы можете указать дополнительные правила включения/исключения, если на двух сторонах есть различия в именах файлов, которые необходимо учитывать.
Когда вы передаёте опцию --iconv демону rsync, который это допускает, демон использует набор символов, указанный в его параметре конфигурации «charset», независимо от удалённого набора символов, который вы фактически передаёте. Таким образом, вы можете свободно указывать только локальный набор символов для передачи демона (например, --iconv=utf8).
--ipv4, -4 или --ipv6, -6
Указывает rsync предпочесть IPv4/IPv6 при создании сокетов или запуске ssh. Это влияет на сокеты, которые rsync контролирует напрямую, например, исходящий сокет при прямом контакте с демоном rsync, а также на пересылку параметра -4 или -6 в ssh, когда rsync может определить, что ssh используется в качестве удалённой оболочки. Для других удалённых оболочек вам нужно будет напрямую указать параметр «--rsh ОБОЛОЧКА -4» (или любые другие используемые им параметры подсказки IPv4/IPv6).
Смотрите также версию этих параметров для демона.
Если rsync был скомпилирован без поддержки IPv6, параметр --ipv6 не будет иметь никакого эффекта. В этом случае вывод rsync --version будет содержать «no IPv6».
--checksum-seed=ЧИСЛО
Установите начальное значение контрольной суммы на целое ЧИСЛО. Это 4-байтовое начальное значение контрольной суммы включено в каждый блок и расчёт контрольной суммы файла MD4 (более современные контрольные суммы файлов MD5 не используют начальное значение). По умолчанию начальное значение контрольной суммы генерируется сервером и по умолчанию равно текущему time(). Эта опция используется для установки определённого начального значения контрольной суммы, что полезно для приложений, которым требуются повторяющиеся контрольные суммы блоков, или в случае, когда пользователь хочет более случайное начальное значение контрольной суммы. Установка ЧИСЛА в 0 заставляет rsync использовать значение по умолчанию time() для начального значения контрольной суммы.
Опции демона (службы) rsync
При запуске демона (службы) rsync допускаются следующие параметры:
--daemon
Это сообщает rsync, что он должен работать как демон. К демону, который вы запускаете, можно получить доступ с помощью клиента rsync, используя синтаксис host::МОДУЛЬ или rsync://ХОСТ/МОДУЛЬ/.
Если стандартный ввод – это сокет, то rsync будет считать, что он запущен через inetd, в противном случае он отсоединится от текущего терминала и станет фоновым демоном. Демон будет читать файл конфигурации (rsyncd.conf) при каждом подключении, сделанном клиентом, и соответствующим образом отвечать на запросы.
Подробнее смотрите на странице руководства rsyncd.conf.
--address=АДРЕС
По умолчанию rsync будет привязываться к «*» (всем адресам) при запуске в качестве демона с параметром --daemon. Параметр --address позволяет указать конкретный IP-адрес (или имя хоста) для привязки. Это делает возможным виртуальный хостинг в сочетании с параметром --config.
Смотрите также глобальную опцию address на странице руководства rsyncd.conf и клиентскую версию опции --address.
--bwlimit=СКОРОСТЬ
Эта опция позволяет указать максимальную скорость передачи данных, отправляемых демоном через сокет. Клиент по-прежнему может указать меньшее значение --bwlimit, но большее значение не допускается.
Смотрите клиентскую версию опции --bwlimit для получения дополнительных сведений.
--config=ФАЙЛ
Указывает альтернативный файл конфигурации, отличный от файла по умолчанию. Это имеет значение только при указании --daemon. Значение по умолчанию — /etc/rsyncd.conf, если только демон не работает через удалённую программу оболочки, а удалённый пользователь не является суперпользователем; в этом случае значение по умолчанию — rsyncd.conf в текущем каталоге (обычно $HOME).
--dparam=OVERRIDE, -M
Эту опцию можно использовать для установки параметра конфигурации службы при запуске rsync в режиме демона. Это эквивалентно добавлению параметра в конец глобальных настроек перед определением первого модуля. Имена параметров можно указывать без пробелов, если вы этого хотите. Например:
rsync --daemon -M pidfile=/path/rsync.pid
--no-detach
При запуске в качестве демона эта опция указывает rsync не отключаться и не становиться фоновым процессом. Эта опция требуется при запуске в качестве службы в Cygwin, а также может быть полезна, когда rsync контролируется такой программой, как daemontools или AIX's System Resource Controller. --no-detach также рекомендуется, когда rsync запускается под отладчиком. Эта опция не действует, если rsync запускается из inetd или sshd.
--port=ПОРТ
Указывает альтернативный номер порта TCP для прослушивания демоном вместо значения по умолчанию 873.
Смотрите также клиентскую версию опции --port и глобальную настройку порта на странице руководства rsyncd.conf.
--log-file=ФАЙЛ
Эта опция указывает демону rsync использовать указанное имя файла журнала вместо использования настройки «log file» в файле конфигурации.
Смотрите также клиентскую версию опции --log-file.
--log-file-format=ФОРМАТ
Эта опция сообщает демону rsync использовать заданную строку ФОРМАТ вместо использования параметра «log format» в файле конфигурации. Она также включает «transfer logging» (ведения журнала передачи файлов), если строка не пуста; а если строка пуста, то в этом случае ведение журнала отключается.
Смотрите также клиентскую версию параметра --log-file-format.
--sockopts
Эта опция переопределяет настройки socket options (опции сокета) в файле rsyncd.conf и имеет тот же синтаксис.
Смотрите также клиентскую версию параметра --sockopts.
--verbose, -v
Эта опция увеличивает объем информации, которую демон регистрирует во время фазы запуска. После подключения клиента уровень детализации демона будет контролироваться параметрами, которые использовал клиент, и параметром «max verbosity» в разделе конфигурации модуля.
Смотрите также клиентскую версию параметра --verbose.
--ipv4, -4 или --ipv6, -6
Указывает rsync предпочесть IPv4/IPv6 при создании входящих сокетов, которые демон rsync будет использовать для прослушивания подключений. Один из этих параметров может потребоваться в старых версиях Linux для обхода ошибки IPv6 в ядре (если вы видите ошибку «address already in use», когда больше ничего не использует порт, попробуйте указать --ipv6 или --ipv4 при запуске демона).
Смотрите также клиентскую версию этих параметров.
Если rsync был скомпилирован без поддержки IPv6, параметр --ipv6 не будет иметь никакого эффекта. В этом случае вывод rsync --version будет содержать «no IPv6».
--help, -h
При указании после --daemon выводит краткую страницу справки, описывающую доступные параметры для запуска демона (службы) rsync.
Правила фильтрации в rsync
Правила фильтра позволяют настраивать управление несколькими аспектами обработки файлов:
- Управление тем, какие файлы отправляющая сторона помещает в список файлов, описывающий иерархию передачи
- Управление тем, какие файлы принимающая сторона защищает от удаления, если файл отсутствует в списке файлов отправителя
- Управление тем, какие расширенные имена атрибутов пропускаются при копировании xattrs
Правила либо напрямую указываются через аргументы параметров, либо их можно считывать из одного или нескольких файлов. Файлы правил фильтра могут даже быть частью иерархии копируемых файлов, по-разному влияя на разные части дерева.
Простые правила включения/исключения файлов в rsync
Сначала мы рассмотрим основы того, как правила включения и исключения файлов и директорий влияют на то, какие файлы передаются, игнорируя любые побочные эффекты удаления. Правила фильтра в основном влияют на содержимое каталогов, в которые rsync «рекурсирует», но они также могут влиять на элемент верхнего уровня в передаче, указанный в качестве аргумента.
По умолчанию любой несоответствующий файл/каталог включается в передачу, что помещает файл/каталог в список файлов отправителя. Использование правила исключения приводит к тому, что один или несколько соответствующих файлов/каталогов исключаются из списка файлов отправителя. Правило включения может использоваться для ограничения эффекта правила исключения, которое соответствует слишком большому количеству файлов.
Порядок правил важен, поскольку первое совпадающее правило вступает в силу. Таким образом, если раннее правило исключает файл, никакое правило включения, идущее после него, не может иметь никакого эффекта. Это означает, что вы должны разместить любые переопределения включения где-то до исключения, которое оно призвано ограничить.
Когда каталог исключается, всё его содержимое и подсодержимое также исключаются. Отправитель вообще не сканирует его, что может сэкономить много времени при пропуске больших ненужных поддеревьев.
Также важно понимать, что правила включения/исключения применяются к каждому файлу и каталогу, в которые отправитель рекурсивно переходит. Таким образом, если вы хотите, чтобы был включён (добавлен в передачу) определённый глубокий файл, вы должны убедиться, что ни один из каталогов, которые должны быть пройдены на пути к этому файлу, не исключён, иначе файл никогда не будет обнаружен для включения. Например, если каталог «a/path» был указан как аргумент передачи, и вы хотите убедиться, что файл «a/path/down/deep/wanted.txt» является частью передачи, то отправитель не должен исключать каталоги «a/path», «a/path/down» или «a/path/down/deep», поскольку они включены в дерево файлов, которое будет просканировано.
Когда вы работаете над правилами, может быть полезно попросить rsync сообщить вам, что исключается/включается и почему. Указание --debug=ФИЛЬТР или (при извлечении файлов) -M--debug=ФИЛЬТР включает уровень 1 отладочной информации ФИЛЬТР, которая будет выводить сообщение каждый раз, когда файл или каталог включается или исключается, и какому правилу он соответствует. Начиная с версии 3.2.4, он также будет предупреждать, если правило фильтра имеет конечный пробел, поскольку исключение «foo » (с конечным пробелом) не исключит файл с именем «foo».
Правила исключения и включения могут указывать подстановочные знаки «Правил сопоставления шаблонов rsync» (аналогичные подстановочным знакам оболочки), которые позволяют сопоставлять такие вещи, как суффикс файла или часть имени файла.
Правило можно ограничить, установив, что оно влияет только на каталог, для этого добавьте конечный слеш к имени файла.
Простые примеры включения/исключения файлов и директорий в rsync
Показанные ниже команды и фильтры rsync будут рассмотрены на примере включения и исключения файлов на отправляющей стороне созданных с помощью следующих команд:
mkdir x/ touch x/file.txt mkdir x/y/ touch x/y/file.txt touch x/y/zzz.txt mkdir x/z/ touch x/z/file.txt
Следующая команда rsync перенесёт файл «x/y/file.txt» и каталоги, необходимые для его хранения, в результате чего на удалённом хосте появится путь «/tmp/x/y/file.txt»:
rsync -ai -f'+ x/' -f'+ x/y/' -f'+ x/y/file.txt' -f'- *' x host:/tmp/
Отступление: это копирование также можно было выполнить с помощью параметра -R (хотя эти 2 команды ведут себя по-разному, если включены удаления):
rsync -aiR x/y/file.txt host:/tmp/
Следующей команде не нужно включать каталог «x», поскольку он не является частью передачи (обратите внимание на завершающий слеш). Выполнение этой команды скопирует только «/tmp/x/file.txt», поскольку каталоги «y» и «z» будут исключены:
rsync -ai -f'+ file.txt' -f'- *' x/ host:/tmp/x/
А эта команда пропустит файл zzz.txt, но при этом скопирует «x» и всего остального, что он содержит:
rsync -ai -f'- zzz.txt' x host:/tmp/
Правила фильтра при удалении в rsync
По умолчанию правила фильтрации включения и исключения влияют как на отправителя (так как он создаёт свой список файлов), так и на получателя (так как он создаёт свои списки файлов для расчёта удалений). Если опция удаления не действует, получатель пропускает создание списков файлов, связанных с удалением. Это двустороннее значение по умолчанию можно вручную переопределить, чтобы указать только правила отправителя или правила получателя, как описано в разделе «Углублённое понимание правил фильтрации rsync».
При удалении исключение защищает файл от удаления на принимающей стороне, в то время как включение переопределяет эту защиту (подвергая файл риску удаления). По умолчанию файл находится под угрозой – его безопасность зависит от того, соответствует ли он соответствующему файлу отправителя.
Пример эффекта двустороннего исключения можно проиллюстрировать копированием каталога разработки C между двумя системами. При выполнении корректировочного копирования вы можете пропустить копирование собранного исполняемого файла и файлов .o (скрытые для отправления), чтобы принимающая сторона могла создать свои собственные и не потерять ни одного из уже корректных объектных файлов (защита на стороне получателя). Например:
rsync -ai --del -f'- *.o' -f'- cmd' src host:/dest/
Обратите внимание, что использование -f'-p *.o' даже лучше, чем -f'- *.o', если есть вероятность, что структура каталогов могла измениться. Модификатор «p» обсуждается в разделе «Модификаторы правил фильтрации rsync».
Последнее замечание: если ваша оболочка не против неразвернутых подстановочных знаков, вы можете упростить ввод параметров фильтра, используя подчёркивание вместо пробела и опустив кавычки. Например, -f -_*.o -f -_cmd (и подобные) можно использовать вместо параметров фильтра выше.
Углублённое понимание правил фильтрации rsync
Rsync поддерживает правила включения/исключения старого стиля и правила фильтрации нового стиля. Старые правила указываются с помощью --include и --exclude, а также --include-from и --exclude-from. Они ограничены в поведении, но им не требуется префикс «-» или «+». Правило исключения старого стиля преобразуется в правило фильтрации «- name» (без модификаторов), а правило включения старого стиля преобразуется в правило фильтрации «+ name» (без модификаторов).
Rsync создаёт упорядоченный список правил фильтрации, как указано в командной строке и/или считано из файлов. Правила фильтрации нового стиля имеют следующий синтаксис:
ПРАВИЛО [ШАБЛОН_ИЛИ_ИМЯ_ФАЙЛА] ПРАВИЛО,МОДИФИКАТОРЫ [ШАБЛОН_ИЛИ_ИМЯ_ФАЙЛА]
Вы можете использовать короткие или длинные имена ПРАВИЛ, как описано ниже. Если вы используете правило с коротким именем, «,» (запятая) разделяющая ПРАВИЛО от МОДИФИКАТОРОВ, необязательно. ШАБЛОН или ИМЯ ФАЙЛА, которые следуют (если присутствуют), должны следовать либо за одним пробелом, либо за подчёркиванием (_). Любые дополнительные пробелы и/или подчёркивания считаются частью имени шаблона. Вот доступные префиксы правил:
exclude, «-»
указывает шаблон исключения, который (по умолчанию) является как hide (скрытием), так и protect (защитой).
include, «+»
указывает шаблон включения, который (по умолчанию) является как show (показом), так и risk (риском).
merge, «.»
указывает merge-file (файл слияния) на стороне клиента для чтения дополнительных правил.
dir-merge, «:»
указывает merge-file (файл слияния) для каждого каталога. Использование этого типа правила фильтрации требует, чтобы вы доверяли фильтрам проверки отправляющей стороны, потому что у него есть побочный эффект, упомянутый в параметре --trust-sender.
hide, «H»
указывает шаблон для сокрытия файлов при передаче. Эквивалентно исключению только отправителя, поэтому -f'H foo' также может быть указан как -f'-s foo'.
show, «S»
файлы, соответствующие шаблону, не скрываются. Эквивалентно включению только отправителя, поэтому -f'S foo' также может быть указан как -f'+s foo'.
protect, «P»
указывает шаблон для защиты файлов от удаления. Эквивалентно исключению только получателя, поэтому -f'P foo' также может быть указан как -f'-r foo'.
risk, «R»
файлы, соответствующие шаблону, не защищаются. Эквивалентно включению только получателя, поэтому -f'R foo' также может быть указан как -f'+r foo'.
clear, «!»
очищает текущий список включений/исключений (не принимает аргументов)
Когда правила считываются из файла (с использованием merge или dir-merge), пустые строки игнорируются, как и комментарии в целые строки, начинающиеся с '#' (правила имён файлов, содержащие символ решётки, не затрагиваются).
Обратите внимание также, что параметры --filter, --include и --exclude принимают по одному правилу/шаблону каждый. Чтобы добавить несколько параметров, вы можете повторить параметры в командной строке, использовать синтаксис merge-file (файл слияния) опции --filter или параметры --include-from/ --exclude-from.
Правила сопоставления шаблонов rsync. Правила поиска по шаблонам rsync
Большинство правил, упомянутых выше, принимают аргумент, который указывает, чему должно соответствовать правило. Если rsync рекурсивно проходит по иерархии каталогов, помните, что каждый шаблон сопоставляется с именем каждого каталога в нисходящем пути — таким способом rsync находит имена файлов для отправки.
Правила сопоставления для аргумента шаблона имеют несколько форм:
- Если шаблон содержит «/» (не считая завершающего слэша) или «**» (это тоже может соответствовать слэшу), то шаблон сопоставляется с полным именем пути, включая любые начальные каталоги в передаче. Если шаблон не содержит (не завершающего) «/» или «**», то он сопоставляется только с последним компонентом имени файла или имени пути. Например, «foo» означает, что конечный компонент пути должен быть «foo», в то время как «foo/bar» будет соответствовать последним 2 элементам пути (при условии, что оба элемента находятся в передаче).
- Шаблон, заканчивающийся на «/», соответствует только каталогу, а не обычному файлу, символической ссылке или устройству.
- Шаблон, начинающийся на «/», привязан к началу пути передачи, а не к концу. Например, «/foo/**» или «/foo/bar/**» соответствуют только начальным элементам в пути. Если правило считывается из файла фильтра для каждого каталога, сопоставляемый путь передачи будет начинаться на уровне файла фильтра, а не в верхней части передачи. Подробное обсуждение того, как указать шаблон, соответствующий корню передачи, смотрите в разделе «Привязка шаблонов включения/исключения rsync».
Rsync выбирает между простым сопоставлением строк и сопоставлением с подстановочными знаками, проверяя, содержит ли шаблон один из этих трёх подстановочных знаков: «*», «?» и «[»:
- «?» соответствует любому одиночному символу, кроме косой черты (слеша, «/»).
- «*» соответствует нулю или более символов, не являющихся косой чертой (слешем, «/»).
- «**» соответствует нулю или более символов, включая слеши.
- «[» вводит класс символов, например [a-z] или [[:alpha:]], который должен соответствовать одному символу.
- завершающий «***» в шаблоне – это сокращение, которое позволяет сопоставлять каталог и всё его содержимое с помощью одного правила. Например, указание «dir_name/***» будет соответствовать как каталогу «dir_name» (как если бы было указано «dir_name/»), так и всему в каталоге (как если бы было указано «dir_name/**»).
- «\» (обратная косая черта) может использоваться для экранирования подстановочного символа, но она интерпретируется как экранирующий символ, только если в шаблоне соответствия присутствует хотя бы один подстановочный символ. Например, шаблон «foo\bar» соответствует этому одиночному обратному слешу буквально, в то время как шаблон «foo\bar*» необходимо будет изменить на «foo\\bar*», чтобы избежать того, чтобы «\b» стал просто «b».
Вот несколько примеров поиска по шаблонам исключений/включений:
- Опция -f'- *.o' исключит все имена файлов, заканчивающиеся на .o
- Опция -f'- /foo' исключит файл (или каталог) с именем foo в корневом каталоге передачи
- Опция -f'- foo/' исключит любой каталог с именем foo
- Опция -f'- foo/*/bar' исключит любой файл/каталог с именем bar, который находится на два уровня ниже каталога с именем foo (если foo находится в передаче)
- Опция -f'- /foo/**/bar' исключит любой файл/каталог с именем bar, который находится на два или более уровней ниже каталога верхнего уровня с именем foo (обратите внимание, что /foo/bar не исключается этим)
- Опция -f'+ */' -f'+ *.c' -f'- *' включит все каталоги и исходные файлы .c, но ничего больше
- Опция -f'+ foo/' -f'+ foo/bar.c' -f'- *' включит только каталог foo и foo/bar.c (каталог foo должен быть явно включён, иначе он будет исключён частью правила «- *»)
Модификаторы правил фильтрации rsync
Следующие модификаторы принимаются после правила включения (+) или исключения (-):
- Символ «/» указывает, что правило включения/исключения должно сопоставляться с абсолютным путём текущего элемента. Например, -f'-/ /etc/passwd' исключит файл passwd всякий раз, когда передача отправляет файлы из каталога «/etc», а «-/subdir/foo» всегда исключит «foo», когда он находится в каталоге с именем «subdir», даже если «foo» находится в корне текущей передачи.
- Символ «!» указывает, что включение/исключение должно вступить в силу, если шаблон не совпадёт. Например, -f'-! */' исключит всё, кроме каталогов.
- Буква «C» используется для указания того, что все глобальные правила CVS-exclude должны быть вставлены как исключения вместо «-C». Аргумент не должен следовать.
- Буква «s» используется для указания того, что правило применяется к отправляющей стороне. Когда правило влияет на отправляющую сторону, оно влияет на то, какие файлы помещаются в список файлов отправителя. По умолчанию правило влияет на обе стороны, если только не указано --delete-excluded, в этом случае правила по умолчанию действуют только на стороне отправителя. Смотрите также правила hide (H) и show (S), которые являются альтернативным способом указания включений/исключений отправляющей стороны.
- Буква «r» используется для указания того, что правило применяется к принимающей стороне. Когда правило влияет на принимающую сторону, оно предотвращает удаление файлов. Смотрите модификатор «s» для получения дополнительной информации. Смотрите также правила protect (P) и risk (R), которые являются альтернативным способом указания включений/исключений принимающей стороны.
- Буква «p» указывает, что правило является необратимым, то есть оно игнорируется в удаляемых каталогах. Например, правила по умолчанию параметра --cvs-exclude (-C), которые исключают такие вещи, как «CVS» и «*.o», помечаются как необратимые и не предотвратят удаление каталога, удалённого на источнике, на месте назначения.
- Буква «x» указывает, что правило влияет на имена xattr в операциях копирования/удаления xattr (и, таким образом, игнорируется при сопоставлении имён файлов/каталогов). Если не указано ни одного правила сопоставления xattr, используется правило фильтрации xattr по умолчанию (смотрите параметр --xattrs).
Правила фильтрации merge-file (файла слияния) в rsync
Вы можете объединить целые файлы в правила фильтрации, указав правило фильтра merge («.») или dir-merge («:») (как описано в разделе «Правила фильтрации в rsync» выше).
Существует два типа объединённых файлов — одиночные («.») и по каталогу («:»). Одиночный файл объединения считывается один раз, и его правила включаются в список фильтров вместо правила «.». Для файлов объединения по каталогу rsync будет сканировать каждый каталог, который он проходит, на предмет указанного файла, объединяя его содержимое, если файл существует, в текущий список унаследованных правил. Эти файлы правил по каталогу должны быть созданы на отправляющей стороне, поскольку именно отправляющая сторона сканируется на предмет доступных для передачи файлов. Эти файлы правил также может потребоваться передать на принимающую сторону, если вы хотите, чтобы они влияли на то, какие файлы не удаляются (смотрите «Правила per-directory (на каждую директорию) и удаление» ниже).
Вот несколько примеров:
merge /etc/rsync/default.rules . /etc/rsync/default.rules dir-merge .per-dir-filter dir-merge,n- .non-inherited-per-dir-excludes :n- .non-inherited-per-dir-excludes
Следующие модификаторы принимаются после правила merge или dir-merge:
- «-» указывает, что файл должен состоять только из исключаемых шаблонов, без других правил разбора, кроме внутрифайловых комментариев.
- «+» указывает, что файл должен состоять только из включаемых шаблонов, без других правил разбора, кроме внутрифайловых комментариев.
- «C» – это способ указать, что файл должен быть прочитан совместимым с CVS образом. Это включает «n», «w» и «-», но также позволяет указать токен очистки списка («!»). Если имя файла не указано, предполагается «.cvsignore».
- «e» исключит имя файла слияния из передачи; например, «dir-merge,e .rules» похоже на «dir-merge .rules» и «- .rules».
- «n» указывает, что правила не наследуются подкаталогами.
- «w» указывает, что правила разделяются по словам пробелами вместо обычного разделения строк. Это также отключает комментарии. Примечание: пробел, который отделяет префикс от правила, обрабатывается особым образом, поэтому «- foo + bar» анализируется как два правила (предполагая, что анализ префикса также не был отключён).
- Вы также можете указать любой из модификаторов для правил «+» или «-» (описаны выше), чтобы правила, считываемые из файла, по умолчанию имели этот модификатор (за исключением модификатора «!», который не принесёт пользы). Например, «merge,-/.excl» будет обрабатывать содержимое .excl как исключения абсолютного пути, в то время как «dir-merge,s .filt» и «:sC» будут применять все свои правила для каждого каталога только на стороне отправки. Если правило слияния указывает стороны, на которые нужно повлиять (через модификатор s или r или оба), то правила в файле не должны указывать стороны (через модификатор или префикс правила, такой как hide).
Правила per-directory (для каждой директории) наследуются во всех поддиректориях директории, в которой был найден merge-file (файл слияния), если только не использовался модификатор «n». Правила каждой поддиректории имеют префикс для унаследованных правил для каждой директории от её родителей, что даёт новейшим правилам более высокий приоритет, чем унаследованные правила. Весь набор правил dir-merge группируется вместе там, где был указан файл слияния, поэтому можно переопределить правила dir-merge с помощью правила, которое было указано ранее в списке глобальных правил. Когда правило очистки списка («!») считывается из файла каталога, оно очищает только унаследованные правила для текущего файла слияния.
Другой способ предотвратить наследование одного правила из файла dir-merge – привязать его к начальной косой черте. Привязанные правила в merge-file (файле слияния) каталога относятся к каталогу merge-file (файла слияния), то есть являются относительными к нему, поэтому шаблон «/foo» будет соответствовать только файлу «foo» в каталоге, где был найден файл фильтра dir-merge.
Вот пример файла с фильтрами, который вы могли бы указать с помощью --filter=". file":
merge /home/user/.global-filter - *.gz dir-merge .rules + *.[ch] - *.o - foo*
Это объединит содержимое файла /home/user/.global-filter в начале списка, а также превратит имя файла «.rules» в файл фильтра для каждого каталога. Все правила, считанные до начала сканирования каталога, следуют глобальным правилам привязки (т. е. начальная косая черта совпадает с корнем передачи).
Если указан merge-file (файл слияния) для per-directory (каждого каталога) с путём, который является родительским каталогом первого каталога передачи, rsync просканирует все родительские каталоги от этой начальной точки до каталога передачи для указанного файла per-directory (для каждого каталога). Например, вот общий фильтр (смотрите -F):
--filter=': /.rsync-filter'
Это правило указывает rsync сканировать файл .rsync-filter во всех каталогах от корня вниз до родительского каталога передачи до начала обычного сканирования каталога файла в каталогах, которые отправляются как часть передачи. (Примечание: для демона rsync корень всегда совпадает с «путём» модуля.)
Некоторые примеры этого предварительного сканирования файлов по каталогам:
rsync -avF /src/path/ /dest/dir rsync -av --filter=': ../../.rsync-filter' /src/path/ /dest/dir rsync -av --filter=': .rsync-filter' /src/path/ /dest/dir
Первые две команды выше будут искать «.rsync-filter» в «/» и «/src» перед тем, как начнётся обычное сканирование, ищущее файл в «/src/path» и его подкаталогах. Последняя команда избегает сканирования родительского каталога и ищет только файлы «.rsync-filter» в каждом каталоге, который является частью передачи.
Если вы хотите включить содержимое «.cvsignore» в свои шаблоны, вам следует использовать правило «:C», которое создаёт dir-merge файла .cvsignore, но анализируется в CVS-совместимой манере. Вы можете использовать это, чтобы повлиять на то, где опция --cvs-exclude (-C) включает файл .cvsignore для каталога в ваши правила, поместив «:C» в любом месте в ваших правилах фильтра. Без этого rsync добавил бы правило dir-merge для файла .cvsignore в конец всех ваших других правил (придавая ему более низкий приоритет, чем ваши правила командной строки). Например:
cat <<EOT | rsync -avC --filter='. -' a/ b + foo.o :C - *.old EOT rsync -avC --include=foo.o -f :C --exclude='*.old' a/ b
Обе приведённые выше команды rsync идентичны. Каждая из них объединит все правила .cvsignore для каждого каталога в середине списка, а не в конце. Это позволяет их правилам, специфичным для каталога, заменять правила, следующие за :C, а не подчиняться всем вашим правилам. Чтобы повлиять на другие правила исключения CVS (т. е. список исключений по умолчанию, содержимое $HOME/.cvsignore и значение $CVSIGNORE), вам следует опустить параметр командной строки -C и вместо этого вставить правило «-C» в ваши правила фильтрации; например, «--filter=-C».
Правила фильтрации очистки списка rsync
Вы можете очистить текущий список включения/исключения с помощью правила фильтра «!» (как представлено в разделе «Правила фильтрации в rsync» выше). «Текущий» список – это либо глобальный список правил (если правило встречается при разборе параметров фильтра), либо набор правил для каждого каталога (которые наследуются в их собственном подсписке, поэтому подкаталог может использовать это для очистки родительских правил).
Привязка шаблонов включения/исключения rsync
Как упоминалось ранее, глобальные шаблоны включения/исключения закреплены в «корне передачи» (в отличие от шаблонов per-directory (для каждого каталога), которые закреплены в каталоге merge-file (файла слияния). Если вы представляете передачу как поддерево имён, которые отправляются от отправителя к получателю, то корень передачи — это то место, где дерево начинает дублироваться в целевом каталоге. Этот корень управляет тем, где совпадают шаблоны, начинающиеся с /.
Поскольку сопоставление выполняется относительно корня передачи, изменение завершающего слеша в исходном пути или изменение использования параметра --relative влияет на путь, который вам нужно использовать в сопоставлении (в дополнение к изменению того, какая часть дерева файлов дублируется на целевом хосте). Следующие примеры демонстрируют это.
Допустим, мы хотим сопоставить два исходных файла, один с абсолютным путём «/home/me/foo/bar», а другой с путём «/home/you/bar/baz». Вот как отличаются различные варианты команд для передачи из 2 источников:
Пример команды: rsync -a /home/me /home/you /dest +/- шаблон: /me/foo/bar +/- шаблон: /you/bar/baz Целевой файл: /dest/me/foo/bar Целевой файл: /dest/you/bar/baz Пример команды: rsync -a /home/me/ /home/you/ /dest +/- шаблон: /foo/bar (обратите внимание на отсутствие "me") +/- шаблон: /bar/baz (обратите внимание на отсутствие "you") Целевой файл: /dest/foo/bar Целевой файл: /dest/bar/baz Пример команды: rsync -a --relative /home/me/ /home/you /dest +/- шаблон: /home/me/foo/bar (обратите внимание на полный путь) +/- шаблон: /home/you/bar/baz (то же самое) Целевой файл: /dest/home/me/foo/bar Целевой файл: /dest/home/you/bar/baz Пример команды: cd /home; rsync -a --relative me/foo you/ /dest +/- шаблон: /me/foo/bar (начинается с указанного пути) +/- шаблон: /you/bar/baz (то же самое) Целевой файл: /dest/me/foo/bar Целевой файл: /dest/you/bar/baz
Самый простой способ узнать, какое имя следует фильтровать, — просто посмотреть на вывод при использовании --verbose и поставить / перед именем (используйте опцию --dry-run, если вы ещё не готовы копировать файлы).
Правила per-directory (на каждую директорию) и удаление
Без опции удаления правила для каталога актуальны только на стороне отправки, поэтому вы можете смело исключать сами файлы слияния, не влияя на передачу. Чтобы упростить это, модификатор «e» добавляет это исключение для вас, как показано в этих двух эквивалентных командах:
rsync -av --filter=': .excl' --exclude=.excl host:src/dir /dest rsync -av --filter=':e .excl' host:src/dir /dest
Однако, если вы хотите выполнить удаление на стороне получателя И хотите, чтобы некоторые файлы были исключены из удаления, вам нужно убедиться, что сторона получателя знает, какие файлы следует исключить. Самый простой способ – включить файлы слияния для каждого каталога в передачу и использовать --delete-after, поскольку это гарантирует, что принимающая сторона получит все те же правила исключения, что и отправляющая сторона, прежде чем она попытается что-либо удалить:
rsync -avF --delete-after host:src/dir /dest
Однако, если файлы слияния не являются частью передачи, вам нужно будет либо указать некоторые глобальные правила исключения (т. е. указать в командной строке), либо вам нужно будет поддерживать собственные файлы слияния для каждого каталога на принимающей стороне. Пример первого варианта следующий (предположим, что удалённые файлы .rules исключают сами себя):
rsync -av --filter=': .rules' --filter='. /my/extra.rules' --delete host:src/dir /dest
В приведённом выше примере файл extra.rules может влиять на обе стороны передачи, но (на отправляющей стороне) правила подчиняются правилам, объединенным из файлов .rules, поскольку они были указаны после правила слияния по каталогам.
В одном последнем примере удалённая сторона исключает файлы .rsync-filter из передачи, но мы хотим использовать наши собственные файлы .rsync-filter для управления тем, что удаляется на принимающей стороне. Для этого мы должны специально исключить файлы слияния по каталогам (чтобы они не удалялись), а затем поместить правила в локальные файлы, чтобы контролировать то, что ещё не должно удаляться. Например, одна из этих команд:
rsync -av --filter=':e /.rsync-filter' --delete host:src/dir /dest rsync -avFF --delete host:src/dir /dest
Правила передачи
В дополнение к «Правила фильтрации в rsync», которые влияют на рекурсивное сканирование файлов, которое генерирует список файлов на отправляющей и (при удалении) принимающей сторонах, существуют правила передачи. Эти правила влияют на то, какие файлы генератор решает передать без побочных эффектов правил фильтра исключения. Правила передачи влияют только на файлы и никогда на каталоги.
Поскольку правило передачи не влияет на то, что попадает в список файлов отправителя (и получателя), оно не может повлиять на то, какие файлы будут удалены на принимающей стороне. Например, если файл «foo» присутствует в списке отправителя, но его размер таков, что он пропускается из-за правила передачи, принимающая сторона не запрашивает файл. Однако его присутствие в списке файлов означает, что проход удаления не удалит соответствующий файл с именем «foo» на принимающей стороне. С другой стороны, исключение (скрытие) файла «foo» на стороне сервера исключает файл из списка файлов сервера, а при отсутствии исключения (защиты) на стороне получателя получатель удалит соответствующий файл с именем «foo», если запрашиваются удаления.
Учитывая, что файлы все ещё находятся в списке файлов отправителя, параметр --prune-empty-dirs не будет считать каталог пустым, даже если он содержит только файлы, которые были пропущены правилами передачи.
Аналогично, правило передачи не оказывает дополнительного влияния на то, какие файлы удаляются на стороне получателя, поэтому установка максимального размера файла для передачи не предотвращает удаление больших файлов.
Примеры правил передачи включают алгоритм «быстрой проверки» по умолчанию (который сравнивает размер и время изменения), параметр --update, параметр --max-size, параметр --ignore-non-existing и несколько других.
Пакетный режим
Пакетный режим можно использовать для применения одного и того же набора обновлений ко многим идентичным системам. Предположим, что есть дерево, которое реплицируется на нескольких хостах. Теперь предположим, что в исходное дерево были внесены некоторые изменения, и эти изменения необходимо распространить на другие хосты. Чтобы сделать это в пакетном режиме, rsync запускается с опцией --write-batch, чтобы применить изменения, внесённые в исходное дерево, к одному из целевых деревьев. Опция --write-batch заставляет клиента rsync сохранять в «пакетном файле» всю информацию, необходимую для повторения этой операции с другими идентичными целевыми деревьями.
Однократное создание пакетного файла избавляет от необходимости выполнять проверку состояния файла, контрольную сумму и генерацию блока данных более одного раза при обновлении нескольких целевых деревьев. Многоадресные транспортные протоколы можно использовать для передачи файлов пакетного обновления параллельно на несколько хостов одновременно, вместо того чтобы отправлять одни и те же данные на каждый хост по отдельности.
Чтобы применить записанные изменения к другому целевому дереву, запустите rsync с опцией --read-batch, указав имя того же пакетного файла и целевое дерево. Rsync обновляет целевое дерево, используя информацию, сохранённую в пакетном файле.
Для вашего удобства файл сценария также создаётся при использовании опции --write-batch: он будет назван так же, как и пакетный файл с добавлением «.sh». Этот файл сценария содержит командную строку, подходящую для обновления дерева назначения с использованием связанного пакетного файла. Его можно выполнить с помощью оболочки Bourne (или Bourne-подобной), при необходимости передав альтернативное имя пути к дереву назначения, которое затем используется вместо исходного пути назначения. Это полезно, когда путь к дереву назначения на текущем хосте отличается от того, который использовался для создания пакетного файла.
Примеры:
rsync --write-batch=foo -a host:/source/dir/ /adest/dir/ scp foo* remote: ssh remote ./foo.sh /bdest/dir/ rsync --write-batch=foo -a /source/dir/ /adest/dir/ ssh remote rsync --read-batch=- -a /bdest/dir/ <foo
В этих примерах rsync используется для обновления /adest/dir/ из /source/dir/, а информация для повторения этой операции сохраняется в «foo» и «foo.sh». Затем хост «remote» обновляется пакетными данными, которые поступают в каталог /bdest/dir. Различия между двумя примерами показывают некоторую гибкость, которую вы имеете в работе с пакетами:
- Первый пример показывает, что начальная копия не обязательно должна быть локальной – вы можете отправлять или извлекать данные на/с удалённого хоста, используя либо синтаксис remote-shell, либо синтаксис демона rsync, по желанию.
- Первый пример использует созданный файл «foo.sh» для получения правильных параметров rsync при запуске команды с --read-batch на удалённом хосте.
- Второй пример считывает пакетные данные через стандартный ввод, поэтому пакетный файл не нужно сначала копировать на удалённую машину. В этом примере скрипт foo.sh не используется, поскольку он должен использовать изменённую опцию --read-batch, но вы можете отредактировать файл скрипта, если хотите его использовать (просто убедитесь, что никакая другая опция не пытается использовать стандартный ввод, например, опция --exclude-from=-).
Предостережения:
Опция --read-batch ожидает, что обновляемое ею целевое дерево будет идентично целевому дереву, которое использовалось для создания набора файлов пакетного обновления. При обнаружении разницы между целевыми деревьями обновление может быть отменено с предупреждением (если файл уже выглядит актуальным) или может быть предпринята попытка обновления файла, а затем, если файл не прошёл проверку, обновление будет отменено с ошибкой. Это означает, что можно безопасно повторно запустить операцию --read-batch, если команда была прервана. Если вы хотите принудительно выполнить пакетное обновление всегда независимо от размера и даты файла, используйте опцию -I (при чтении пакета). Если произошла ошибка, дерево назначения, вероятно, будет в частично обновлённом состоянии. В этом случае rsync можно использовать в его обычном (не пакетном) режиме работы для исправления дерева назначения.
Версия rsync, используемая во всех назначениях, должна быть как минимум такой же новой, как и та, которая использовалась для создания пакетного файла. Rsync завершится с ошибкой, если версия протокола в пакетном файле слишком новая для обработки rsync с опцией --read-batch. Смотрите также параметр --protocol, чтобы узнать, как заставить создающий rsync создать пакетный файл, который может понять старый rsync. (Обратите внимание, что пакетные файлы изменили формат в версии 2.6.3, поэтому смешивание версий, более старых, с более новыми версиями, не будет работать.)
При чтении пакетного файла rsync принудительно установит значение определённых параметров в соответствии с данными в пакетном файле, если вы не установили их такими же, как в команде пакетной записи. Другие параметры можно (и нужно) изменить. Например, --write-batch меняется на --read-batch, --files-from удаляется, а параметры --filter / --include / --exclude не нужны, если не указан один из параметров --delete.
Код, который создаёт файл BATCH.sh, преобразует любые параметры filter/include/exclude в один список, который добавляется как документ «here» к файлу скрипта оболочки. Опытный пользователь может использовать это для изменения списка исключений, если требуется изменить то, что удаляется с помощью --delete. Обычный пользователь может игнорировать эту деталь и просто использовать скрипт оболочки как простой способ запустить соответствующую команду --read-batch для пакетных данных.
Первоначальный пакетный режим в rsync был основан на «rsync+», но последняя версия использует новую реализацию.
Символические ссылки
Возможны три основных варианта поведения, когда rsync встречает символическую ссылку в каталоге на ИСТОЧНИКЕ.
По умолчанию символические ссылки вообще не передаются. Для всех существующих символических ссылок выдаётся сообщение «пропуск нерегулярного» файла.
Если указано --links, то символические ссылки добавляются к передаче (вместо того, чтобы быть по-настоящему проигнорированными), и обработка по умолчанию заключается в их повторном создании с той же целью в месте назначения. Обратите внимание, что --archive подразумевает --links.
Если указано --copy-links, то символические ссылки «сворачиваются» путём копирования их референта, а не символической ссылки.
Rsync также может различать «безопасные» и «небезопасные» символические ссылки. Примером, где это может быть использовано, является зеркало веб-сайта, которое хочет убедиться, что копируемый модуль rsync не включает символические ссылки на /etc/passwd в общедоступном разделе сайта. Использование --copy-unsafe-links приведёт к тому, что все ссылки будут скопированы как файл, на который они указывают в месте назначения. Использование --safe-links приведёт к тому, что небезопасные ссылки будут пропущены получателем. (Обратите внимание, что вы должны указать или подразумевать --links для --safe-links, чтобы иметь какой-либо эффект.)
Символические ссылки считаются небезопасными, если они являются абсолютными символическими ссылками (начинаются с /), пустыми или если они содержат достаточно компонентов «..» для подъёма выше чем корень директории, участвующей в передачи файлов.
Вот краткое изложение того, как интерпретируются параметры символических ссылок. Список составлен в порядке приоритета, поэтому, если ваша комбинация параметров не указана, используйте первую строку, которая является полным подмножеством ваших параметров:
--copy-links
Превратить все символические ссылки в обычные файлы и каталоги (не оставляя символических ссылок в передаче для влияния других параметров).
--copy-dirlinks
Превратить только символические ссылки на каталоги в настоящие каталоги, оставив все остальные символические ссылки обрабатываться, как описано ниже.
--links --copy-unsafe-links
Превратить все небезопасные символические ссылки в файлы и создать все безопасные символические ссылки.
--copy-unsafe-links
Превратить все небезопасные символические ссылки в файлы, без шума пропустить все безопасные символические ссылки.
--links --safe-links
Получатель пропускает создание небезопасных символических ссылок, найденных в передаче, и создаёт безопасные.
--links
Воссоздать все символические ссылки.
О влиянии --munge-links смотрите обсуждение в разделе этой опции.
Обратите внимание, что опция --keep-dirlinks не влияет на символические ссылки в передаче, а вместо этого влияет на то, как rsync обрабатывает символическую ссылку на каталог, который уже существует на принимающей стороне. Смотрите раздел этой опции для предупреждения.
Диагностика rsync
Rsync иногда выдаёт сообщения об ошибках, которые могут показаться немного загадочными. Одна из них, которая, кажется, вызывает больше всего путаницы, — это «protocol version mismatch – is your shell clean?» («несовпадение версии протокола – ваша оболочка чиста?»).
Это сообщение обычно вызвано тем, что ваши скрипты запуска или удалённая оболочка создают нежелательный мусор в потоке, который rsync использует для своей транспортировки. Чтобы диагностировать эту проблему, запустите удалённую оболочку следующим образом:
ssh УДАЛЁННЫЙ_ХОСТ /bin/true > out.dat
затем посмотрите на out.dat. Если всё работает правильно, то out.dat должен быть файлом нулевой длины. Если вы получаете указанную выше ошибку от rsync, то вы, вероятно, обнаружите, что out.dat содержит какой-то текст или данные. Посмотрите на содержимое и попытайтесь выяснить, что её создаёт. Наиболее распространённой причиной являются неправильно настроенные скрипты запуска оболочки (например, .cshrc или .profile), которые содержат выходные операторы для неинтерактивных входов в систему.
Если у вас возникли проблемы с отладкой шаблонов фильтров, попробуйте указать параметр -vv. На этом уровне детализации rsync покажет, почему каждый отдельный файл включён или исключён.
Значения выхода rsync
- 0 – Успех
- 1 – Ошибка синтаксиса или использования
- 2 – Несовместимость протокола
- 3 – Ошибки выбора входных/выходных файлов, каталогов
- 4 – Запрошенное действие не поддерживается. Либо:
- была предпринята попытка манипулировать 64-битными файлами на платформе, которая не может их поддерживать
- o была указана опция, поддерживаемая клиентом, но не сервером
- 5 – Ошибка запуска клиент-серверного протокола
- 6 – Демон не может добавить в файл журнала
- 10 – Ошибка ввода-вывода сокета
- 11 – Ошибка ввода-вывода файла
- 12 – Ошибка потока данных протокола rsync
- 13 – Ошибки диагностики программы
- 14 – Ошибка в коде IPC
- 20 – Получен SIGUSR1 или SIGINT
- 21 – Некоторая ошибка, возвращённая waitpid()
- 22 – Ошибка выделения буферов основной памяти
- 23 – Частичная передача из-за ошибки
- 24 – Частичная передача из-за исчезнувших исходных файлов
- 25 – Ограничение --max-delete остановило удаления
- 30 – Тайм-аут при отправке/получении данных
- 35 – Тайм-аут ожидания подключения демона
Переменные окружения rsync
CVSIGNORE
Переменная окружения CVSIGNORE дополняет любые шаблоны игнорирования в файлах .cvsignore. Дополнительные сведения смотрите в параметре --cvs-exclude.
RSYNC_ICONV
Укажите значение по умолчанию --iconv с помощью этой переменной окружения. Впервые поддерживается в версии 3.0.0.
RSYNC_OLD_ARGS
Укажите «1», если хотите, чтобы параметр --old-args был включён по умолчанию, «2» (или больше), если хотите, чтобы он был включён в состоянии повторяющихся параметров, или «0», чтобы убедиться, что он отключён по умолчанию. Если эта переменная окружения имеет ненулевое значение, она заменяет переменную RSYNC_PROTECT_ARGS.
Эта переменная игнорируется, если в командной строке указаны --old-args, --no-old-args или --secluded-args.
Впервые поддерживается в версии 3.2.4.
RSYNC_PROTECT_ARGS
Укажите ненулевое числовое значение, если вы хотите, чтобы параметр --secluded-args был включён по умолчанию, или нулевое значение, чтобы убедиться, что он отключён по умолчанию.
Эта переменная игнорируется, если в командной строке указаны параметры --secluded-args, --no-secluded-args или --old-args.
Впервые поддерживается в версии 3.1.0. Начиная с версии 3.2.4, эта переменная игнорируется, если параметр RSYNC_OLD_ARGS имеет ненулевое значение.
RSYNC_RSH
Эта переменная среды позволяет переопределить оболочку по умолчанию, используемую в качестве транспорта для rsync. Параметры командной строки разрешены после имени команды, как и в параметре --rsh (-e).
RSYNC_PROXY
Эта переменная среды позволяет перенаправить клиента rsync на использование веб-прокси при подключении к демону rsync. Вам следует установить RSYNC_PROXY на пару имя хоста:порт.
RSYNC_PASSWORD
Эта переменная среды позволяет вам задать пароль для подключения демона rsync, что позволяет избежать запроса пароля. Обратите внимание, что это не предоставляет пароль для удалённого транспорта оболочки, такого как ssh (смотрите документацию, как это сделать).
USER или LOGNAME
Переменные среды USER или LOGNAME используются для определения имени пользователя по умолчанию, отправляемого демону rsync. Если ни один из них не задан, имя пользователя по умолчанию равно «nobody». Если заданы оба, приоритет имеет USER.
RSYNC_PARTIAL_DIR
Эта переменная среды указывает каталог для использования при передаче --partial, не подразумевая, что частичные передачи должны быть включены. Подробности смотрите в параметре --partial-dir.
RSYNC_COMPRESS_LIST
Эта переменная среды позволяет вам настраивать согласование алгоритма сжатия, указывая альтернативный порядок или сокращённый список имён. Используйте команду rsync --version, чтобы увидеть доступные имена сжатия. Подробности см. в параметре --compress.
RSYNC_CHECKSUM_LIST
Эта переменная среды позволяет вам настраивать согласование алгоритма контрольной суммы, указывая альтернативный порядок или сокращённый список имён. Используйте команду rsync --version, чтобы увидеть доступные имена контрольных сумм. Подробности смотрите в параметре --checksum-choice.
RSYNC_MAX_ALLOC
Эта переменная среды устанавливает максимальное выделение, как если бы вы использовали параметр --max-alloc.
RSYNC_PORT
Эта переменная среды не считывается rsync, а вместо этого устанавливается в его подсреде, когда rsync запускает удалённую оболочку в сочетании с подключением демона. Это позволяет скрипту, такому как rsync-ssl, знать номер порта, который пользователь указал в командной строке.
HOME
Эта переменная среды используется для поиска файла .cvsignore пользователя по умолчанию.
RSYNC_CONNECT_PROG
Эта переменная среды в основном используется в отладочных настройках для настройки программы, используемой при создании подключения демона. Подробную информацию смотрите в разделе «Подключение к демону (службе) rsync».
RSYNC_SHELL
Эта переменная среды в основном используется в отладочных настройках для настройки программы на запуск программы, указанной в RSYNC_CONNECT_PROG. Подробную информацию смотрите в разделе «Подключение к демону (службе) rsync».
Файлы rsync
/etc/rsyncd.conf или rsyncd.conf
Смотрите также
Смотрите также другие страницы справки имеющие отношение к rsync:
- rsyncd.conf
- rsync-ssl
- rrsync
Ошибки rsync
- Время передаётся как значения *nix time_t.
- При передаче в файловые системы FAT rsync может повторно синхронизировать немодифицированные файлы. Смотрите комментарии к параметру --modify-window.
- Права доступа к файлам, устройства и т. д. передаются как собственные числовые значения.
- Смотрите также комментарии к параметру --delete.
Пожалуйста, сообщайте об ошибках! Смотрите веб-сайт по адресу: https://rsync.samba.org/.
Версия rsync
Эта страница руководства актуальна для версии 3.4.1 rsync.
Внутренние параметры rsync
Параметры --server и --sender используются внутри rsync и никогда не должны вводиться пользователем в обычных обстоятельствах. Некоторые сведения об этих параметрах могут потребоваться в определённых сценариях, например, при настройке входа, который может запускать только команду rsync. Например, в каталоге support дистрибутива rsync есть пример скрипта с именем rrsync (для ограниченного rsync), который можно использовать с ограниченным входом ssh. Смотрите также: https://github.com/RsyncProject/rsync/blob/master/support/rrsync
Онлайн ресурсы rsync
Rsync распространяется по лицензии GNU General Public License. Подробности смотрите в файле COPYING (https://github.com/RsyncProject/rsync/blob/master/COPYING).
Веб-сайт rsync доступен по адресу https://rsync.samba.org/. На сайте есть FAQ-O-Matic, который может охватывать вопросы, на которые нет ответов в этой странице руководства.
Проект rsync на github: https://github.com/RsyncProject/rsync.
Мы будем рады услышать от вас, если вам понравилась эта программа. Пожалуйста, свяжитесь с почтовой рассылкой по адресу rsync@lists.samba.org.
Эта программа использует превосходную библиотеку сжатия zlib, написанную Жаном-Лу Гейли и Марком Адлером.
Благодарности
Особая благодарность: Джону Ван Эссену, Мэтту МакКатчену, Уэсли В. Терпстре, Дэвиду Дайкстре, Джосу Бакусу, Себастьяну Крамеру, Мартину Пулу и нашему ушедшему, но не забытому товарищу Дж. В. Шульцу.
Также спасибо Ричарду Бренту, Брендану Маккею, Биллу Уэйту, Стивену Ротвеллу и Дэвиду Беллу. Я, возможно, пропустил некоторых людей, прошу прощения, если это так.
Авторы Rsync
Изначально Rsync был написан Эндрю Триджелом (Andrew Tridgell) и Полом Маккеррасом (Paul Mackerras). Многие люди со всего мира помогали поддерживать и улучшать его.
Списки рассылки для поддержки и разработки доступны по адресу https://lists.samba.org/.
Связанные статьи:
- Справочная информация по конфигурационному файлу rsyncd.conf на русском языке (настройка службы rsync) (94.3%)
- Какие есть полезные инструменты с интерфейсом командной строки для системных администраторов Linux (50%)
- Установка и использование Docker в Linux (Debian, Ubuntu, Arch Linux) (50%)
- Программы для бенчмарка CPU в Linux (50%)
- Как в Linux подключить новый диск, разметить и отформатировать разделы (50%)
- Как в Linux изменить login shell (оболочку входа в систему). Инструкция по команде chsh (RANDOM - 17.9%)