Может кто-нибудь объяснить мне эту команду rsync?

11

Кто-нибудь может сказать мне, что это делает?

rsync -uva --delete /srv/bkp01 /srv/offbk2/ > ~/offbkp01.log

Удаляет ли bkp01и offbk2отправляет логи offbkp01.log?

user276049
источник
Он не может читать страницы руководства. Что заставляет вас думать, что он читает ответы здесь? XD
Мерцает
2
Кому нужны страницы руководства, если у вас естьhellhell.com/ …?!
Том

Ответы:

33

Чтобы разбить это на части, есть два основных раздела, за которыми следуют резюме и примечания:

  • Команда rsync:
    rsync -uva --delete /srv/bkp01 /srv/offbk2/
  • перенаправление вывода выполняется оболочкой, выполняющей команду rsync:
    rsync-command > ~/offbkp01.log

rsync команда:

Базовая команда:

  • rsync - Я предполагаю, что это не нуждается в объяснении (но предоставит по запросу).

Опции команды:

  • -uva - Набор опций с одним символом (короткая, а затем длинная форма):

    • -u --update- Сообщает rsync, что все модификации должны применяться только к файлам в месте назначения того же возраста (и разных размеров) или старше, чем файлы в источнике. То есть rsync должен передавать только те изменения из источника, которые будут обновлять место назначения, но он не должен вносить никаких изменений, из-за которых файл назначения становится более старой версией.

      Есть несколько исключений. Различия в типах (например, один файл, другой каталог) приведет к обновлению независимо от даты. Симлинки и другие специальные файлы игнорируют эту опцию. И, что важно, это не влияет на то, какие файлы будут удалены.

    • -v --verbose- Увеличивает количество информации, выводимой rsync во время выполнения. Без этого rsync ничего не напечатает (почти?). С этой опцией, как есть, rsync сообщит вам, какие файлы передаются, и поместит сводку в конце. vЧем больше s, тем больше печатается информации, хотя на странице руководства сказано, что более двух vs следует использовать только при отладке.
    • -a --archive- Это эквивалентно нескольким другим параметрам ( -rlptgD), упакованным вместе. Как следует из длинного названия, это быстрый способ установить множество общих параметров для архивирования файлов и каталогов. Так и будет:
      • -r --recursive- Говорит rsync, чтобы копировать каталоги рекурсивно. Без этого или более конкретного -d --dirsпараметра rsync просто пропустит все каталоги, с которыми он столкнулся (и сообщит вам об этом в своих выходных данных).
      • -l --links- Если источником является символическая ссылка, создайте символическую ссылку в месте назначения. В зависимости от других параметров символические ссылки могут быть пропущены или превращены в полную отдельную копию (т. Е. Настоящий каталог с содержимым (или другой копией файла) вместо символической ссылки).
      • -p --perms - Устанавливает разрешения для файлов назначения так же, как исходные файлы.
      • -t --times- Устанавливает время модификации файлов назначения так же, как исходные файлы. Поскольку синхронизация этих времен делает алгоритм rsync более эффективным, вы, как правило, всегда хотите, чтобы это использовалось явно или неявно.
      • -g --group- Устанавливает атрибут группы назначения так же, как источник. По умолчанию ассоциируется по имени, но в некоторых случаях будет использовать идентификатор группы. Если принимающий rsync не запускается как суперпользователь (или имитирует его --fake-super), можно установить только те группы, членом которых является пользователь, который вызвал rsync на принимающей стороне. В противном случае для группы будет просто установлена ​​группа по умолчанию того же пользователя, о котором упоминалось ранее.
      • -D- эквивалентен вариантам --devicesи --specialsвместе. Они имеют в виду:
        • --devices- Символьные и блочные файлы устройства передаются. Не имеет эффекта, если получающий rsync не запущен как суперпользователь (или имитирует его --fake-super).
        • --specials - Специальные файлы (например, сокеты) передаются (в противном случае они не будут).
  • --delete- Говорит rsync удалить файлы, которые находятся в месте назначения, но не в источнике. Это НЕ зависит от опции обновления, установленной выше (действительно, как это может быть, так как большинство файловых систем не сохранит необходимые данные, чтобы увидеть, какое действие было более новым?). Эта опция действует на источники после расширения по шаблону / glob, поэтому dir / * не совпадает с dir /. Некоторые важные замечания:
    • Это, очевидно, опасно. Вероятно, вам следует --dry-runсначала попробовать его с опцией, которая выполнит притворную передачу, которая позволит вам убедиться, что непреднамеренные изменения не внесены.
    • Если есть какие-либо ошибки ввода-вывода (ввода / вывода) - то есть, если что-то пойдет не так при передаче, чтении или записи изменений - удаление будет игнорироваться с этого момента. Это может быть отменено с помощью --ignore-errorsопции, хотя вы, вероятно, не хотите / не хотите этого делать.
    • Есть несколько вариантов алгоритма удаления, о которых вы можете прочитать больше на странице руководства. Когда принимающий rsync имеет версию 3.0.0 или новее (на момент написания этой статьи), используется --delete-duringалгоритм. Если получатель старше, то --delete-beforeиспользуется. Если важно, чтобы файлы сохраняли определенную согласованность при возникновении ошибки (например, ничего не удаляя до тех пор, пока не будут сделаны все другие изменения), вам следует использовать более конкретный параметр, чем параметр по умолчанию.

