Вы находитесь на странице: 1из 11

Python для системных администраторов / Хабрахабр https://habrahabr.

ru/post/59419/

Войти Регистрация

Пользователь

12 мая 2009 в 21:44


перевод

Python*

Автор перевода @messerr, просто с кармой ему не повезло.

Введение

Как системный администратор, вы сталкиваетесь с многочисленными проблемами. Управление пользователями, дисковым пространством,
процессами, устройствами и бэкапами могут стать причиной потери волос, юмора или вменяемости у многих администраторов. Shell скрипты могут
выручить, но они зачастую имеют множество ограничений. В этом случае полнофункциональный скриптовый язык, такой как Python, способен
превратить утомительную задачу в легкую и, смею сказать, веселую.
Примеры в этой статье демонстрируют различные возможности Python, которые вы можете использовать на практике. Если Вы работаете с
помощью них — вы на правильном пути к пониманию силы Python.

О модулях

Модуль – важное понятие в языке Python. По существу, модуль – это ресурс, который вы подключаете к программе, чтобы затем использовать его.
Этот процесс можно сравнить с тем, что вы достанете из ящика лист бумаги и положите его на свой стол, подготовив тем самым к дальнейшему
использованию. Модули подключаются при помощи команды import, которая присутствует в начале каждого примера. Модули доступны для связи с
базами данных, сетевого программирования, сервисов операционных систем и сотен других полезных областей.

Заставим Python работать

Python — полнофункциональный, надежный язык программирования и, по существу, имеет массу свойств. Изучение его может стать задачей
эпических масштабов. Однако, помните, что многие способности, такие как GUI инструментарий, имеют для системного администратора низкую
ценность. Вот почему в этой статье используются специфичные примеры: они демонстрируют навыки, необходимые для эффективного написания
скриптов управления системой.

Немного о примерах:
Каждый пример использует try: и except: с блоком кода внутри. Это осуществляет элементарную обработку ошибок. Python имеет обширную
поддержку для обработки всех видов исключений, но, в рамках примеров этой статьи, я обошелся простой проверкой.
Эти примеры тестировались с помощью Python 2.5, запущенном на Linux® box, но они должны работать на любой Unix/Linux машине.

Вы несомненно задумаетесь об улучшении этих скриптов. Это хорошо! Натура Python-скриптов заключается в том, что они могут быть легко
модифицированы и настроены без необходимости перекомпиляции.

Пример 1: Поиск файлов и отображение прав в дружественном формате

Первый пример (Листинг 1) осуществляет поиск файлов, в соответствии с шаблоном (который вводит пользователь) и выводит результат на экран
вместе с правами доступа для каждого файла. Во-первых, вы можете подумать, что эта программа не делает ничего большего, чем вызов команды
find; однако она отображает результаты особым образом и ваши варианты отображения этого расширенного поиска безграничны.
Скрипт по существу решает три задачи:
1. Получает шаблон поиска от пользователя
2. Выполняет поиск
3. Показывает результаты пользователю

При написании скрипта постоянно задавайте себе вопрос, «Выполнение какой задачи данный код обеспечивает?» Задавая себе этот вопрос, вы
повышаете внимание в вашей работе и ее эффективность.

Листинг 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, ":"

Стр. 1 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

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 "Возникла проблема! Проверьте сообщение выше."

Программа следует по следующим этапам:


1. Запрашивает у пользователя шаблон поиска (строки 7-9).
2. Печатает список найденных файлов (строки 12-14).
3. Используя модуль 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\

Стр. 2 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

1 чтобы извлечь файл\n\


2 чтобы вывести информацию о файле в архиве\n\
3 чтобы показать все файлы в архиве\n\n")
#выполняем действия, основанные на выборе
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\
Имя файла:\t\t", tarinfo.name, "\n\
Размер:\t\t", tarinfo.size, "байт\n"
elif selection == "3":
print tar.list(verbose=True)
except:
print "При выполнении программы возникла проблема!"

