Ruby - це багатий, безкоштовно розповсюджуваний, простий, гнучкий, компактний і об'єктно-орієнтована мова написання сценаріїв. Останнім часом користується величезною популярністю в мережі. Цією популярністю він почасти зобов'язаний дуже потужній платформі для розробок Web-додатків, Rails, написаної на Ruby. Rails, або Ruby on Rails (ROR), як його називають, забезпечує дуже потужну платформу для швидкої та ефективної розробки Web-додатків. Він добре масштабується, і багато існуючих Web-сайти створені з використанням Ruby on Rails.
Крім використання Ruby on Rails як платформи розробок для Web-додатків, існує інша, менш відома сторона Ruby. Ruby - це потужна мова для написання скриптів, що стоїть нарівні з Python і Perl. У нього колосальні можливості, що забезпечуються вбудованими та зовнішніми бібліотеками, потужність яких може бути використана для вирішення проблем написання сценаріїв, - такі проблеми можуть несподівано виникнути в будь-якому робочому оточенні.
Системне адміністрування - одне з таких робочих оточень, яка потребує написання безлічі скриптів для полегшення роботи і підвищення її ефективності. Управління користувачами, управління процесами, управління файлами, управління пакетами програмного забезпечення та інші основні автоматичні операції краще обробляються сценаріями, ніж рутинними ручними операціями. Ruby дуже підходить для такого роду ситуацій. Для цього тут є хороший набір бібліотек.
У цій статті я почну з прикладів, які показують, як додаток Ruby може бути використано для спрощення деяких основних потреб системного адміністрування, які потребують написання сценаріїв. Ці приклади демонструють можливості Ruby як потужної альтернативи сценаріїв оболонки. Зрозуміло, ці приклади можна вдосконалити, розширювати або змінювати в міру необхідності. Після основних прикладів я представлю дуже потужну бібліотеку системного адміністрування для Ruby, звану Cfruby. Ця бібліотека включає широкий набір функціональних можливостей для полегшення системного адміністрування та управління.
Ruby в дії
Перший приклад (лістинг 1). Ruby шукає файли, що відповідають даному шаблоном в зазначеному шляху, і видає детальну інформацію про ці файли в зручному для користувача вигляді. У прикладі використовується тільки вбудований інтерфейс Ruby, отже, приклад буде працювати на будь-якій платформі, де запущений Ruby.
Крім того, цей приклад показує міць Ruby, значно спрощує подібні завдання. Тут не просто емуляція команди find в * nix, але надбудова над нею, що демонструє можливості Ruby.
Лістинг 1. Пошук файлів, які відповідають цій зразком у шляху пошуку і виведення їх детальної інформації
- рядки 5-11 - запитує у користувача шляху і шаблон пошуку;
- рядок 16 - використання Ruby методу "find" з класу "Find" щоб простежити через вказаний шлях пошуку;
- рядок 17 - перевіряє, чи є знайдений файл Директорією. Якщо так і якщо він не прихований ( '.'), То виконується його рекурсивний прохід;
- рядок 24 - використання методу 'fnmatch' класу 'File' для перевірки, чи відповідає знайдений файл вказаною шаблоном;
- рядок 25-34 - друкує детальну інформацію про фото, якщо файл відповідає шаблоном.
Ось приклад виведення цього сценарію (лістинг 2).
Лістинг 2. Приклад вихідних даних першого прикладу
При системному адмініструванні часто потрібно забезпечити ефективну роботу з архівами zip для управління резервними копіями або для переміщення набору з однієї машини на іншу. Ruby зручний і тут. Другий приклад ґрунтується на першому, включаючи сценарій, в якому нам потрібно заархівувати список файлів, отриманих в результаті пошуку за шаблоном.
Вбудований zlib-модуль допомагає в обробці gzip-файлів і досить зручний для більшості випадків. Але тут для створення zip-архівів і роботи з ними ми використовуємо іншу зручну бібліотеку Ruby, яка називається "rubyzip" (її можна завантажити за посиланням в розділі «Ресурси»). Відзначимо, що в цьому прикладі використовується «чистий» Ruby, і приклад не залежить від наявності на машині утиліт командного рядка (лістинг 3).
- завантажте пакет gem для rubyzip по представленої посиланню і скопіюйте його в систему. (На момент написання статті це був 'rubyzip-0.9.1.gem');
- запустіть gem install rubyzip-0.9.1.gem
Лістинг 3. Робота з архівними файлами
З файлів, знайдених в результаті пошуку на основі зазначеного шляху і шаблону, скрипт створює архів з ім'ям 'test.zip'.
- рядки 9-15 - це запити користувача на шлях пошуку і маску пошуку;
- рядок 23 - створення архівного zip-файлу, названого 'test.zip.'
- рядок 25 - використання Ruby методу 'find' з класу 'Find' для проходу по зазначеному шляху пошуку;
- рядок 26 - перевіряє, чи є знайдений файл Директорією. Якщо так і якщо він не прихований ( '.'), То виконується його рекурсивний прохід;
- рядок 33 - використання методу 'fnmatch' класу 'File "щоб перевірити, чи відповідає знайдений файл зразком;
- рядок 35 - додавання відповідного шаблоном файлу в zip-архів.
Ось приклад виведення (лістинг 4).
Лістинг 4. Приклад консольного виведення для другого прикладу
Cfruby - просунуте системне адміністрування
Як йдеться на сайті Cfruby: «Cfruby дозволяє управляти системним адмініструванням, використовуючи Ruby. Він поєднує в собі функції Ruby-бібліотеки для системного адміністрування і Cfengine-подібного клона (по суті, особливий доменний мову або DSL для системного адміністрування) ».
Cfruby є пакет, що складається з двох частин:
Cfruby можна завантажити у форматі Ruby gem або в архіві tar. Спосіб з gem простіший. Завантажте gem і встановіть його командою "gem install".
- скопіюйте завантажений gem-файл в вашу систему (при написанні цієї статті використовувався 'cfruby-1.01.gem');
- запустіть gem install cfruby-1.01.gem.
Тепер додаток Cfruby встановлено на вашу систему.
Починаємо використовувати Cfruby
Продемонструємо можливості Cfruby і то, як воно може значно спростити системне адміністрування та управління.
Існують два основних способи отримати доступ до виконуваних функцій Cfruby:
- використання класів Ruby з libcfgruby безпосередньо;
- використання обгортки cfrubyscript, що забезпечує зрозумілий інтерфейс до libcfruby.
Використання класів Ruby з libcfgruby безпосередньо
Libcfruby - це суть Cfruby, об'єднання модулів, що забезпечують різні функціональні можливості, що спрощують обслуговування і налаштування системи. Щоб використовувати libcfruby, вам необхідно додати 'require_gem' cfruby '' в початок сценарію, після установки Cfruby gem. Це дасть прямий доступ до всіх базових модулів libcfruby, які можуть бути використані в сценарії так, як вам потрібно. Єдиним недоліком цього методу є розмір libcfruby і те, що всі класи і методи розташовані в своєму власному просторі імен. Тому, щоб отримати доступ до будь-якого класу, необхідно співвіднести його з простором імен. Наприклад, libcfruby надає метод отримання типу вашої системи. Щоб отримати його, слід виконати такі операції (лістинг 5).
Лістинг 5. Отримання типу ОС за допомогою libcfruby
Це просто спосіб дізнатися ім'я вашої операційної системи. У міру подальшої роботи з libcfruby сценарій безладно наповниться усіма специфікаціями простору імен. І тут стане в нагоді наступний метод використання Cfruby.
Використання «обгортки» cfrubyscript, що забезпечує більш зрозумілий інтерфейс до libcfruby
Для використання cfrubyscript додаємо (лістинг 6):
Лістинг 6. Використання cfrubyscript
Виконання цієї команди включає в скрипт cfrubyscript, що дає точний і більш простий інтерфейс для доступу до функцій libcfruby.
Що досягається використанням cfrubyscript:
- експорт набору змінних в глобальний простір імен, таких як $ os, $ user, $ proc і $ sched;
- витяг здебільшого головних модулів в основний простір імен - можна викликати FileEdit.set замість Cfruby :: FileEdit.set;
- додавання допоміжних методів до String і Array, які виконують специфічні команди Cfruby (установка програм, редагування файлів і ін.);
- також є детальний журнал.
Отже, з громіздкими специфікаціями простору імен в сценаріях покінчено. Наведений вище приклад, який видає тип ОС, тепер став таким (лістинг 7).
Лістинг 7. Отримання типу ОС за допомогою cfrubyscript
Все просто перекладається в один єдиний виклик з використанням глобальної змінної $ os. Cfruby - дійсно потужна програма, що забезпечує широке розмаїття функціональних можливостей для управління * nix-подібними системами.
Подивимося на деякі з них і на деякі базові приклади їх використання.
Керування користувачами
Однією з найбільш поширених і найбільш важливих завдань в будь-якому адмініструванні систем є управління користувачами і групами. Cfruby забезпечує потужний набір методів для здійснення цих завдань в компактній і простіший спосіб.
Це досягається використанням об'єкта UserManager який може бути отриманий з модуля ОС, як показано в лістингу 8.
Лістинг 8. Отримання об'єкта UserManager з використанням libcfruby
Якщо все зробити в стилі cfrubyscript, то у нас вже буде присутній глобальний об'єкт управління користувачами, доступний як $ user, який може бути безпосередньо використаний для виклику методів. Я буду дотримуватися цього методу як найбільш простому і зрозумілому для читання.
Ось як його використовувати, щоб створити і видалити користувача (лістинг 9).
Лістинг 9. Управління користувачами з використанням cfrubyscript
Що відбувається в цьому прикладі:
- рядки 1, 2 - як зазвичай, включаємо libcfruby і cfrubyscript в сценарій;
- рядок 3 - створює нового користувача з ім'ям, зазначеним як 'newusername' і з паролем, зазначеним у другому аргументі;
- рядок 4 - видаляє користувача з ім'ям користувача, зазначеним як 'newusername'. Другий аргумент може бути істинним або хибним, що вказує, що потрібно видаляти домашню директорію видаляється користувача.
Аналогічно, можливі операції над групами з використанням методів addgroup () і deletegroup () в об'єкті UserManager.
управління процесами
Ще одне важливе завдання адміністратора - відстеження запущених процесів і управління ними. Cfruby також може бути тут корисний, забезпечуючи можливість ефективного спостереження за процесами.
Ось як це завдання вирішується за допомогою Cfruby (лістинг 10).
Лістинг 10. Управління процесами з використанням cfgrubyscript
Що відбувається в цьому прикладі:
- рядок 3 - використання глобального об'єкту $ proc для того, щоб завершити процес 'vim', вказаний як аргумент. $ Proc.vim - це об'єкт типу ProcessInfo процесу 'vim', запущеного в системі. Cfrubyscript створює їх автоматично;
- рядок 4 - запуск нового процесу зі спеціалізованою командою 'ps-aef'. Метод запуску викликається за допомогою інтерпретатора.
Управління пакетами програм
Управління програмним забезпеченням в системі - ще одна задача, яку повинен забезпечувати системний адміністратор. Cfruby надає методи для простої установки і видалення програм в системі (лістинг 11).
Лістинг 11. Управління програмами за допомогою cfrubyscript
- рядок 3 - використання глобального об'єкту $ pkg PackageManager, створеного cfrubyscript, і отримання всіх пакетів, присутніх в системі, за допомогою виклику методу packages ();
- рядок 4 - список всіх встановлених пакетів;
- рядок 5 - встановлює пакет Ruby викликом методу install. Можливість прямого виклику допоміжного методу установки безпосередньо з назви пакунка.
Це рівень, до якого все спрощується.
управління файлами
Cfruby також допомагає в управлінні файлами. Створення, редагування, видалення, призначення власника, зміна прав доступу і багато іншого робиться просто методами, наданими Cfruby (лістинг 12).
Лістинг 12. Управління файлами з використанням cfrubyscript
- рядок 3 - зміни власника, групи і прав доступу для файлу '/ etc / ssh.' Прямий виклик методу chown_mod () безпосередньо з файлу. Це знову ж таки стає можливим завдяки допоміжним об'єктам і методам cfrubyscript. Зауважте, що все це займає лише один рядок.
Отже, наведені вище приклади повинні були показати, яким потужним є Cfruby і наскільки простим він є в адмініструванні та управлінні системою в доступній і ефективній манері. Крім того, додаток робить все завдання системного адміністрування простішими і більш легкими з інтуїтивним набором класів і методів, який він надає.
висновок
Ruby - це не тільки розробка Web-додатків на базі Rails. Він також може використовуватися як потужний мову сценаріїв і дуже ефективна альтернатива звичайному написання сценаріїв в оболонці, в більшості випадків використовуються для написання скриптів системного адміністрування.
З власним набором вбудованих модулів і декількома зовнішніми бібліотеками Ruby може зробити системне адміністрування більш ефективним і, безсумнівно, більш простим. Ruby - це дуже корисний і потужний інструмент, який повинен бути в наборі кожного системного адміністратора.
Ресурси для скачування
Схожі теми
- Оригінал статті: Ruby for systems administrators (EN)
- Ruby programming language. офіційний сайт Ruby (EN)
- Programming Ruby. The Pragmatic Programmer's Guide. Гарне керівництво для вивчення програмування на Ruby. (EN)
- Ruby. завантажте останню версію Ruby (EN)
- Cfruby. завантажте бібліотеку системного адміністрування для Ruby. (EN)
- RubyZip. завантажте бібліотеку для обробки zip-архівів для Ruby. (EN)