logo

Команда rsync у Linux із прикладами

rsync або дистанційна синхронізація — це програмна утиліта для Unix-подібних систем, яка ефективно синхронізує файли та каталоги між двома хостами або машинами. Один — джерело або локальний хост, з якого синхронізуватимуться файли, інший — віддалений хост, на якому відбуватиметься синхронізація. В основному є два способи rsync може копіювати/синхронізувати дані:

  • Копіювання/синхронізація на/з іншого хосту через будь-яку віддалену оболонку, наприклад ssh , rsh .
  • Копіювання/синхронізація через демон rsync за допомогою TCP.

Rsync відомий своїми алгоритм дельта-передачі , у якому він копіює лише відмінності між вихідними файлами, наявними на локальному хості, та існуючими файлами на цільовому чи віддаленому хості.

приклад:



rsync local-file user@remote-host:remote-file>

Що тут відбувається:

Rsync спочатку використовуватиме SSH для підключення якuser>на віддалений хост і запитаєuser's>пароль. Після підключення він викличе rsync віддаленого хоста, а потім дві програми визначатимуть, які частини локального файлу потрібно скопіювати, щоб віддалений файл відповідав локальному. Зверніть увагу на таку поведінку rsync:

  • Файли, яких немає на віддаленому хості, копіюються.
  • Оновлені файли буде синхронізовано, rsync скопіює лише змінені частини файлів на віддалений хост.
  • файли, які абсолютно однакові, не копіюються на віддалений хост.

Синтаксис команди `rsync` в Linux

rsync [options] source [destination]>

Варіант доступний у команді `rsync` в Linux

Опції

опис

а, – архів

Це еквівалентно використанню -rlptgoD . Архівний режим включає всі необхідні параметри, як-от рекурсивне копіювання файлів, зберігаючи майже все (наприклад, символічні посилання, дозволи на файли, право власності на користувача та групу та позначки часу).

-в, – багатослівний

За замовчуванням rsync працює безшумно. Використання єдиного параметра -v надає інформацію про передані файли та підсумок у кінці. Додавання двох параметрів -v дає оновлення статусу дельта-передачі та пропущених файлів, а також додаткову інформацію в кінці. Кілька параметрів -v зазвичай використовуються для налагодження rsync.

-h, – формат для читання людиною

Виходи у форматі, зрозумілому людині.

-з, –стиснути

Стискайте дані файлу під час передачі

strsep

Приклади

Використання `rsync` як команди списку

Якщо вказано лише вихідний шлях, вміст джерела буде перераховано у вихідному форматі, подібному доls -l>.

rsync foo/>

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

Вихід:

Копіювати/синхронізувати файли та каталог локально

Якщо шлях джерела чи призначення не вказує віддалений хост, команди rsync поводяться як команда копіювання.

rsync -avh foo/ bar/>

Наведена вище команда скопіює/синхронізує всі файли та каталоги, присутні в каталозіfoo>до каталогу бар . Якщо каталог призначення відсутній (тутbar>), rsync автоматично створює один і копіює всі дані в ньому.

Вихід:

Rsync за допомогою ssh

Є два різні способи для rsync зв’язатися з віддаленою системою:

шакал проти вовка
  • Використання програми віддаленої оболонки як транспортного засобу (наприкладssh>(Secure Shell) абоrsh>(Remote Shell)).
  • Зв’язок із демоном rsync безпосередньо через TCP.

Тут ми будемо обговорювати rsync через ssh.

rsync -avhze ssh /foo user@remote-host:/tmp/>

Щоб указати тип протоколу, який буде використовуватися,-e>використовується опція.

Вихід:

Rsync із певними правами доступу до файлів

Якщо ми хочемо синхронізувати файли з локальним або віддаленим хостом із дозволами змінених файлів. Необхідно використати наступну команду.

rsync -avhe ssh --chown=USER:GROUP /foo user@remote-host:/tmp/>

Наведена вище команда синхронізує всі файли, наявні в каталозі /foo з файлами, наявними в каталозі /tmp вremote-host>з усіма файлами, якими володіє USER із групою GROUP.

Вихід:

Примітка: Theuser>іgroup>вже має бути створено на віддаленому хості.

Rsync з --ignore-existing-files>

Ми також можемо пропустити вже існуючі файли в місці призначення. Зазвичай це можна використовувати, коли ми виконуємо резервне копіювання за допомогою –link-dest варіант, продовжуючи резервне копіювання, яке було перервано.

