Você está na página 1de 36

Administrao de sistemas usando Python

Hlio Loureiro <helio@loureiro.eng.br> a <helio_loureiro@engineer.com> http://helio.loureiro.eng.br/presentation_python/ b http://loureiro.dyndns.org:8080/presentation_python/ Copyleft c 2002


a No

est funcionando no momento. b Tambm est fora do ar.

Administrao de sistemas usando Python p.1

Introduo
Esta uma apresentao introdutria da linguagem de programao Python, portanto no espere ver exemplos avanados de seu uso aqui. O objetivo desta apresentao mostrar a linguagem Python, sua sintaxe, seu uso e alguns exemplos prticos para administrao de sistemas. Os exemplos usados so programas utilizados em vrios ambientes reais, principalmente na funo de consultor onde o objetivo era fazer as tarefas o melhor possvel com o menor tempo possvel (tempo dinheiro). Os programas apresentados so testados e geralmente utilizados em vrias plataformas (Debian, FreeBSD, OpenBSD, Solaris e at Windows...).

Administrao de sistemas usando Python p.2

Histria do Python
Python foi criado no incio dos anos 90 por Guido van Rossum no Stichting Mathematisch Centrum, CWI, http://www.cwi.nl/ , Holanda, como um sucessor da linguagem chamada ABC. Em 1995, Guido continuou seu trabalho em Python na Corporation for National Research Initiatives, CNRI, http://www.cnri.reston.va.us/ , em Reston, Virginia, onde ele lanou vrias verses do programa.

Administrao de sistemas usando Python p.3

Histria do Python (cont.)


