Чи може хтось пояснити мені цю команду rsync?


11

Хтось може мені сказати, що це робить?

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

Чи видаляється bkp01та offbk2чи надсилається журнал offbkp01.log?


Він не вміє читати чоловічі сторінки. Чому ви думаєте, що він читає відповіді тут? XD
Мерехтіння

2
Кому потрібні чоловічі сторінки, коли ви маєте тлумачний поясник.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 підкаже, які файли передаються, і в кінці поставить підсумок. Більше vs збільшують надруковану інформацію, хоча на сторінці man говориться, що більше двох 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 для видалення файлів, які перебувають у пункті призначення, але не у джерелі. На це НЕ впливає встановлений вище варіант оновлення (дійсно, як це могло бути, оскільки більшість файлових систем не збереже необхідні дані, щоб побачити, яка дія була новішою?). Цей параметр діє на джерела після розширення підстановки / глобального розширення, тому dir / * не є тим самим, як dir /. Деякі важливі зауваження:
    • Це, очевидно, небезпечно. Ви, мабуть, --dry-runспершу спробуйте скористатись опцією, яка здійснить передачу прикидок, що дозволяє переконатися, що не було внесено випадкових змін.
    • Якщо є якісь помилки вводу / виводу (введення / виводу) - тобто, якщо щось не вдається переносити, читати чи писати зміни - видалення буде ігноровано з цього моменту. Це може бути замінено за допомогою --ignore-errorsпараметра, хоча ви, мабуть, цього не хочете / не захочете робити.
    • В алгоритмі видалення є кілька варіантів, про які ви можете прочитати більше на сторінці man. Коли rsync прийому має версію 3.0.0 або новішу (станом на час написання), --delete-duringалгоритм використовується. Якщо ресивер старше, тоді --delete-beforeвикористовується. Якщо важливо, щоб файли підтримували певну послідовність у разі виникнення помилки (наприклад, нічого не видаляти, поки не будуть внесені всі інші зміни), слід скористатися більш конкретним варіантом, ніж типовий.

Розташування команд:

  • /srv/bkp01- Вихідний файл або каталог. Існує кілька детальних правил щодо того, що це означає, якщо на кінці каталогу є / не є косою рисою, а також, якщо існує інший каталог. Ви можете побачити розділ USAGE на сторінці man для детальної інформації, але тут відсутність останньої косої риси означає, що цей каталог буде скопійований у пункт призначення, а не вміст цього каталогу, скопійований у пункт призначення. Те саме, якщо це файл, а не каталог.
  • /srv/offbk2/- Каталог призначення. Взагалі, це завжди буде останній елемент, перелічений у розділі команд rsync, якщо тільки не використовується параметр, щоб вказати його в іншому місці команди.

Перенаправлення виходу Shell:

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

  • >- Це перенаправляє stdout (стандартний висновок) з того, що знаходиться зліва на файл праворуч, перетворюючись на його вміст і створюючи файл (якщо можливо), якщо він ще не існує. Деякі примітки:
    • Ви також можете перенаправити 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 . Цей файл журналу буде створений заново, якщо він ще не існує, і буде перезаписаний, якщо він вже існує.


Примітка: --fake-superце варіант, який використовується для того, щоб викликати rsync для імітації дій суперкористувача. Це робиться, використовуючи розширені атрибути файлів для зберігання атрибутів, які він не міг встановити, не маючи більших привілеїв. Реальна версія кожного атрибута встановлюється у будь-якому сенсі, враховуючи наявні параметри та привілеї. Хоча це робить зручне робити резервні копії, навіть якщо у вас немає привілеїв суперкористувача, слід також зазначити, що це може становити ризик для безпеки, більший, ніж використання rsync в цілому, оскільки реальні атрибути безпеки не можуть бути встановлені належним чином, хоча інформація про них була резервна.


Джерело: багато часу працює з rsync та читає її man-сторінку .


8
Це одне вражаюче перше повідомлення. Сподіваюсь, ви тримаєтесь!
тердон

Я другий @terdon .. Чорт! він у вогні. Будьте в курсі доброго товариша по роботі. Це справді вражаюча відповідь.
AzkerM

Здається, відповідь виглядає як "Шерлок Холмс", я люблю ваш стиль пояснення ..
Рахул Патіл,

9

З посібника:

- видалити

Це повідомляє rsync видаляти сторонні файли з боку прийому (ті, які не перебувають на стороні надсилання), але лише для каталогів, які синхронізуються. Потрібно попросити rsync надіслати весь каталог (наприклад, "dir" або "dir /"), не використовуючи підстановку для вмісту каталогу (наприклад, "dir / *"), оскільки wildcard розширюється оболонкою, і rsync отримує запит для передачі окремих файлів, а не батьківського каталогу файлів. Файли, які виключаються з передачі, також виключаються з видалення, якщо ви не використовуєте параметр --delete-виключено або позначте правила лише як відповідні на стороні, що надсилає (див. Розділ включення / виключення модифікаторів у розділі ПРАВИЛА ФІЛЬТРА).

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

Каталог джерел:

1.txt
2.txt
3.txt

Каталог призначення:

4.txt

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


Щодо інших речей:

uva
  • оновлення файлів
  • verbose: echo призводить до терміналу (тобто перенаправляє його у свій файл журналу, так що так, на останнє запитання)
  • архів: режим архіву; дорівнює -rlptgoD (немає -H, -A, -X)

Джерело:man rsync
Саммітч

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.
Xavier J

1
rsync 

Віддалена копія файлу - синхронізуйте дерева файлів на локальних дисках, каталогах або в мережі.

-u update 

-v verbose

-a archive


--delete --> delete

Тут вона видалить файли всередині offbk2 .

Тоді висновок результату (успіху чи ні) буде переспрямовано на цей файл журналу.


Жодні файли не будуть видалені з bkp01.
Xavier J
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.