Программа следует по следующим этапам:


1. Открывает tar файл (строка 5).
2. Выводит на экран меню и получает выбор пользователя (строки 8-11).
3. Если вы нажали 1 (строки 14-16), извлекает файл из архива.
4. Если вы нажали 2 (строки 17-23), предоставляет информацию о выбранном файле.
5. Если вы нажали 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\
Путь:\t\t", proginfo[5], "\n\
Владелец:\t\t\t", proginfo[0], "\n\
ID процесса:\t\t", proginfo[1], "\n\
ID родительского процесса:\t", proginfo[2], "\n\
Время запуска:\t\t", proginfo[4]
except:
print "При выполнении программы возникла проблема!"

Программа следует по следующим этапам:


1. Получает имя процесса для проверки и присваивает его переменной (строка 3).
2. Запускает команду ps и добавляет результат в список (строки 7-8).
3. Выводит детальную информацию о процессе (строки 11-16).
4. Результат работы программы показан в Листинге 6.

Листинг 6. Вывод третьего примера

$ python example3.py
Введите имя программы для проверки: xterm
Путь: pts/0

Стр. 3 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

Владелец: 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) < 6:
erroruser.append(username)
if len(password) < 8:
errorpass.append(username)
#выводим результаты на экран
print "Следующие пользователи имеют имена менее чем из 6 символов:"
for item in erroruser:
print item
print "\nСледующие пользователи имеют пароли менее чем из 8 символов:"
for item in errorpass:
print item
except:
print "Возникла проблема при выполнении программы!"

Программа следует по следующим этапам:


1. Инициализирует списки счетчиков (строки 4-5).
2. Открывает базу данных паролей и записывает данные в список (строка 8).
3. Проверяет имена пользователей и пароли на валидность (строки 12-18).
4. Выводит имена и пароли, не соответствующие политике безопасности (строки 21-26).
Результат работы программы показан в Листинге 8.

Листинг 8. Вывод четвертого примера

$ python example4.py
Следующие пользователи имеют имена менее чем из 6 символов::
Guest
Следующие пользователи имеют пароли менее чем из 8 символов:
Guest
johnsmith
joewilson
suejones

Другое применение скриптов.Вы можете использовать Python по ряду направлений для управления системой. Одна из лучших вещей, которую вы
можете сделать — проанализировать свою работу, определить какие задачи вы выполняете неоднократно и изучить модули Python, которые
помогут вам решить эти задачи — почти наверняка, таковые найдутся.Некоторые области, где Python может быть отличным помощником:
Управление серверами: проверка патчей для конкретного приложения и их автоматическое обновление.
Журналирование: автоматическая отправка e-mail при появлении в логах особого вида ошибки.
Сеть: создание Telnet соединения к серверу и слежение за статусом соединения.
Тестирование web-приложений: использование свободно доступных инструментов для эмуляции веб-браузера и проверки веб-приложения на
функциональность и производительность.
Это всего лишь несколько примеров — я уверен вы сможете добавить к ним свои собственные полезные идеи.

Резюме

С его легкостью в изучении, его умением управлять файлами, процессами, строками и числами, и его почти бесконечным массивом
вспомогательных модулей, Python — это скриптовый язык, который выглядит так, будто был создан специально для системных администраторов.
Python — это ценный инструмент в инструментарии любого системного администратора.

Стр. 4 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

python, системное администрирование

+48 41,7k 187

Автор оригинала: James Knowlton

карма рейтинг
Andrey M. @Amka 15,7 0,0
Пользователь

Сайт Github

17 сентября 2012 в 21:09

+51 59,8k 343 70

16 января 2012 в 13:07

+61 32,9k 586 59

23 января 2009 в 19:18

+169 92,3k 637 172

Разработка

+201 22,7k 261 84

+25 15,6k 43 75