Em maio de 2000, Guido e o grupo de desenvolvedores do Python migraram para o BeOpen.com para formar o grupo BeOpen PythonLabs. Em outubro do mesmo ano, o grupo do PythonLabs migrou para o Zope Corporation (ento Digital Creations, veja http://www.zope.com ). Em 2001, a Fundao do Programa Python (PSF, veja http://www.python.org/psf ) foi criada, uma organizao sem ns lucrativos criada especicamente para manter a propriedade intelectual relacionada Python. A Zope Corporation um membro patrocinador do PSF. Todas as verses de Python so de cdigo aberto (veja

http://www.opensource.org/ para a denio de cdigo aberto). Historicamente a maioria, mas no todas, das verses de Python tm tambm sido compatveis com a GPL.
Administrao de sistemas usando Python p.4

Por qu chamado Python?


" "Alm de ser um cientista da computao, eu tambm sou f do "Monty Pythons Flying Circus"(uma srie cmica dos anos setentas na BBC, no caso - incomum - de voc no conhecer). Ocorreu-me um dia que eu precisava de um nome que fosse curto, nico, e levemente misterioso. E acontenceu de eu estar lendo alguns textos da srie naquela poca... Ento eu decidi chamar minha linguagem de Python." " Guido van Rossun

Administrao de sistemas usando Python p.5

Onde Python utilizado


Mailman - gerenciador de listas de discusso Zope - um ambiente para Webservices (servidor de contedo) Sketch - programa para desenho vetorial Pydf - programa df, para visualizao de quantidade de uso de parties do sistema, com sada colorida Ipcheck - programa cliente para uso do dyndns, registro dinmico de DNS Pysol - jogo de cartas pacincia

Administrao de sistemas usando Python p.6

Descrio
Python, em poucas linhas, : Linguagem de scripts Orientada objetos Com a possibilidade de gerao de byte-code Multiplataforma - mquina virtual Com caracterstica de laos atravs de identao Sem tipos!!! Rpida prototipagem Fcil integrao com C e Java

Administrao de sistemas usando Python p.7

Comparaes com outras linguagens


C Python orientada objetos e no possui tipos. C uma linguagem compilada, enquanto que Python, interpretada. C++ Linguagem compilada. Python interpretada. Geralmente no portvel (bibliotecas dependentes). Java Linguagem com tipos. Perl Linguagem pouco estruturada com tipos bsicos denidos por inicializao de vriveis ($x e @y). No pode ser usada interativamente. PHP Mais veloz que Python para criao de pginas web com contedo dinmico (mesmo utilizando mod_python). Tambm possui tipos denidos tal qual a linguagem Perl.

Qual a melhor? Resposta: e deveria existir uma?


Administrao de sistemas usando Python p.8

Documentao e Bibliograa
http://www.python.org/doc/current/tut/tut.html - Python Tutorial http://www.python.org/doc/current/lib/lib.html - Python Library Reference /usr/share/doc/python2.1/html/index.html - documentao que acompanha a instalao do Python a /usr/share/doc/python2.1/examples/ - exemplos e demos interessantes ou via Debian: helio@pasargada in ~# apt-cache search python doc | more
a Referente

ao Debian 3.0, woody.


Administrao de sistemas usando Python p.9

Estruturas de dados
nmeros num = 5 strings nome = Debian listas sistemas = [Debian, OpenBSD, FreeBSD] tuples sequencia = ( Debian, [ 1, 2 , 3 ], nome) dicionrios agenda = {helio: 999-333, macan: 1234} Exemplo: nome[0]: D nome[-1]: n nome[:-2]: Debi Obs: o smbolo # utilizado para marcar comentrio.
Administrao de sistemas usando Python p.10

Operadores aritmticos
adio subtrao diviso multiplicao exponenciao AND lgico and OR lgico or negao not

Administrao de sistemas usando Python p.11

Controles de uxo: if-elif-else


if (condio): faa elif (condio): faa else: faa ou simplesmente if (condio): faa Notas: Final do lao determinado pela indentao.

Administrao de sistemas usando Python p.12

Controles de uxo: for


variavel = [ Debian, GNU, Linux] for nome in variavel: print nome Notas: Sintaxe semelhante ao lao for de shell script. Final do lao determinado pela indentao.

Administrao de sistemas usando Python p.13

Controles de uxo: while


variavel = 10 while ( variavel ): print Debian rulez! variavel = variavel - 1 Notas: Final do lao determinado pela indentao.

Administrao de sistemas usando Python p.14

continue, break e pass

continue Continua o uxo do programa. break Finaliza o uxo. pass Executa sem realizar processamento.

Administrao de sistemas usando Python p.15

Funes
Declarada com def: def minha_funcao(variavel): print variavel

Exemplo de uso: minha_funcao(I Ocina Debian Paulista)

Administrao de sistemas usando Python p.16

Objetos, mtodos e classes


class Apache(self): # classe def _init_(self): # mtodo self.conf = /etc/apache/httpd.conf # atributo def comando(self,tipo): from os import system system(apachectl + tipo) server = Apache() server.comando(restart)

Administrao de sistemas usando Python p.17

Importando mdulos
Duas formas: import os os.system(uptime) ou from os import system system(uptime) O segundo formato mais rpido, pois todos os objetos e mtodos no so importados. O arquivo com mdulo precisar ter uma das extenses: py ou pyc ou pyo.

Administrao de sistemas usando Python p.18

py, pyc e pyo


py extenso geralmente usada em scripts Python pyc byte code. Pode ser usado para no redistribuir os fontes do programa e funciona em todas as plataformas, desde que se tenha o mquina virtual, o interpretador Python. gerado aps a primeira execuo do programa com extenso py. pyo cdigo objeto. Biblioteca de alguns mdulos de Python. Dependente de sistema operacional.

Administrao de sistemas usando Python p.19

Controle de excees
try: <cdigo> except KeyboardInterrupt: <cdigo> except: pass

Administrao de sistemas usando Python p.20

30 minutos
Espero estar chegando aqui aps 30 minutos, onde vimos: A origem do Python Onde usado Python O que Python Uma certa idia de como usar Dvidas???

Administrao de sistemas usando Python p.21

Hello World!
#! /usr/bin/python mensagem="Hello World!" print mensagem print "%s" % mensagem

Administrao de sistemas usando Python p.22

Executando o seu primeiro programa


helio@pasargada in ~# python hello.py Hello World! Hello World! helio@pasargada in ~# python Python 2.1.3 (#1, Sep 7 2002, 15:29:56) [GCC 2.95.4 20011002 (Debian prerelease)] on linux2 Type "copyright", "credits"or "license"for more information. import hello Hello World! Hello World!

 

Administrao de sistemas usando Python p.23

Autenticao
Mdulo criado para iniciar autenticao de programas (nunca saiu do estgio inicial...); um bom exemplo do uso de classes, simples de entender. Veja o arquivo autenticacao.py

Administrao de sistemas usando Python p.24

Laserlter
Programa criado para corrigir o problema do efeito escada nas impresses; utilizado em uma impressora laser nesse exemplo; o objetivo do ltro substituir no nal de cada linha o n por M n.


Veja os arquivos laserlter e printcap.

Administrao de sistemas usando Python p.25

Backup
Programa para realizar backups; poderia ter sido feito em shell script; mas est em Python para mostrar a diferena. Veja o arquivo backup.py.

Administrao de sistemas usando Python p.26

Usando um execv()
Programa para animar o ambiente; seleciona aleatoriamente um arquivo para tocar; usada uma chamada execv() para executar ao invs de system(). Veja o arquivo mpy3layer.py.

Administrao de sistemas usando Python p.27

default.ida (code red e nimda)


Programa para registrar as tentativas de code red e nimda; preciso registra a extenso ida com CGI no apache para que funcione corretamente; sem maiores utilidades... Veja o arquivo default.ida.

Administrao de sistemas usando Python p.28

Logs do code red


[Thu March 07 10:04:50 2002] red code attack (inter-gw1.bfw-michaelshoven.de) [Fri March 08 02:30:43 2002] red code attack [Sat March 09 04:50:44 2002] red code attack (MTL-HSE-ppp202767.qc.sympatico.ca) [Mon March 11 19:28:27 2002] red code attack (12-238-129-99.client.attbi.com) [Mon March 11 21:48:09 2002] red code attack (www.multi-page.net) [Tue March 12 03:05:17 2002] red code attack (server.stricklandgate-house.org.uk) [Tue March 12 06:38:49 2002] red code attack [Tue March 12 07:56:30 2002] red code attack (213-145-184-9.dd.nextgentel.com) [Mon March 18 09:10:03 2002] red code attack [Mon March 18 13:50:55 2002] red code attack (adsl-63-197-79-111.dsl.snfc21.pacbell.net) from 195.82.69.206 from 61.161.156.17 from 65.94.232.21 from 12.238.129.99 from 209.12.200.2 from 195.171.4.130 from 218.13.3.48 from 213.145.184.9 from 210.72.161.107 from 63.197.79.111

Administrao de sistemas usando Python p.29

Boot advertisement
Usando em ambiente os as mquinas recebem IP via DHCP; evita a solicitao de registro de IP xo para algumas mquinas; na mquina cliente, que inicializa via DHCP, executado um shell script; no servidor, com o web habilitado, executado um CGI em Python para tratamento das informaes; a informao vericada com uso de MD5; se confere, enviada por mail. Nesse exemplo, o servidor roda em uma mquina FreeBSD, enquanto que o cliente, OpenBSD. Veja os arquivos system.cgi e bootadvertise.

Administrao de sistemas usando Python p.30

MRTG
Usado para vericar algumas funes da mquina: load average (carregamento) uptime utilizaes de disco servidor Quake

Administrao de sistemas usando Python p.31

ADSL
Utilizado para vericar o status do link ADSL com um modem Parks; feito para conexo business, mas pode ser modicado para home; funciona tal qual um telnet no modem, seguindo a seqncia para dar um reset na linha ADSL (para perda de sinal sem o re-trainning); atualmente no funciona muito, j que o problema de perda de sincronismo mnimo; mas ajuda a saber o estado da linha. Veja o arquivo adsl_check.py.
Administrao de sistemas usando Python p.32

Grco ADSL

Administrao de sistemas usando Python p.33

Automao de provedor
Criado durante uma consultoria a um provedor; para inserir automagicamente o cliente no servio de mail de sua empresa (virtualhost do sendmail); alm de registrar seu domnio (named); e criar seu site default na web (apache). Problemas com permisses: Python no funciona setuid! Para ativar setuid ou utiliza-se o sudo ou cria-se um programa em C com uma chamada system()/execv() e altera-se as permisses deste para setuid (chmod 4755). Veja os arquivos suporte.py e dominio.py
Administrao de sistemas usando Python p.34

Pyqt e Qt-designer

Uso do aplicativo pyuic para gerar o mdulo com o cdigo.


Administrao de sistemas usando Python p.35

wxPython
Biblioteca semelhante MFC, Microsoft Foundation Classes, mas GPL e multi-plataforma; existe para Python e C++, entre outras; no existe um RAD para desenvolvimento, como pyqt.

Administrao de sistemas usando Python p.36