Використання unix частина 5

В останні роки апаратне забезпечення стало вкрай дешевим. Гігабайт ємності жорсткого диска коштує 0,5 доларів, 19-дюймовий ЖК-монітор коштує менше 200 доларів, а комп'ютер з ОС UNIX® можна купити менше ніж за 1000 доларів. Навіть спеціалізоване серверне обладнання забезпечення для серверів перетворилося в продукт, доступний за ціною для широкого кола покупців.

Низькі ціни на обладнання дозволяють середнім і великим компаніям виділити для кожного завдання окремий комп'ютер. Більш того, підвищити обчислювальну потужність стало вкрай просто: підключити комп'ютер до мережі, скопіювати образу жорсткого диска на новий, "чистий" комп'ютер (white box) і перезавантажити його. Кожному комп'ютеру для нормальної роботи необхідно виконання ряду умов: стабільну напругу, хороша вентиляція корпусу і грамотна технічна підтримка.

Одна з найбільш часто зустрічаються проблем при управлінні великою кількістю комп'ютерів - це забезпечення синхронної установки на кожен з них останніх оновлень системи. Іноді потрібно встановити одну і ту ж версію програми на всі комп'ютери, щоб не бентежити користувачів відмінностями і можливими розбіжностями між різними версіями цієї програми. Інший приклад - ситуація, коли потрібно поставити одну і ту ж операційну систему на всі сервери, що виконують одну і ту ж задачу. Передбачуваність - це добре.

Навіть для користувача, у якого є тільки ноутбук і настільний ПК, синхронізація двох комп'ютерів може виявитися трудомістким завданням. Сьогодні він працював з ноутбуком, вчора - з настільним ПК, і весь цей час він завантажував на них якісь файли з центрального сервера. З таким швидким оновленням даних легко втратити орієнтацію в них.

У п'ятій статті цього циклу статей ми ознайомимося з корисними методиками, які допоможуть оптимізувати операції з великим числом файлів.

утиліта tar

Очевидно, що найпростіший шлях забезпечити несуперечливість даних на декількох комп'ютерах - завжди носити свої файли (електронні таблиці, бази даних, текстові файли та інше) з собою. Якщо у користувача є фізичний доступ до комп'ютера, з яким він працює, то він повинен носити з собою чистий диск CD-RW або USB-диск і просто копіювати на них потрібні файли з комп'ютера.

Однак бувають ситуації, коли потрібні файли з віддаленого комп'ютера або комп'ютер стоїть в серверній кімнаті і до нього не можна підключити зовнішні пристрої, що запам'ятовують. Тоді користувач може зробити архів своїх файлів (всіх або деяких), підключитися до локальної мережі (LAN) або глобальної мережі (WAN), скопіювати архів на цільовий комп'ютер по мережі, розпакувати файли на цільовому комп'ютері і продовжити свою роботу далі. Більш того, можна використовувати архівні копії даних у разі "катастрофи", наприклад, якщо ноутбук був забутий в таксі.

На UNIX-системах для роботи з архівами застосовується утиліта tar. Утиліта tar пов'язує один або кілька файлів або каталогів в один файл зі збереженням типів файлів, прав доступу до них, імен їх власників і розташування цих файлів у вихідній файлової системи. Утиліта tar записує точну копію ваших даних на стрічку: tar розшифровується як tape archiver (касетний архіватор).

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

Лістинг 1. Каталог з файлами

Щоб створити архів для двох файлів і каталогу, запустимо tar:

Опція --create повідомляє tar. що треба створити архів. Опція --verbose виводить список файлів, з якими tar працює. Опція --gzip дозволяє здійснювати gzip -компрессію, яка стискає архів, і --file archive.tgz задає ім'я архіву.

Оболонка shell інтерпретує символ "зірочка" (*) як "будь-який файл" і, отже, поширює дію архіватора на два файли і каталог. B інформації, виведеної tar. видно, що tar архівує каталог css і повторно викликається для архівації його вмісту.

Після виконання tar. поточний робочий каталог містить новий файл archive.tgz:

Тепер можна скопіювати archive.tgz на інший комп'ютер і використовувати tar на віддаленому комп'ютері для отримання даних з цього архіву. Команда, що відновлює файли, дуже схожа на команду для їх архівування. Для розпакування використовується команда:

Ця tar-команда отримає вміст архіву archive.tgz. Опція --extract є протилежністю опції --create. Опція --gunzip обратна опції --gzip. а --preserve-permissions відновлює права доступу, що використовувалися в початкових файлах.

Після виконання цієї команди збережені файли відновлені зі збереженням часу зміни, своїх прав доступу і своїх імен. Каталог css зі своїм спорядженням також створюється в situ.

Утиліта tar має безліч опцій: --create. --extract і --list (яка виводить вміст .tar-файлу, не витягуючи його). Інші опції (наприклад, --gzip і --preserve-permissions) керують процесом створення tar-архіву. Детальний опис синтаксису кожної опції можна знайти на сторінці tar в керівництві man для конкретної версії UNIX ОС.

У цій команді виконується більше ніж одне дій. Давайте розберемо її:

  1. Послідовність команд, укладених в круглих дужках, називають вкладеної оболонкою - subshell. Зміни, зроблені в subshell-оболонці - наприклад, зміна каталогу, - не вплинуть на команду в цілому, а торкнуться тільки середу вкладеної оболонки. Тому перша керуюча послідовність - (cd

/ Stuff; tar --create --gzip --file - *) змінює поточний робочий каталог на

Отже, за допомогою однієї команди архів був створений, переданий і розпакований. До речі, дещо змінивши цю команду, можна копіювати архів з віддаленого комп'ютера на локальний і розпакувати його. Ось команда, яку для цього треба виконати на локальному комп'ютері:

Архів на віддаленому комп'ютері буде відкритий, потім потік байтів з cat буде посланий у вкладену оболонку, яка змінить робочий каталог, а потім витягне архів. (Додавання -C

/ Stuff до команди tar призведе до тих самих результатів; приклад показує тільки те, що subshell теж можуть працювати із вхідними даними.)

Можна використовувати цю ж методику для копіювання файлів в межах одного комп'ютера. Спробуйте наступну команду:

Використання утиліти tar разом з ssh є зручним способом для передачі файлів від одного комп'ютера до іншого. Утиліта tar створює архів, а ssh забезпечує безпечну передачу архіву.

Інший спосіб виконання цього завдання заснований на використанні вбудованої в ssh можливості передачі файлів від одного комп'ютера до іншого. sftp - інша реалізація ssh - надає всі властивості протоколу File Transfer Protocol (FTP) і, крім того, забезпечує захист файлів при їх передачі (при передачі протоколу FTP відсутній захист даних, тому його, в основному, використовують тільки для завантаження файлу з відкритих FTP -серверів).

Користувач, який має досвід роботи з FTP, легко освоїть sftp. який дуже схожий на FTP. Потрібно тільки ввести sftp destination для підключення до віддаленого комп'ютера з ім'ям destination і виконати команду FTP для переміщення файлів (наприклад, cd. Lcd. Mput і mget).

Наприклад, якщо потрібно скопіювати деякі файли і каталоги з віддаленого комп'ютера в будь-якої каталог на локальному комп'ютері, можна використовувати команду з лістингу 2.

У цьому прикладі, cp -pr рекурсивно копіює всі файли і каталоги в каталог / home / joe / stuff. Опція -r відповідає за рекурсию; опція -p зберігає час зміни і створення файлів.

Копіювати файли в межах одного комп'ютера можна і за допомогою scp:

Але якщо вказати віддалену систему, scp скопіює файли по мережі:

Припустимо, що каталог / home / joe / stuff існує на віддаленому комп'ютері, і у користувача є право записи в нього даних; створюється точна копія двох файлів і вкладеного каталогу на віддаленому комп'ютері. Як cp. scp використовує опцію -p для збереження часу зміни файлів і -r для рекурсії.

Утиліта scp вкрай проста у використанні, особливо в тому випадку, коли задається відкритий ключ і закритий ключ, щоб не вводити пароль для кожної операції, виконуваної ssh / scp / sftp.

Однак утиліта scp має одну особливість, яку треба враховувати. Припустимо, що в домашньому каталозі є підкаталог з ім'ям doc і потрібно скопіювати його на віддалену систему. Крім того, необхідно, щоб вміст