+37 12,9k 25 16

+55 10,9k 59 37

+55 7,3k 101 7

Комментарии (63)
ant0n 12 мая 2009 в 22:27 +18

Мне кажется примеры притянуты за уши. Ну не удобно админу смотреть на права доступа в виде

USR имеет R права доступа


USR имеет W права доступа
USR не имеет X прав доступа
GRP имеет R права доступа
GRP не имеет W прав доступа

Это ж скока места в консоли пропадает! Гораздо привычней стандартное rw-r--r--.


Тоже самое и по остальным примерам.

messerr 12 мая 2009 в 22:30 +2

Стр. 5 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

Мне кажется автор показал этим, что с помощью питона сисадмин может изменить привычный ход вещей.

Pilat 12 мая 2009 в 23:41 +7

Нормальному сисадмину ТАК изменить привычный ход вещей в голову не придёт.

Dreadatour 12 мая 2009 в 23:02 +2

Согласен целиком и полностью.

К тому же ввод параметров через интерфейс — это самое неудобное, что можно придумать.
history для того и дана, чтобы облегчать работу, а здесь — сплошные никому не нужные рюшечки.

kalbas 12 мая 2009 в 22:27 +1

Да, питон — сила. Недавно столкнулся с тем, что надо было автоматизировать работу с железкой по телнету, которой нужно было посылать цифры, соответственно
пунктам меню. Сначала пал выбор на Expect, однако несмотря на то, что на локальной машине под XP все было идеально, на 2003 сервере работать отказалось.
Гугление привело к тому, что подобного не нашел и встала необходимость изучить язык Expect'а. Затем empty, но тоже что-то не сложилось. И тут пришел совет
коллеги насчет модуля telnetlib… и проблема решена, очень просто и надежно :)

etc 12 мая 2009 в 22:41 +2

Может я не в тему, но мне нужна помощь в выборе книги по питону (хорошо дружу с PHP, осваиваю ООП, ООА, паттерны, поэтому серия для чайников не интересует).
Великий язык, нужно осваивать.

ApeCoder 12 мая 2009 в 22:48 +3

можно почитать туториал, который идлет в комплекте поставки и diveintopython.org/

evilkost 12 мая 2009 в 22:49 +2

diveintopython.org

monsterzz 12 мая 2009 в 22:50 +1

Dive into Python. Очень хорошая книга, на мой взгляд. С хорошими примерами. Насколько я помню, она open source и переведена на много языков.

www.diveintopython.org/

drJonnie 12 мая 2009 в 22:50 +1

Лучше официальной документации не найти. Там в начале есть довольно большой раздел Tutorial и описание языка, а дальше все равно придется осваивать
стандартную библиотеку по этой документации.

zerkms 13 мая 2009 в 01:13 0

Python. Essential reference


D. Beazley

Jenyay 13 мая 2009 в 10:00 +1

Мне книга Лутца «Изучаем Python» понравилась

ddmitry 13 мая 2009 в 23:50 0

Мне в свое время понравился учебник на ИНТУИТе


www.intuit.ru/department/pl/python/

ubique 12 мая 2009 в 22:57 +4

Не нужен, не нужен, НЕ НУЖЕН Python для таких задач!!! Поймите это!

Amka 12 мая 2009 в 22:58 0

Согласен. По мне так bash вполне подойдет.

drujebober 12 мая 2009 в 23:10 +3

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

borisko 13 мая 2009 в 07:56 0

Для этого тоже хватит bash — mail, ncftp/просто ftp.

B_dot 13 мая 2009 в 02:10 0

Для ТАКИХ задач не то чтобы Python не нужен, такие задачи вообще не нужны.
Похоже автор статьи — начинающий *nix-админ и он еще не понял что все базовые утилиты очень удобны и ничего с ними делать не надо.

А вот для чего-нибудь более сложного, например, переместить файлы по какому-нибудь признаку, допустим размеру в разные директории и поменять
соответсвенно пути в БД — самое оно.

