Python для системного администратора
Python для системных администраторов
Автор перевода messerr, просто с кармой ему не повезло.
Введение
О модулях
Модуль – важное понятие в языке Python. По существу, модуль – это ресурс, который вы подключаете к программе, чтобы затем использовать его. Этот процесс можно сравнить с тем, что вы достанете из ящика лист бумаги и положите его на свой стол, подготовив тем самым к дальнейшему использованию. Модули подключаются при помощи команды import, которая присутствует в начале каждого примера. Модули доступны для связи с базами данных, сетевого программирования, сервисов операционных систем и сотен других полезных областей.
Заставим Python работать
Python — полнофункциональный, надежный язык программирования и, по существу, имеет массу свойств. Изучение его может стать задачей эпических масштабов. Однако, помните, что многие способности, такие как GUI инструментарий, имеют для системного администратора низкую ценность. Вот почему в этой статье используются специфичные примеры: они демонстрируют навыки, необходимые для эффективного написания скриптов управления системой.
Немного о примерах:
- Каждый пример использует try: и except: с блоком кода внутри. Это осуществляет элементарную обработку ошибок. Python имеет обширную поддержку для обработки всех видов исключений, но, в рамках примеров этой статьи, я обошелся простой проверкой.
- Эти примеры тестировались с помощью Python 2.5, запущенном на Linux® box, но они должны работать на любой Unix/Linux машине.
Вы несомненно задумаетесь об улучшении этих скриптов. Это хорошо! Натура Python-скриптов заключается в том, что они могут быть легко модифицированы и настроены без необходимости перекомпиляции.
Пример 1: Поиск файлов и отображение прав в дружественном формате
Первый пример (Листинг 1) осуществляет поиск файлов, в соответствии с шаблоном (который вводит пользователь) и выводит результат на экран вместе с правами доступа для каждого файла. Во-первых, вы можете подумать, что эта программа не делает ничего большего, чем вызов команды find; однако она отображает результаты особым образом и ваши варианты отображения этого расширенного поиска безграничны.
Скрипт по существу решает три задачи:
- Получает шаблон поиска от пользователя
- Выполняет поиск
- Показывает результаты пользователю
При написании скрипта постоянно задавайте себе вопрос, «Выполнение какой задачи данный код обеспечивает?» Задавая себе этот вопрос, вы повышаете внимание в вашей работе и ее эффективность.
Листинг 1. Поиск файлов и отображение результатов с правами доступа.
# -*- coding: utf-8 -*-
import stat, sys, os, string, commands
#Записываем в переменную шаблон поиска, введенный пользователем
try:
pattern = raw_input(«Введите шаблон поиска:n»)
#запускаем команду ‘find’ и присваиваем результат переменной
commandString = «find » + pattern
commandOutput = commands.getoutput(commandString)
findResults = string.split(commandOutput, «n»)
#выводим найденные файлы вместе с правами доступа
print «Файлы:»
print commandOutput
print «================================»
for file in findResults:
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])
print «nPermissions for file «, file, «:»
for level in «USR», «GRP», «OTH»:
for perm in «R», «W», «X»:
if mode & getattr(stat,»S_I»+perm+level):
print level, » имеет «, perm, » права доступа»
else:
print level, » не имеет «, perm, » прав доступа»
except:
print «Возникла проблема! Проверьте сообщение выше.»
Программа следует по следующим этапам:
- Запрашивает у пользователя шаблон поиска (строки 7-9).
- Печатает список найденных файлов (строки 12-14).
- Используя модуль stat, получает права доступа для каждого найденного файла и отображает их на экране (строки 15-23).
Результат работы программы показан в Листинге 2.
$ python example1.py
Enter the file pattern to search for:
j*.py
Листинг 2. Вывод первого примера
$ python example1.py
Введите шаблон поиска:
j*.py
Файлы:
jim.py
jim2.py
================================
Permissions for file jim.py :
USR имеет R права доступа
USR имеет W права доступа
USR не имеет X прав доступа
GRP имеет R права доступа
GRP не имеет W прав доступа
GRP не имеет X прав доступа
OTH имеет R права доступа
OTH не имеет W прав доступа
OTH не имеет X прав доступа
Permissions for file jim2.py :
USR имеет R права доступа
USR имеет W права доступа
USR не имеет X прав доступа
GRP имеет R права доступа
GRP не имеет W прав доступа
GRP не имеет X прав доступа
OTH имеет R права доступа
OTH не имеет W прав доступа
OTH не имеет X прав доступа
Пример 2: Выполнение операций с архивом tar при помощи меню
Предыдущий пример для своей работы запрашивал у пользователя поисковый шаблон. Другой способ получить от пользователя информацию — аргумент в командной строке. Программа в Листинге 3 показывает как сделать это в Python: код берет имя файла tar, как аргумент командной строки и затем предложит пользователю несколько опций. Этот пример так же показывает новый способ решения проблемы. Первый пример использовал модуль команд для запуска find и захвата вывода. Этот подход можно назвать неуклюжим и не очень «питоновским». Этот пример использует для открытия tar файла модуль tarfile, преимущество которого в том, что он позволяет Вам использовать атрибуты и методы Python при манипуляции с файлами. При помощи многих модулей Python, вы можете делать вещи, недоступные через командную строку. Этой хороший пример использования меню в Python. Программа выполняет различные действия в зависимости от вашего выбора:
- Если вы нажмете 1, программа предложит выбрать файл в архиве для извлечения в текущую директорию и затем извлечет файл.
- Если вы нажмете 2, программа предложит выбрать файл и затем покажет информацию о нем.
- Если вы нажмете 3, программа выведет список всех файлов в архиве.
Листинг 3. Выполнение операций с архивом tar при помощи меню
# -*- coding: utf-8 -*-
import tarfile, sys
try:
#открываем tar-файл
tar = tarfile.open(sys.argv[1], «r:tar»)
#выводим меню и сохраняем выбор
selection = raw_input(«Введитеn
1 чтобы извлечь файлn
2 чтобы вывести информацию о файле в архивеn
3 чтобы показать все файлы в архивеnn»)
#выполняем действия, основанные на выборе
if selection == «1»:
filename = raw_input(«введите имя файла для извлечения: «)
tar.extract(filename)
elif selection == «2»:
filename = raw_input(«введите имя файла для просмотра: «)
for tarinfo in tar:
if tarinfo.name == filename:
print «n
Имя файла:tt», tarinfo.name, «n
Размер:tt», tarinfo.size, «байтn»
elif selection == «3»:
print tar.list(verbose=True)
except:
print «При выполнении программы возникла проблема!»
Программа следует по следующим этапам:
- Открывает tar файл (строка 5).
- Выводит на экран меню и получает выбор пользователя (строки 8-11).
- Если вы нажали 1 (строки 14-16), извлекает файл из архива.
- Если вы нажали 2 (строки 17-23), предоставляет информацию о выбранном файле.
- Если вы нажали 3 (строки 24-25), предоставляет информацию о всех файлах в архиве.
Результат работы программы показан в Листинге 4.
Листинг 4. Меню пользователя для второго примера
$ python example2.py jimstar.tar
Введите
1 чтобы извлечь файл
2 чтобы вывести информацию о файле в архиве
3 чтобы показать все файлы в архиве
Пример 3. Проверка запущенного процесса и отображение информации в дружественном представлении.
Одной из важнейших обязанностей системного администратора является проверка запущенных процессов. Скрипт в Листинге 5 даст вам несколько идей. Программа использует преимущества возможностей Unix: команда grep использует вывод, генерированный другой командой. Это позволит вам уменьшить объем данных, которые в дальнейшем будет анализировать Python.
Программа так же использует модуль string. Изучите этот модуль — вы будете часто его использовать.
Листинг 5. Отображение информации о запущенном процессе в дружественном представлении
# -*- coding: utf-8 -*-
import commands, os, string
program = raw_input(«Введите имя программы для проверки: «)
try:
#выполняем команду ‘ps’ и присваиваем результат списку
output = commands.getoutput(«ps -f|grep » + program)
proginfo = string.split(output)
#выводим результат
print «n
Путь:tt», proginfo[5], «n
Владелец:ttt», proginfo[0], «n
ID процесса:tt», proginfo[1], «n
ID родительского процесса:t», proginfo[2], «n
Время запуска:tt», proginfo[4]
except:
print «При выполнении программы возникла проблема!»
Программа следует по следующим этапам:
- Получает имя процесса для проверки и присваивает его переменной (строка 3).
- Запускает команду ps и добавляет результат в список (строки 7-8).
- Выводит детальную информацию о процессе (строки 11-16).
- Результат работы программы показан в Листинге 6.
Листинг 6. Вывод третьего примера
$ python example3.py
Введите имя программы для проверки: xterm
Путь: pts/0
Владелец: goga
ID процесса: 26509
ID родительского процесса: 26493
Время запуска: 17:28
Пример 4. Проверка имен пользователей и паролей на соблюдение политики безопасности. Управление безопасностью важная часть работы для каждого системного администратора. Python делает эту работу проще, как показывает последний пример. Программа в Листинге 7 использует модуль pwd для доступа к базе данных паролей. Она проверяет имена пользователей и пароли на соблюдение политики безопасности (в данном случае, имена должны быть как минимум 6 символов в длину, пароли — 8 символов). Есть два предостережения:
Эта программа работает только если у вас есть полные права для доступа к /etc/passwd.
Если вы используете теневые пароли, скрипт работать не будет (однако, в Питон 2.5 есть модуль spwd, который решит эту проблему).
Листинг 7. Проверка имен пользователей и паролей на соблюдение политики безопасности
# -*- coding: utf-8 -*-
import pwd
#заводим счетчики
erroruser = []
errorpass = []
#получаем базу данных паролей
passwd_db = pwd.getpwall()
try:
#проверяем каждое имя пользователя и пароль на валидность
for entry in passwd_db:
username = entry[0]
password = entry [1]
if len(username)
Программа следует по следующим этапам:
- Инициализирует списки счетчиков (строки 4-5).
- Открывает базу данных паролей и записывает данные в список (строка 8).
- Проверяет имена пользователей и пароли на валидность (строки 12-18).
- Выводит имена и пароли, не соответствующие политике безопасности (строки 21-26).
Результат работы программы показан в Листинге 8.
Листинг 8. Вывод четвертого примера
$ python example4.py
Следующие пользователи имеют имена менее чем из 6 символов::
Guest
Следующие пользователи имеют пароли менее чем из 8 символов:
Guest
johnsmith
joewilson
suejones
Другое применение скриптов. Вы можете использовать Python по ряду направлений для управления системой. Одна из лучших вещей, которую вы можете сделать — проанализировать свою работу, определить какие задачи вы выполняете неоднократно и изучить модули Python, которые помогут вам решить эти задачи — почти наверняка, таковые найдутся. Некоторые области, где Python может быть отличным помощником:
- Управление серверами: проверка патчей для конкретного приложения и их автоматическое обновление.
- Журналирование: автоматическая отправка e-mail при появлении в логах особого вида ошибки.
- Сеть: создание Telnet соединения к серверу и слежение за статусом соединения.
Тестирование web-приложений: использование свободно доступных инструментов для эмуляции веб-браузера и проверки веб-приложения на функциональность и производительность.
Это всего лишь несколько примеров — я уверен вы сможете добавить к ним свои собственные полезные идеи.
Python для системных администраторов
Эффективное управление серверами UNIX и Linux.
Гифт Н., Джонс Д. «Python в системном администрировании UNIX и Linux»Символ-Плюс, 2009 год, 512 стр. (6,37 мб. djvu + 4,13 мб. Source Code)
Книга показывает как можно эффективно использовать язык программирования Python для системных администраторов. Решать многие повседневные задачи управления серверами UNIX и Linux с его помощью. Все задачи разбиты по главам, где показаны примеры практического применения скриптов для резервного копирования данных, архивирования или созданию собственных инструментов командной строки, создание многозадачных приложений, разработки сценариев для выполнения запланированных задач.
Темы рассмотренные в книге: организация разделения процессов и информационное взаимодействие между ними с использованием сетевых протоколов и задач. Разработка интерактивных программ с графической оболочкой. Обработка обращений и взаимодействие с базами данных. Создание многозадачных приложений работающих с Google App Engine.
Кроме того, авторы книги создали доступную для загрузки и свободно распространяемую — VM (виртуальную машину на базе Ubuntu), включающую исходные тексты примеров из книги и способную выполнять примеры, использующие SNMP, IPython, SQLAlchemy и многие другие утилиты. Книга рассчитан на системных администраторов и программистов, начинающих осваивать язык Python.
ISBN 978-5-93286-149-3 ISBN 978-0-596-51582-9 (англ)
1. Введение 21
Почему Python 21
Мотивация 28
Основы 29
Выполнение инструкций в языке Python 30
Использование функций в языке Python 35
Повторное использование программного кода с помощью инструкции import 39
2. IPython 45
Установка IPython 46
Базовые понятия 48
Справка по специальным функциям 56
Командная оболочка UNIX 61
Сбор информации 81
Автоматизация и сокращения 95
В заключение 101
3. Текст 102
Встроенные компоненты Python и модули 103
Анализ журналов 146
ElementTree 153
В заключение 158
4. Создание документации и отчетов 159
Автоматизированный сбор информации 160
Сбор информации вручную 163
Форматирование информации 174
Распространение информации 180
В заключение 185
5. Сети 186
Сетевые клиенты 186
Средства вызова удаленных процедур 199
SSH 206
Twisted 209
Scapy 216
Создание сценариев с использованием Scapy 219
6. Данные 221
Введение 221
Использование модуля OS для взаимодействия с данными 222
Копирование, перемещение, переименование и удаление данных 224
Работа с путями, каталогами и файлами 226
Сравнение данных 230
Объединение данных 233
Поиск файлов и каталогов по шаблону 239
Обертка для rsync 241
Метаданные: данные о данных 244
Архивирование, сжатие, отображение и восстановление 246
Использование модуля tarfile для создания архивов TAR 246
Использование модуля tarfile для проверки содержимого файлов TAR 249
7. SNMP 252
Введение 252
Краткое введение в SNMP 252
IPython и Net-SNMP 256
Исследование центра обработки данных 260
Получение множества значений с помощью SNMP 263
Создание гибридных инструментов SNMP 270
Расширение возможностей Net-SNMP 271
Управление устройствами через SNMP 275
Интеграция SNMP в сеть предприятия с помощью Zenoss 276
8. Окрошка из операционных систем 278
Введение 278
Кросс-платформенное программирование на языке Python в UNIX 279
Pylnotify 291
OS X 293
Администрирование систем Red Hat Linux 298
Администрирование Ubuntu 299
Администрирование систем Solaris 299
Виртуализация 300
Облачная обработка данных 301
Использование Zenoss для управления серверами Windows из Linux 309
9. Управление пакетами 313
Введение 313
Setuptools и пакеты Python Eggs 314
Использование easy_install 315
Дополнительные особенности easy_install 318
Создание пакетов 324
Точки входа и сценарии консоли 329
Регистрация пакета в Python Package Index 330
Distutils 332
Buildout 335
Использование Buildout 335
Разработка с использованием Buildout 339
Virtualenv 339
Менеджер пакетов ЕРМ 344
10. Процессы и многозадачность 350
Введение 350
Модуль subprocess 350
Использование программы Supervisor т для управления процессами 361
Использование программы screen для управления процессами 364
Потоки выполнения в Python 365
Процессы 378
Модуль processing 379
Планирование запуска процессов Python 382
Запуск демона 384
В заключение 388
11. Создание графического интерфейса 390
Теория создания графического интерфейса 390
Создание простого приложения PyGTK 392
Создание приложения PyGTK для просмотра файла журнала веб-сервера Apache 394
Создание приложения для просмотра файла журнала веб-сервера Apache с использованием curses 398
Веб-приложения 403
Django 404
В заключение 426
12. Сохранность данных 427
Простая сериализация 428
Реляционная сериализация 448
В заключение 458
13. Командная строка 459
Введение 459
Основы использования потока стандартного ввода 460
Введение в optparse 462
Простые шаблоны использования optparse 462
Внедрение команд оболочки в инструменты командной строки на языке Python 470
Интеграция конфигурационных файлов 477
В заключение 479
14. Практические примеры 480
Управление DNS с помощью сценариев на языке Python 480
Использование протокола LDAP для работы с OpenLDAP, Active Directory и другими продуктами из сценариев на языке Python 482
Составление отчета на основе файлов журналов Apache 484
Зеркало FTP 492
Приложение. Функции обратного вызова 496
Алфавитный указатель 499
Python в администрировании сервера: почему бы и нет?
Архив номеров / 2002 / Выпуск №1 (1) / Python в администрировании сервера: почему бы и нет?
|