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/>
Вихід: 
Автоматично видаляти файли з локального хосту після успішного передавання
Тепер припустімо, що у нас є веб-сервер і сервер резервного копіювання, і ми створили щоденну резервну копію та синхронізували її з нашим сервером резервного копіювання, а потім ми не хочемо зберігати локальну копію резервної копії на нашому веб-сервері. Отже, замість того, щоб видаляти його вручну після успішного перенесення, ми можемо використовувати--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 можуть забезпечити узгодженість файлів, оптимізувати передачу даних і оптимізувати робочі процеси керування даними.