rsync --ignore-existing -avhe /foo user@remote-host:/tmp/>

Таким чином, будь-які файли, яких немає на місці призначення, буде скопійовано. Ось я видаливgeeksforgeeks>папку з каталогуfoo>, тому він має копіювати лишеgeeksforgeeks>каталог.

Примітка: Це не ігнорує існуючі каталоги, інакше нічого не буде зроблено. Навіть якщо є деякі зміни у файлі на локальному хості, він все одно не буде синхронізований, якщо він присутній на віддаленому хості.

Вихід:

Показати прогрес під час передачі

Щоб показати прогрес під час передачі даних з локального хоста на віддалений хост, ми можемо використовувати-–progress>варіант.

rsync -avhe ssh --progress /foo user@remote-host:/tmp/>

Після завершення передачі певного файлу rsync виводить підсумковий рядок, як показано нижче.

різниця між $ і $$

Вихід:

На зображенні вище, якщо ми подивимося на файл/foo/file2>, це говорить нам про це

  • Загалом файл мав 44 байти.
  • Середня швидкість передачі для всього файлу становила 42,97 кілобайт на секунду протягом 0:00:00 секунд, які були потрібні для завершення.
  • Це був другий трансфер протягом нинішнього rsync сесії.
  • Є ще 10 файлів для перевірки віддаленим хостом (щоб побачити, чи вони оновлені чи ні), що залишилися із 13 файлів у списку файлів.
  • Оновлюйте віддалений лише якщо в локальній файловій системі є новіша версія:
    Якщо ми хочемо скопіювати файли через віддалений хост, які нещодавно були оновлені в локальній файловій системі. Це зроблено з – оновлення прапор. Поведінка зараз така:
    • Файли, яких немає на віддаленому хості, копіюються.
    • Файли, які існують як на локальному, так і на віддаленому хості, але мають новішу позначку часу на локальному хості, копіюються на віддалений хост. (І навпаки, файли зі старішою міткою часу не копіюються).

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

    rsync -avhe ssh --progress --update /foo root@remote-host:/tmp/>

    Вихід: оновлення rsync

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

    Тепер припустімо, що у нас є веб-сервер і сервер резервного копіювання, і ми створили щоденну резервну копію та синхронізували її з нашим сервером резервного копіювання, а потім ми не хочемо зберігати локальну копію резервної копії на нашому веб-сервері. Отже, замість того, щоб видаляти його вручну після успішного перенесення, ми можемо використовувати--remove-source-files>прапорець для автоматичного видалення файлів із веб-сервера.

    rsync -avhe ssh --remove-source-files /foo user@backup-server:/tmp>

    Вихід:

    Примітка: Це призведе до видалення лише файлів, а не каталогів.

    Видаліть файли, які було видалено на локальному хості

    Якщо є деякі файли, які видаляються на локальному хості, і ми хочемо, щоб вони також були оновлені на віддаленому хості, тоді нам потрібно використовувати--delete>варіант.

    rsync -avhe ssh /foo --delete user@remote-host:/tmp/>

    Вихід:

    анотації для пружинного завантаження

    Отже, ось файл1 , файл2 , файл3 були видалені на локальному хості та, як видно, також оновлені на віддаленому хості.

    Примітка: ` rsync` не видаляє файли автоматично, щоб синхронізувати каталоги, наявні з обох сторін.

    Виконання сухого запуску за допомогою `rsync`

    Сухий запуск змушує `rsync` виконати пробний запуск, який не вносить жодних змін і відображає майже той самий результат, що й реальний запуск. Зазвичай він використовується з параметрами -v, –verbose та/або -i, –itemize-changes, щоб побачити, що зробить команда `rsync`, перш ніж її фактично запустити.

    rsync -avhe ssh --dry-run --chown=USER:GROUP /foo user@remote-host:/>

    Вихід:

    Висновок

    У цій статті ми обговорили команду rsync в Linux, яка є універсальним і потужним інструментом для синхронізації файлів і каталогів між хостами або машинами. Завдяки алгоритму дельта-передачі та різноманітним опціям він пропонує ефективну синхронізацію даних, можливості резервного копіювання та керування передачею файлів. Освоївши команду rsync, користувачі Linux можуть забезпечити узгодженість файлів, оптимізувати передачу даних і оптимізувати робочі процеси керування даними.