borisko 13 мая 2009 в 08:02 0

find -size +1M | while read file; do let «dir=`du -b $file`/1024/1024/10»; test -d $dir || mkdir $dir; mv $file $dir; done

Не могу представить себе задачу админа, которую нужно писать на питоне на несколько десятков строк, и которую нельзя написать на sh в пару строк.

Стр. 6 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

zzeus 13 мая 2009 в 09:52 +4

по количеству символов 2 строки баша не сильно меньше будут. Код пытона будет сильно удобочитаемее и удобнее для правки.

B_dot 13 мая 2009 в 16:08 0

А бд править?

borisko 13 мая 2009 в 16:17 0

find -size +1M | while read file; do


size=`du -b $file | cut -f1`
echo «INSERT INTO files (name, size) VALUES (\»$file\", $size)" >> files.sql
done
mysql dbname < files.sql && rm files.sql

B_dot 13 мая 2009 в 17:46 0

У такой реализации много проблем если файлов действительно МНОГО.

messerr 13 мая 2009 в 05:40 +3

Автор просто показал дверь, каждый сам решает войти в нее или нет:)

odessky 12 мая 2009 в 23:12 0

Если сможете показать задачу серверного администрирования которую нельзя решить на баше а можно только на питоне — я сожру свою шляпу

prn 13 мая 2009 в 00:08 +2

разборка лога и отправка его на удаленную машину бинарными данными. подойдет?

odessky 13 мая 2009 в 14:52 0