/ Doc замінило вміст каталогу doc на віддаленому комп'ютері в разі, якщо імена файлів або каталогів при копіюванні будуть збігатися. Команда, яка вирішить цю задачу, буде виглядати так:

Зверніть увагу, що в описі шляху до каталогу на віддаленому комп'ютері не вистачає закриває слеша (/). scp інтерпретує цю команду як "копіювати вміст каталогу

/ Doc в каталог / path / to / doc на віддаленому комп'ютері ". Як і при використанні команди cp. Видалені файли і каталоги, чиї імена збігаються з іменами файлів і каталогів, які будуть скопійовані, перезаписувати, а унікальні файли на віддаленій системі залишаються недоторканими .

Однак подивимося, що зміниться, якщо додати закриває слеш:

Тоді scp інтерпретує команду як "копіювати каталог

/ Doc в каталог / path / to / doc /. "Тому замість перезапису вмісту віддаленого каталогу, каталог doc на вихідному комп'ютері буде просто скопійований в віддалений каталог.

Наявність або відсутність закриває слеша не є помилкою - його слід використовувати в залежності від ситуації.

Синхронізація даних

scp дуже зручна, оскільки дуже схожа на cp. tar і ssh трохи складніше у використанні, але зате вони зберігають такі метадані файлу, як ім'я власника і права доступу до файлу.

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

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

Як і в tar. можна комбінувати використання rsync з ssh для з'єднання з віддаленою системою і синхронізації файлів на віддаленому та локальному комп'ютерах. Як і в scp. можна використовувати rsync для копіювання файлів на локальному комп'ютері. Також можна використовувати rsync для отримання списку файлів.

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

Ця команда копіює все текстові файли в поточному робочому каталозі в домашній каталог користувача на комп'ютері з ім'ям destination. Опція -times зберігає час створення, останнього доступу і зміни для кожного файлу.

Ця команда rsync відображає локальний каталог doc в домашній каталог на віддаленому комп'ютері. Час зміни, доступу і створення файлу зберігаються, права доступу до файлу теж зберігаються, а зайві файли (файли в віддаленому каталозі, які не існують в вихідному) видаляються.

Оскільки робота rsync може привести до значних змін, то можна додати опцію --dry-run до керуючої рядку команди, щоб бачити етапи роботи rsync. Параметр --dry-run не вносить ніяких змін в роботу rsync і надає тільки інформацію про поточні діях цієї утиліти, як показано в лістингу 3.

Лістингу 3. Спостерігаємо за діями rsync

rsync має наступні опції:

  • -a найпотужніша опція, оскільки є скороченням для керуючої послідовності --group --owner --perms --times --devices --links --recursive. Параметр --devices перестворює файли пристроїв, а параметр --links копіює самі символічні посилання, а не те, на що вони вказують.
  • --update не допускає, щоб rsync перезаписав нові версії файлів більш старими. Якщо на віддаленій системі знаходиться файл більш нової версії, ніж на локальній системі, цей файл зберігається без змін.
  • Спробуйте використовувати --verbose щоб подивитися, як працює утиліта rsync.

Детальний опис rsync можна знайти на її сторінці в керівництві man. Важливою особливістю цієї утиліти є те, що вона може включати і виключати з процесу синхронізації файли за умовою, заданому користувачем.

висновок

UNIX використовується в мережевих системах вже більше 20 років. За цей час відбулися значні зміни в обладнанні, але більшість програмного забезпечення залишилося тим же, і та робота з ним все також надає певні складності для системних адміністраторів і користувачів. Однією з найголовніших проблем стає відстеження даних, яке стає все складніше через постійно збільшується ємності дисків. Такі утиліти, як tar. sftp / scp і rsync допоможуть навести порядок навіть на самому запущеному комп'ютері.

Частина 6 цього циклу статей розгляне поняття автоматизації - ще один спосіб заощадити час і зменшити ризик помилки через людський фактор.

Отримати продукти і технології

  • Z shell. c домашньої сторінки проекту Z shell можна завантажити останню версію Z shell. (EN)
  • IBM trial software. ознайомчі версії програмного забезпечення для розробників, які можна завантажити прямо зі сторінки спільноти developerWorks. (EN)

Схожі статті