Командные локации:

  • /srv/bkp01- Исходный файл или каталог. Существуют некоторые подробные правила о том, что это означает, если в конце каталога есть / нет косой черты, и если существует другой каталог. Вы можете увидеть подробности в разделе ИСПОЛЬЗОВАНИЕ справочной страницы, но здесь отсутствие косой черты означает, что этот каталог будет скопирован в место назначения, а не содержимое этого каталога будет скопировано в место назначения. То же самое, если это файл, а не каталог.
  • /srv/offbk2/- Каталог назначения. В общем, это всегда будет последний элемент, перечисленный в разделе команды rsync, если только параметр не используется для его указания в другом месте команды.

Перенаправление вывода оболочки:

Команды оболочки:

  • >- Это перенаправляет стандартный вывод (стандартный вывод) из того, что находится слева, в файл справа, становится его содержимым и создает файл (если это возможно), если он еще не существует. Некоторые заметки:
    • Вы также можете перенаправить stderr (стандартный вывод ошибок) в тот же файл , добавив 2>&1в самый конец команды выше. Порядок важен, поэтому будьте осторожны, обобщая, где его разместить. Магическое число 1относится к stdout, 2относится к stderr, &является (по существу) «адресом», а полный фрагмент команды означает «перенаправить вывод stderr в поток stdout».
    • Если вы хотите добавить файл журнала вместо его замены, вы можете использовать >>вместо этого. Метод перенаправления stderr в то же место остается прежним.
    • Вы можете отправить stdout и stderr в разные места с помощью 1> stdout_file 2> stderr_file. Вы также можете использовать >>вместо >этой команды, добавив вместо замены.

Переменные оболочки / специальные символы:

  • ~ - Это сокращение для домашнего каталога текущего пользователя и является частью следующего бита.

Расположение на уровне оболочки:

  • ~/offbkp01.log- файл offbkp01.log в домашнем каталоге текущего пользователя. Это где вывод команды rsync будет помещен из-за перенаправления с >.

Резюме:

Таким образом, эта команда будет:

  • Скопируйте все обычные файлы, каталоги, символические ссылки, специальные файлы и файлы устройств
  • а также большинство, если не все, важные атрибуты файла ,
  • от /srv/bkp01 ,
  • чтобы /srv/offbk2/bkp01 ,
  • и он удалит все, /srv/offbk2/что не входит/srv/bkp01 , при следующих условиях:

    • Если обычный файл, каталог или символическая (?) Имеет время модификации на /srv/offbk2/ том , что новее , чем время модификации на /srv/bkp01, он не будет обновляться , если оба элемента все еще тот же самый тип (обычный файл, каталог или символическая (? )).
  • Кроме того, rsync выведет некоторую информацию о том, что он делает (в частности, какие файлы передаются, и итоговую сводку ), которую оболочка запишет в файл ~/offbkp01.log . Этот файл журнала будет создан заново, если он еще не существует, и будет перезаписан, если он уже существует.