Подойдет
cat /some/logs/* | grep 'some what i need' > file; log2bin file file.bin; scp file.bin remote.host

facha 13 мая 2009 в 01:37 +2

>Если сможете показать задачу серверного администрирования которую нельзя решить на баше а можно только на питоне — я сожру свою шляпу

Говоря «на баше» Вы немного лукавите. На баше — это на баше + grep/awk/sed/cat… + специфические для задачи утилитки (например, snmpget). Каждая из
утилиток — отдельный процесс со всеми вытекающими накладными расходами. В скрипте на питоне процесс будет всего один (если сами их не нафоркаете,
конечно).

etz 13 мая 2009 в 19:39 0

у баша утилитки, у питона модули. сравнение вполне корректно

facha 13 мая 2009 в 22:34 +1

Сравним… Модули — библиотеки. Считываются с диска и загружаются в память процесса питона один раз. Утилитки — отдельные программы. Считываются
каждый раз с диска, каждый раз им нужно выделять память, создавать пайпы для общения с ними…

Вот, к примеру:
facha@fuzzy:~$ time ./printtime.sh
real 0m2.226s
user 0m1.044s
sys 0m1.156s

facha@fuzzy:~$ time ./printtime.py


real 0m0.029s
user 0m0.020s
sys 0m0.008s

Дальше код этих мегаскриптов (дисклеймер: если хабр его покоцает — я не виноват):

printtime.sh
#!/bin/sh
for i in `seq 1000`; do echo `date +%s`; done

printtime.py
#!/usr/bin/env python
import time
for i in range(1000): print time.time()

B_dot 13 мая 2009 в 02:18 +1

1. Выше уже написал:


Переместить файлы по определенному признаку-размеру в разные директории и поменять соответсвенно пути в БД — самое оно.

При этом файлов много, а сервер нагружен, так что каждый раз делать echo «update ...» | psql не катит, т.к. такое будет выполняться раза в два дольше.

2. собрать логи фронтенд http сервера с нескольких машин (по ftp/sftp), обработать их, вывести:
а) запросы(url), которые в сумме выполнялись наибольшее время (в логе есть поле — upstream response time)
б) наиболее медленные запросы

Стр. 7 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

в) наиболее медленные запросы с учетом исключений (нам пофигу сколько времени генерируется /rss — юзеры этого не замечают)
каждому при этом вывести количество вызовов, среднее время,…

и т.д.

odessky 13 мая 2009 в 15:02 0

1) Слишком сумбурно, но скажу что скрипт может генерировать еще один скрипт который выполнится пакетно :)

2) mod_spread, mol_slowlog, mod_mysqlog

B_dot 13 мая 2009 в 16:10 +1

1) ну как вариант, но это как мне кажется не очень читаться будет

2) apache не используется

odessky 13 мая 2009 в 19:45 0

1) А он не читать а работать сделан. Про то что есть генератор парсеров и на выходе дает нечитабельный вариант — забыли?

2) Ну и ненадо апача. Про то что можно писать лог в fifo который выдергивается на удаленный сервер — большая тайна?

Qetzal 12 мая 2009 в 23:13 +2

Python for Unix and Linux System Administration


Описание: oreilly.com/catalog/9780596515829/
Скачать: narod.ru/disk/8625262000/python-for-unix-and-linux-system-administration.rar.html

Werebear 13 мая 2009 в 00:46 +1

Собственно она и на русском есть.


www.books.ru/shop/books/634254
Причем довольно давно уже.

B_dot 13 мая 2009 в 02:19 +1

Сейчас читаю — достаточно занимательно. Рекомендую.

igorekk 13 мая 2009 в 14:14 0

Хорошая книжка, да.

khizhaster 12 мая 2009 в 23:13 0

Бесполезнячок абсолютный :-)

alexeym 12 мая 2009 в 23:20 +4

Системный администратор должен знать bash лучше чем свой родной


этот скриптовой язык в купе с системными утилитами делает очень много и делает это элегантно. И это действительно unix-way

Да будет так.

kmike 12 мая 2009 в 23:28 0

первый пример работать не будет, отступы съелись после try:

Amka 12 мая 2009 в 23:36 0

Спасибо, исправил.

НЛО прилетело и опубликовало эту надпись здесь

sshz 13 мая 2009 в 18:51 0

Ждать надо там где статью написали www.ibm.com/developerworks/aix/library/au-python/


А это просто перевод в котором, как это обычно бывает, забыли ссылку на источник.

messerr 13 мая 2009 в 19:02 +1

Ссылка была с самого начала.

НЛО прилетело и опубликовало эту надпись здесь

ksergej 13 мая 2009 в 00:50 +1

не редкость, когда на серверах даже bash не устанавливают (спасает только set -o emacs), а вы pyton предлагаете.

dymdym 13 мая 2009 в 00:54 +1

хорош питон, но баш роднее

sshz 13 мая 2009 в 18:58 0

Питон мне друг, но истина дороже

Стр. 8 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

farcaller 13 мая 2009 в 01:38 +2

commandString = «find » + pattern


commandOutput = commands.getoutput(commandString)

Это подход шелл-программиста. И все остальное прекрасно можно было сделать на баше например. На питоне для этого есть свои методы обхода директорий, свой
glob для подстановок. Примеры имеют право на жизнь. Но опять же хорошо что в том же linux шебанговые скрипты не суидны — в этих полно дырок с безопасностью
из-за использования шелла.

В общем вердикт: администратору для этих задач вполне хватит bash (и полистать тот же ABS). Некоторые вот используют ipython в качестве основного шелла. Да,
этот вариант имеет право на жизнь, но он не всегда оптимален.

Ну и в защиту автора: я сам грешу такими вещами, вот например скрипт для просмотра отспавненных django fcgi приложений у меня на сервере:
$ cat /usr/local/bin/djangostat.py
#!/usr/bin/env python

import os, commands

def ksort(x,y):
a, b = float(x['pmem']), float(y['pmem'])
if a>b:
return -1
elif a<b:
return 1
else:
return 0

def procs():
ll = commands.getoutput('ps aux|grep python').split('\n')
return [i.split() for i in ll]

def dstat(pp):
l = []
for p in pp:
if len(p)<13:
#print 'BA1', p
continue
if p[12] != 'runfcgi':
#print 'BA2', p
continue
s = p[11].split('/')
if len(s) < 3:
#print 'BA3', s
continue
m = {
'uid': p[0],
'pid': p[1],
'pcpu': p[2],
'pmem': p[3],
'vsz': p[4],
'rss': p[5],
'dom': s[3],
'app': s[5],
}
l.append(m)
return l

def pformat(v):
if len(v)>3:
return v[:-3]+'.'+v[-3:]
else:
return v

def printstat(s):
s.sort(ksort)
for i in s:
print "[%10s] {%5s} %20s %14s: CPU%%:%s MEM%%: %s VSZ/RSS: %s/%s Kb" % (
i['uid'], i['pid'], i['dom'], i['app'], i['pcpu'], i['pmem'], pformat(i['vsz']), pformat(i['rss']),
)

if __name__ == '__main__':
printstat(dstat(procs()))

Он не оптимален, не гибок, но тоже решает свою задачу.

НЛО прилетело и опубликовало эту надпись здесь

pro 13 мая 2009 в 05:09 +11

flashvoid 13 мая 2009 в 07:30 +3

Python это конечно здорово, но интерактивные скрипты у сисадмина это не юникс-вей.

Вот если бы эти примеры принимали параметры с конвеера, или хотя бы как аргумент командной строки…

Стр. 9 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

Bytamine 13 мая 2009 в 11:55 +1

Да, тоже резануло.

Claxton 13 мая 2009 в 08:38 0

Примеры с IBM.COM))

messerr 13 мая 2009 в 08:47 +1

Собственно это перевод))

etz 13 мая 2009 в 20:16 0

может в начале таки исправите на «Автор перевода»?

galaxy 13 мая 2009 в 21:50 0

if len(password) < 8

Так вот прямо и вытащили пароль, ага. Максимум, что этот модуль выдаст вместо пароль в современных линуксах — это «x» (или "*"), начиная с питона 2.5 есть
модуль spwd, который умеет вытаскивать хеши.
Но и он поставленную задачу не решает.

messerr 13 мая 2009 в 22:08 0

в Ubuntu 9.04, очень даже современном линуксе, это работает.

galaxy 14 мая 2009 в 01:37 0

Что работает? Приведенный скрипт показал, что Ваш пароль короче 8 символов, а он и правда короче? «x» тоже короче 8 символов.
ЗЫ. Ubuntu 8.10 — через модуль pwd пароли не достаются

Arceny 17 мая 2009 в 21:26 0

«Дружественный вывод» админу не нужен.

PhAbyss 9 июня 2009 в 21:43 0

Я сейчас вижу смысл Python в написании утилит с простым гуи для пользователей, выполняющих какие-то обслуживающие функции (например в учебных классах для
преподавателей — перенос учебных баз пропустившим, чистка для новых слушателей и т.п.), разные обработчики, работающие не через веб-интерфейс
(дополнительная обработка статистики прокси, сайтов, результаты тестирования)… + скрипты по массовому обслуживанию однотипных компьютеров в сети…

НЛО прилетело и опубликовало эту надпись здесь

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

+14 900 17 3

GT

+6 1,4k 4 0

+17 3,5k 14 5

GT

+8 2,5k 5 15

+16 1,7k 24 1

Стр. 10 из 11 19.07.2017, 18:11


Python для системных администраторов / Хабрахабр https://habrahabr.ru/post/59419/

Аккаунт Разделы Информация Услуги Приложения

Войти Публикации О сайте Реклама

Регистрация Хабы Правила Тарифы

Компании Помощь Контент

Пользователи Соглашение Семинары

Песочница Конфиденциальность

© 2006 – 2017 «TM» Служба поддержки Мобильная версия

Стр. 11 из 11 19.07.2017, 18:11

Вам также может понравиться