390 likes | 469 Views
Programação Avançada Scripts para Linux. Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012. Introdução. Scripts permitem Executar sequências de comandos Desenvolver testes Monitorar dados Etc; Podem ser feitos em diversas linguagens
E N D
Programação AvançadaScripts para Linux Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012
Introdução • Scripts permitem • Executar sequências de comandos • Desenvolver testes • Monitorar dados • Etc; • Podem ser feitos em diversas linguagens • Shell, bash, awk, python • Python fornece uma linguagem simples para o desenvolvimento de scripts
Introdução • Módulos com métodos interessantes para scripts • Módulo sys • Módulo provê acesso a variáveis/funções usadas ou mantidas pelo interpretador • Módulo os • Módulo provê interfaces para funcionalidades do sistema operacional
Módulo sys • sys.argv • Variável do tipo lista contendo a lista de argumentos passados pela linha de comando para o script Python • argv[0] nome do script • Demais itens são entradas do script
Módulo sys • sys.path • Mostra o valor da variável de ambiente pythonpath • A pythonpath é utilizada para buscar os módulos que estão sendo incluídos no código
Exemplo de sys.path • Módulo estacionamento2 foi desenvolvido em sala • Salvo em C:\\natalia Python começa a buscar módulos aqui também Modificações só valem na execução do seu script
Módulo sys • sys.platform • Retorna o nome da plataforma em uso
Módulo sys • sys.stdin, sys.stdout e sys.stderr • Objetos do tipo file que correspondem a entrada, saída e erro padrões do interpretador • sys.__stdin__, sys.__stdout__ e sys.__stderr__ • Objetos contendo o valor original de stdin, stderr e stdout
Módulo os • os.name • Nome para identificação do sistema operacional • Melhor usar o sys.platform • os.environ • Mostra um dicionário com o conteúdo de todas as variáveis de ambiente
Módulo os • os.listdir(path) • Retorna uma lista contendo todas as entradas de um diretório especificado por path • Não inclui . e ..
Módulo os • os.chdir(path) • Muda o diretório corrente para path • os.getcwd() • Retorna a string representando o diretório corrente
Módulo os • os.chown(path, uid, gid) • Muda o dono de path, através da identificação do usuário uid e do respectivo grupo gid • Disponível apenas no Unix
Módulo os • os.chmod(path, mode) • Muda o modo de proteção (leitura, escrita e execução) do path. O mode deve ser colocado no modo numérico. • Disponível apenas no Unix
Módulo os • os.link(source, link_name) • Cria um hard link apontando para source com o nome link_name • Disponível apenas no Unix
Módulo os • os.mkdir(path[, mode]) • Cria um diretório com nome path e permissão mode (permissão opcional – padrão 0777) • Modo representado em octal • Número iniciado por zero • Gera uma exceção do tipo OSError se o diretório já existe
Módulo os • os.remove(path) • Remove o arquivo path • Se path for um diretório, gera exceção OSError • No Windows, se o arquivo estiver em uso, também gera uma exceção
Módulo os • os.rename(src, dst) • Renomeia o arquivo ou diretório src para o nome dst • os.rmdir(path) • Remove o diretório path • Só funciona se o diretório estiver vazio
Módulo os • os.fork() • Cria um processo filho • Exemplos: test_fork3.py a test_fork6.py
Módulo os • os.execv(path, args) • Executa o programa especificado em path • Substitui o processo atual • Args é uma lista ou uma tupla • O primeiro argumento deve ser sempre o nome do programa executado • Exemplos: test_fork7.py
Módulo os • os.kill(pid, sig) • Envia o sinal sig para o processo pid • os.nice(increment) • Incrementa increment na prioridade de um processo • Retorna o novo valor da nova prioridade • Disponível apenas no Unix
Módulo os • os.popen(comando) • Executa o comando, que deve ser representado como uma string • os.system(comando) • Executa o comando em um subshell
Módulo os • No Windows:
Módulo os Popen não retorna nada, apenas executa o comando • No Linux
Módulo os Execução do comando com o system acontece em subshell, mas aparece no interpretador • No Linux
Módulo os Mas, atenção! O system retorna zero e não o texto que aparece na tela • No Linux
Módulo os • os.wait() • Espera que processo filho seja finalizado • Retorna o pid do processo filho e a indicação de status de saída • Disponível apenas em Unix • os.waitpid(pid, options) • No Unix: • Espera que o processo filho com pid seja terminado • Retorna o pid do processo filho e a indicação de status de saída • No Windows: • Espera que o processo filho com pid seja terminado • Retorna uma tupla contendo pid, o status de saída do processo shiftado de 8 bits
Módulo os • os.curdir • Constante (string) contendo a indicação para diretório atual • No Windows e no POSIX, vale ‘.’ • os.pardir • Constante (string) contendo a indicação de diretório pai • No Windows e no POSIX vale ‘..’ • os.sep • Caractere usado pelo sistema operacional para separar componentes em um nome de diretório • Vale '/' no POXIS e '\\‘ para o Windows • Para parsear o nome do diretório use : • os.path.split() • Para juntar nomes formando um diretório, use: • os.path.join()
SSH • Ao fazer scripts, muitas vezes será importante se logar em diferentes máquinas • Uso do ssh • Conexão segura entre duas máquinas • Exige autenticação • Nome e senha • Certificados • Evita ter que colocar nome e senha a cada vez que se faz a comunicação • Gerar certificado no cliente e armazenar no servidor • Cliente é o nó que inicia a conexão
SSH • Exemplo de uso: • ssh user@hostname comand • ssh natalia@maquina.lab.uff.br ‘ls –lisa’ • Com o python: • os.system(‘ssh natalia@maquina.lab.uff \’ls -lisa > temp\’ ’)
SSH • Exemplo ...
SSH • Para fazer uma conexão ssh via python • http://www.no-ack.org/2010/11/python-bindings-for-libssh2.html
Exercícios • Faça um script que crie um diretório com 10 arquivos com nomes aleatórios • Faça um script que mude o nome de todos os arquivos de um diretório, colocando um texto escolhido pelo usuário na frente do nome do arquivo. • Ex: • Antes: fsdasdasd • Depois: texto-fsdasdasd
Exercícios • Faça um script que monitore os dados de sua placa de rede de 5 em 5 segundos e guarde em um arquivo especificado pelo usuário. O usuário deve especificar também o tempo total de teste. • Faça um script que leia um arquivo de configuração e chame um programa de acordo com as entradas lidas. • Exemplo: • Arquivo de configuração: • Nome=natalia,root • Dispositivo=maquina.lab.uff.br • Comando = ls -lisa • Saída=temp • Comando gerado e executado pelo seu script • ssh natalia@maquina.lab.uff.br ‘ls -lisa’ >> temp • ssh root@maquina.lab.uff.br ‘ls –lisa’ >> temp