Pull to refresh

Comments 63

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

Это ж скока места в консоли пропадает! Гораздо привычней стандартное rw-r--r--.
Тоже самое и по остальным примерам.
Мне кажется автор показал этим, что с помощью питона сисадмин может изменить привычный ход вещей.
Нормальному сисадмину ТАК изменить привычный ход вещей в голову не придёт.
Согласен целиком и полностью.

К тому же ввод параметров через интерфейс — это самое неудобное, что можно придумать.
history для того и дана, чтобы облегчать работу, а здесь — сплошные никому не нужные рюшечки.
Да, питон — сила. Недавно столкнулся с тем, что надо было автоматизировать работу с железкой по телнету, которой нужно было посылать цифры, соответственно пунктам меню. Сначала пал выбор на Expect, однако несмотря на то, что на локальной машине под XP все было идеально, на 2003 сервере работать отказалось. Гугление привело к тому, что подобного не нашел и встала необходимость изучить язык Expect'а. Затем empty, но тоже что-то не сложилось. И тут пришел совет коллеги насчет модуля telnetlib… и проблема решена, очень просто и надежно :)
Может я не в тему, но мне нужна помощь в выборе книги по питону (хорошо дружу с PHP, осваиваю ООП, ООА, паттерны, поэтому серия для чайников не интересует). Великий язык, нужно осваивать.
Dive into Python. Очень хорошая книга, на мой взгляд. С хорошими примерами. Насколько я помню, она open source и переведена на много языков.

www.diveintopython.org/
Лучше официальной документации не найти. Там в начале есть довольно большой раздел Tutorial и описание языка, а дальше все равно придется осваивать стандартную библиотеку по этой документации.
Python. Essential reference
D. Beazley
Мне книга Лутца «Изучаем Python» понравилась
Не нужен, не нужен, НЕ НУЖЕН Python для таких задач!!! Поймите это!
Согласен. По мне так bash вполне подойдет.
именно для таких не нужен, а вот когда нужно автоматизировать что то посложнее типа отсылки писем, заливки файлов по фтп и т.д. то он таки нужен.
Для этого тоже хватит bash — mail, ncftp/просто ftp.
UFO landed and left these words here
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 в пару строк.
по количеству символов 2 строки баша не сильно меньше будут. Код пытона будет сильно удобочитаемее и удобнее для правки.
UFO landed and left these words here
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
UFO landed and left these words here
Автор просто показал дверь, каждый сам решает войти в нее или нет:)
Если сможете показать задачу серверного администрирования которую нельзя решить на баше а можно только на питоне — я сожру свою шляпу
разборка лога и отправка его на удаленную машину бинарными данными. подойдет?
Подойдет
cat /some/logs/* | grep 'some what i need' > file; log2bin file file.bin; scp file.bin remote.host
>Если сможете показать задачу серверного администрирования которую нельзя решить на баше а можно только на питоне — я сожру свою шляпу

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

Вот, к примеру:
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()

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

2) mod_spread, mol_slowlog, mod_mysqlog
UFO landed and left these words here
1) А он не читать а работать сделан. Про то что есть генератор парсеров и на выходе дает нечитабельный вариант — забыли?

2) Ну и ненадо апача. Про то что можно писать лог в fifo который выдергивается на удаленный сервер — большая тайна?
UFO landed and left these words here
UFO landed and left these words here
первый пример работать не будет, отступы съелись после try:
Спасибо, исправил.
UFO landed and left these words here
Ссылка была с самого начала.
UFO landed and left these words here
не редкость, когда на серверах даже bash не устанавливают (спасает только set -o emacs), а вы pyton предлагаете.
Питон мне друг, но истина дороже
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()))

Он не оптимален, не гибок, но тоже решает свою задачу.
UFO landed and left these words here
Python это конечно здорово, но интерактивные скрипты у сисадмина это не юникс-вей.

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

Собственно это перевод))
может в начале таки исправите на «Автор перевода»?
if len(password) < 8

Так вот прямо и вытащили пароль, ага. Максимум, что этот модуль выдаст вместо пароль в современных линуксах — это «x» (или "*"), начиная с питона 2.5 есть модуль spwd, который умеет вытаскивать хеши.
Но и он поставленную задачу не решает.
в Ubuntu 9.04, очень даже современном линуксе, это работает.
Что работает? Приведенный скрипт показал, что Ваш пароль короче 8 символов, а он и правда короче? «x» тоже короче 8 символов.
ЗЫ. Ubuntu 8.10 — через модуль pwd пароли не достаются
«Дружественный вывод» админу не нужен.
Я сейчас вижу смысл Python в написании утилит с простым гуи для пользователей, выполняющих какие-то обслуживающие функции (например в учебных классах для преподавателей — перенос учебных баз пропустившим, чистка для новых слушателей и т.п.), разные обработчики, работающие не через веб-интерфейс (дополнительная обработка статистики прокси, сайтов, результаты тестирования)… + скрипты по массовому обслуживанию однотипных компьютеров в сети…
UFO landed and left these words here
Only those users with full accounts are able to leave comments. Log in, please.