NB: --fake-superэто опция, используемая для того, чтобы rsync имитировал действия суперпользователя. Это делается с помощью расширенных атрибутов файлов для хранения атрибутов, которые он не может установить, не имея больших привилегий. Реальная версия каждого атрибута установлена ​​на то, что имеет смысл, учитывая доступные параметры и привилегии. Хотя это делает удобным создание некоторых резервных копий, даже если у вас нет привилегий суперпользователя, следует также отметить, что это может представлять риск для безопасности, превышающий использование rsync в целом, поскольку реальные атрибуты безопасности могут быть не установлены правильно, хотя информация о них была скопирована.


Источник: много времени работал с rsync и читал его man-страницу .

Мэтью Вирт
источник
8
Это один впечатляющий первый пост. Надеюсь, вы остаетесь вокруг!
тердон
Я второй @terdon .. Черт! он в огне. Продолжайте в том же духе. Это действительно впечатляющий ответ.
AzkerM
Кажется, что ответ похож на «Шерлок Холмс», мне нравится ваш стиль объяснения ..
Рахул Патил
9

Из руководства:

--удалять

Это говорит rsync об удалении посторонних файлов с принимающей стороны (тех, которые не на отправляющей стороне), но только для каталогов, которые синхронизируются. Вы должны были попросить rsync отправить весь каталог (например, «dir» или «dir /») без использования подстановочного знака для содержимого каталога (например, «dir / *»), так как подстановочный знак раскрывается оболочкой, и, таким образом, rsync получает запрос передавать отдельные файлы, а не родительский каталог файлов. Файлы, которые исключены из передачи, также исключаются из удаления, если вы не используете опцию --delete-exclude или не помечаете правила как совпадающие только на отправляющей стороне (см. Модификаторы include / exclude в разделе ПРАВИЛА ФИЛЬТРА).

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

Исходный каталог:

1.txt
2.txt
3.txt

Целевой каталог:

4.txt

4.txt исчезнет после того, как rsync и 1.txt, 2.txt и 3.txt будут в месте назначения.


Что касается других вещей:

uva
  • обновить файлы
  • verbose: вывод результатов на терминал (т. е. перенаправить его в файл журнала, так что да, на последний вопрос)
  • архив: режим архива; равно -rlptgoD (нет -H, -A, -X)
Rinzwind
источник
Источник:man rsync
Sammitch
3

Нет, это только удалить посторонние файлы из bkp01каталога.

Также:

  • -u, --update- пропускать файлы, которые новее на приемнике
  • -v, --verbose- увеличение детальности
  • -a, --archive- режим архива; равно -rlptgoD (нет -H, -A, -X)

Выходные данные rsync -uva --delete /srv/bkp01 /srv/offbk2/команды отправляются в ~/offbkp01.logфайл с помощью оператора перенаправления ( >), а не выводятся на ваш терминал. Если файл не существует, он будет создан. Если файл существует, старый контент будет удален.

Смотрите man rsyncдля получения дополнительной информации.

Раду Рэдяну
источник
3
Это ничего не удаляет из bkp01. Он просто удаляет посторонние файлы - то есть те, которые не существуют в источнике - из места назначения.
Мэтт Нордхофф
Файлы не будут удалены из bkp01.
Ксавье Дж
1
rsync 

Удаленное копирование файлов - синхронизируйте деревья файлов на локальных дисках, в каталогах или по сети.

-u update 

-v verbose

-a archive


--delete --> delete

Здесь он будет удалять файлы внутри offbk2 .

Затем вывод результата (успех или нет) будет перенаправлен в этот файл журнала.

Nux
источник
Файлы не будут удалены из bkp01.
Ксавье Дж