1. Administração de sistemas usando
Python
Hélio 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 Nãoestá funcionando no momento.
b Também está fora do ar.
Administração de sistemas usando Python – p.1
2. Introdução
Esta é uma apresentação introdutória da linguagem de programação Python,
portanto não espere ver exemplos avançados de seu uso aqui.
O objetivo desta apresentação é mostrar a linguagem Python, sua sintaxe, seu uso
e alguns exemplos práticos para administração de sistemas.
Os exemplos usados são programas utilizados em vários ambientes reais,
principalmente na função de consultor onde o objetivo era fazer as tarefas o
melhor possível com o menor tempo possível (tempo é dinheiro).
Os programas apresentados são testados e geralmente utilizados em várias plata-
formas (Debian, FreeBSD, OpenBSD, Solaris e até Windows...).
Administração de sistemas usando Python – p.2
3. História do Python
Python foi criado no início 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 Res-
ton, Virginia, onde ele lançou várias versões do programa.
Administração de sistemas usando Python – p.3
4. História 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 (então Digital
Creations, veja http://www.zope.com). Em 2001, a Fundação do Programa
Python (PSF, veja http://www.python.org/psf) foi criada, uma
organização sem fins lucrativos criada especificamente para manter a propriedade
intelectual relacionada à Python. A Zope Corporation é um membro patrocinador
do PSF.
Todas as versões de Python são de código aberto (veja
http://www.opensource.org/ para a definição de código aberto).
Historicamente a maioria, mas não todas, das versões de Python têm também sido
compatíveis com a GPL.
Administração de sistemas usando Python – p.4
5. Por quê é chamado Python?
" "Além de ser um cientista da computação, eu também sou fã do
"Monty Python’s Flying Circus"(uma série cômica dos anos setentas
na BBC, no caso - incomum - de você não 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 série naquela época... Então eu decidi chamar minha linguagem de
Python." "
Guido van Rossun
Administração de sistemas usando Python – p.5
6. Onde Python é utilizado
Mailman - gerenciador de listas de discussão
Zope - um ambiente para Webservices (servidor de
conteúdo)
Sketch - programa para desenho vetorial
Pydf - programa “df”, para visualização de
quantidade de uso de partições do sistema, com
saída colorida
Ipcheck - programa cliente para uso do “dyndns”,
registro dinâmico de DNS
Pysol - jogo de cartas “paciência”
Administração de sistemas usando Python – p.6
7. Descrição
Python, em poucas linhas, é:
Linguagem de scripts
Orientada à objetos
Com a possibilidade de geração de byte-code
Multiplataforma - máquina virtual
Com característica de laços através de identação
Sem tipos!!!
Rápida prototipagem
Fácil integração com C e Java
Administração de sistemas usando Python – p.7
8. Comparações com outras linguagens
C Python é orientada à objetos e não possui tipos. C é uma linguagem
compilada, enquanto que Python, interpretada.
C++ Linguagem compilada. Python é interpretada. Geralmente não é portável
(bibliotecas dependentes).
Java Linguagem com tipos.
Perl Linguagem pouco estruturada com tipos básicos definidos por inicialização
de váriáveis ($x e @y). Não pode ser usada interativamente.
PHP Mais veloz que Python para criação de páginas web com conteúdo
dinâmico (mesmo utilizando mod_python). Também possui tipos definidos
tal qual a linguagem Perl.
Qual a melhor?
Resposta: e deveria existir uma?
Administração de sistemas usando Python – p.8
9. Documentação e Bibliografia
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 - documentação que
acompanha a instalação 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.
Administração de sistemas usando Python – p.9
10. Estruturas de dados
números num = 5
strings nome = “Debian”
listas sistemas = [“Debian”, “OpenBSD”, “FreeBSD”]
tuples sequencia = ( “Debian”, [ 1, 2 , 3 ], “nome”)
dicionários agenda = {“helio”: “999-333”, “macan”:
“1234”}
Exemplo:
nome[0]: “D”
nome[-1]: “n”
nome[:-2]: “Debi”
Obs: o símbolo “#” é utilizado para marcar comentário.
Administração de sistemas usando Python – p.10
11. Operadores aritméticos
adição
subtração
£ ¢
divisão
multiplicação
¤
exponenciação
¤
¤
AND lógico and
OR lógico or
negação not
Administração de sistemas usando Python – p.11
12. Controles de fluxo: if-elif-else
if (condição):
faça
elif (condição):
faça
else:
faça
ou simplesmente
if (condição): faça
Notas: Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.12
13. Controles de fluxo: for
variavel = [ “Debian”, “GNU”, “Linux”]
for nome in variavel:
print nome
Notas: Sintaxe semelhante ao laço “for” de shell script.
Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.13
14. Controles de fluxo: while
variavel = 10
while ( variavel ):
print “Debian rulez!”
variavel = variavel - 1
Notas: Final do laço determinado pela indentação.
Administração de sistemas usando Python – p.14
15. continue, break e pass
continue Continua o fluxo do programa.
break Finaliza o fluxo.
pass Executa sem realizar processamento.
Administração de sistemas usando Python – p.15
16. Funções
Declarada com “def”:
def minha_funcao(variavel):
print variavel
Exemplo de uso:
minha_funcao(“I Oficina Debian Paulista”)
Administração de sistemas usando Python – p.16
17. Objetos, métodos e classes
class Apache(self): # classe
def _init_(self): # método
self.conf = “/etc/apache/httpd.conf” # atributo
def comando(self,tipo):
from os import system
system(“apachectl “ + tipo)
server = Apache()
server.comando(“restart”)
Administração de sistemas usando Python – p.17
18. Importando módulos
Duas formas:
import os
os.system(“uptime”)
ou
from os import system
system(“uptime”)
O segundo formato é mais rápido, pois todos os objetos
e métodos não são importados. O arquivo com módulo
precisar ter uma das extensões: “ py” ou “ pyc” ou “ pyo”.
¥
¥
¥
Administração de sistemas usando Python – p.18
19. py, pyc e pyo
py extensão geralmente usada em scripts Python
pyc byte code. Pode ser usado para não redistribuir os
fontes do programa e funciona em todas as
plataformas, desde que se tenha o máquina virtual, o
interpretador Python. É gerado após a primeira
execução do programa com extensão py.
pyo código objeto. Biblioteca de alguns módulos de
Python. Dependente de sistema operacional.
Administração de sistemas usando Python – p.19
20. Controle de exceções
try:
<código>
except KeyboardInterrupt:
<código>
except:
pass
Administração de sistemas usando Python – p.20
21. 30 minutos
Espero estar chegando aqui após 30 minutos, onde
vimos:
A origem do Python
Onde é usado Python
O que é Python
Uma certa idéia de como usar
Dúvidas???
Administração de sistemas usando Python – p.21
24. Autenticação
Módulo criado para iniciar autenticação de
programas (nunca saiu do estágio inicial...);
é um bom exemplo do uso de classes, simples de
entender.
Veja o arquivo autenticacao.py
Administração de sistemas usando Python – p.24
25. Laserfilter
Programa criado para corrigir o problema do efeito
“escada” nas impressões;
utilizado em uma impressora laser nesse exemplo;
o objetivo do filtro é substituir no final de cada linha
o “ n” por “ˆM n”.
Veja os arquivos laserfilter e printcap.
Administração de sistemas usando Python – p.25
26. Backup
Programa para realizar backups;
poderia ter sido feito em shell script;
mas está em Python para mostrar a diferença.
Veja o arquivo backup.py.
Administração de sistemas usando Python – p.26
27. Usando um execv()
Programa para animar o ambiente;
seleciona aleatoriamente um arquivo para tocar;
usada uma chamada execv() para executar ao invés
de system().
Veja o arquivo mpy3layer.py.
Administração de sistemas usando Python – p.27
28. default.ida (code red e nimda)
Programa para registrar as tentativas de code red e
nimda;
é preciso registra a extensão “ ida” com CGI no
¥
apache para que funcione corretamente;
sem maiores utilidades...
Veja o arquivo default.ida.
Administração de sistemas usando Python – p.28
29. Logs do code red
[Thu March 07 10:04:50 2002] red code attack from 195.82.69.206
(inter-gw1.bfw-michaelshoven.de)
[Fri March 08 02:30:43 2002] red code attack from 61.161.156.17
[Sat March 09 04:50:44 2002] red code attack from 65.94.232.21
(MTL-HSE-ppp202767.qc.sympatico.ca)
[Mon March 11 19:28:27 2002] red code attack from 12.238.129.99
(12-238-129-99.client.attbi.com)
[Mon March 11 21:48:09 2002] red code attack from 209.12.200.2
(www.multi-page.net)
[Tue March 12 03:05:17 2002] red code attack from 195.171.4.130
(server.stricklandgate-house.org.uk)
[Tue March 12 06:38:49 2002] red code attack from 218.13.3.48
[Tue March 12 07:56:30 2002] red code attack from 213.145.184.9
(213-145-184-9.dd.nextgentel.com)
[Mon March 18 09:10:03 2002] red code attack from 210.72.161.107
[Mon March 18 13:50:55 2002] red code attack from 63.197.79.111
(adsl-63-197-79-111.dsl.snfc21.pacbell.net)
Administração de sistemas usando Python – p.29
30. Boot advertisement
Usando em ambiente os as máquinas recebem IP via DHCP;
evita a solicitação de registro de IP fixo para algumas máquinas;
na máquina cliente, que inicializa via DHCP, é executado um shell script;
no servidor, com o web habilitado, é executado um CGI em Python para
tratamento das informações;
a informação é verificada com uso de MD5;
se confere, é enviada por mail.
Nesse exemplo, o servidor roda em uma máquina FreeBSD, enquanto que o
cliente, OpenBSD.
Veja os arquivos system.cgi e bootadvertise.
Administração de sistemas usando Python – p.30
31. MRTG
Usado para verificar algumas funções da máquina:
load average (carregamento)
uptime
utilizações de disco
servidor Quake
Administração de sistemas usando Python – p.31
32. ADSL
Utilizado para verificar o status do link ADSL com
um modem “Parks”;
feito para conexão “business”, mas pode ser
modificado para “home”;
funciona tal qual um telnet no modem, seguindo a
seqüência para dar um “reset” na linha ADSL (para
perda de sinal sem o “re-trainning”);
atualmente não funciona muito, já que o problema
de perda de sincronismo é mínimo;
mas ajuda a saber o estado da linha.
Veja o arquivo adsl_check.py.
Administração de sistemas usando Python – p.32
33. Gráfico ADSL
Administração de sistemas usando Python – p.33
34. Automação de provedor
Criado durante uma consultoria a um provedor;
para inserir automagicamente o cliente no serviço de
mail de sua empresa (virtualhost do sendmail);
além de registrar seu domínio (named);
e criar seu site default na web (apache).
Problemas com permissões: Python não 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 permissões deste para setuid (chmod
4755).
Veja os arquivos suporte.py e dominio.py Administração de sistemas usando Python – p.34
35. Pyqt e Qt-designer
Uso do aplicativo
“pyuic” para gerar o módulo com o código.
Administração de sistemas usando Python – p.35
36. wxPython
Biblioteca semelhante à MFC, Microsoft Foundation
Classes, mas é GPL e multi-plataforma;
existe para Python e C++, entre outras;
não existe um RAD para desenvolvimento, como
pyqt.
Administração de sistemas usando Python – p.36