Curso de extensão em Administração de redes com...

45
Curso de extensão em Administração de redes com GNU/Linux Italo Valcy - [email protected] Gestores da Rede Acadêmica de Computação Departamento de Ciência da Computação Universidade Federal da Bahia Italo Valcy Administração de redes com GNU/Linux

Transcript of Curso de extensão em Administração de redes com...

Curso de extensão em Administração de redes com GNU/Linux

Italo Valcy - [email protected]

Gestores da Rede Acadêmica de ComputaçãoDepartamento de Ciência da Computação

Universidade Federal da Bahia

Italo Valcy Administração de redes com GNU/Linux

Todo o material aqui disponível pode, posteriormente, ser utilizado sobre os termos da:

Italo Valcy Administração de redes com GNU/Linux

Creative Commons License: Atribuição - Uso não comercial - Permanência da Licença

http://creativecommons.org/licenses/by-nc-sa/3.0/

Italo Valcy Administração de redes com GNU/Linux

Assuntos abordados

Programação em Shell Script

Expressões Regulares

Manipulação de stream

Programação em Shell Script(continuação)

Italo Valcy Administração de redes com GNU/Linux

Programação em Shell Script

Já sabemos como escrever scripts (cabeçalhos, estrutura básica de um script)

Utilização de variáveis

Parâmetros

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

O Mundo GNU/Linux

Como executar operações matemáticas (1+1, por exemplo) em bash?

Basta utilizar o bloco do tipo “$((...))” que retorna o resultado de uma operação aritmética.

Soma: $((1+1)) ou X=$((1+1))

Resto: $((7 % 4))

Exponenciação: $((4**2))

Operações aritméticas

Italo Valcy Administração de redes com GNU/Linux

Comando IF:

if <condicao>

then <comandos>

else <comandos>

fi

Condição: resultado de uma comparação aritmética ou o resultado de um comando (baseado no código de retorno).

Comandos: grupo de ações a serem executadas caso a condição seja verdadeira.

Execução condicional

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Exemplos:

if ls >/dev/null 2>&1; then echo “ok”; fi

if ls /naoexiste 2>/dev/null

then echo “ok”

else echo “problema”; fi

if ((5 > 3))

then

echo “5 eh maior que 3”

fi

Execução condicional

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Quando usar:

((expressao))

[ expressao ]

[[ expressao ]]

Execução condicional

Expressão Símbolo ExemploO arquivo existe -eDiretório existe -dArquivo executável -x

-n [ -n $VARIAVEL ]-z [ -z $VARIAVEL ]

Igualdade de strings == [ $VAR1 == $VAR2 ]

[ -e /etc/passwd ][ -d /root ]

[ -x /bin/echo ]String não nulaString nula

É maior que (GreaterThan) -gt [ 5 -gt 4 ]

É menor igual (LessEqual) -le [ 4 -lt 5 ]

É maior igual (GreaterEqual) -ge [ 1 -ge 1]

É igual (EQual) -eq [ 3 -eq 4 ]É diferente (NotEqual) -ne [ 1 -ne 1 ]

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Escreva um comando que dê boa tarde, bom dia ou boa noite de acordo à saída do comando date.

Dica: date +FORMAT exibe a data usando FORMAT como padrão de saída. Mais informações man date.

Tempo estimado para realização da atividade 5min.

Execução condicional – Exercício 1

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Comando for:for ((expr1; expr2; expr3))do<comandos>done

Expr1: Executa no início do comandoExpr2: Avaliada a cada iteração do comandoExpr3: Executa no final de cada iteração

for ((x=0; x <= 10; x++)); doecho $x

done

Controle de fluxo

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Existem outras formas para o comando for:Usando listas:

for <variavel> in <lista>

do

<comandos>

done

variavel: iterador para cada elemento da lista

lista: saída de comando ou variável com lista de elementos

comando: comandos que serão executados.

Controle de fluxo

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Comando while: executa os comandos enquanto a expressão for verdadeira:

while <expressao>; do

<comandos>

done

Comando until: executa os comandos até a expressão se tornar verdadeira:

until <expressao>; do

<comandos>

done

Controle de fluxo

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Comando while:x=1

while ((x < 10)); do

echo $x

x=$((x+1))

done

Qual a função do comando acima?

Qual a função dos duplos parenteses?

Como reescrever o comando com until?

Controle de fluxo

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Escreva um script que conte o número de palavras de um arquivo-texto. Utilize o comando for para isso.

* Esta atividade permite que o aluno treine o controle de fluxo e operações com listas.

Controle de fluxo – Exercício 2

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Como saber se um script executou corretamente?Zero: terminou com sucesso.Não-zero: terminou sem sucesso.

Em geral o código de retorno para “sem sucesso” é 1.$ cd /$ echo $?0$ cd /inexistentebash: cd: /inexistente: arquivo ou diretório não

encontrado$ echo $?1

Status de execução

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

O comando read <variavel> é utilizado para ler um valor da entrada padrão e armazená-lo em variavel. Escreva um script que solicite que o usuário digite uma string qualquer. O script deve continuar solicitando a entrada até que o usuário digite PARE.

Dica: while true

Programação shell script – Exercício 3

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Crie um script para efetuar backup de arquivos e diretórios. O script deve receber como parâmetros um ou mais arquivos e diretórios que serão copiados para /tmp/<datadehoje>, onde <datadehoje> deverá ser no formato AnoMesDia-HoraMinuto. O script deverá emitir uma mensagem de erro caso a cópia não seja efetuada com sucesso.

Programação shell script – Exercício 4

Programação em Shell Script

Italo Valcy Administração de redes com GNU/Linux

Home work: Faça scripts para resolver os problemas propostos no SVN do curso [1]. A solução deve estar disponível no SVN até 31/03/2009. Dúvidas podem ser tiradas pela lista de dicussão.Postem o trabalho no SVN do curso [1], dentro de um diretório no seguinte padrão:

seu-nome/exercicios-shell

1 - https://intranet.dcc.ufba.br/svn/curso-graco/2009.1/exercicios-shell.txt

Programação shell script – Exercício 5

Programação em Shell Script

Dúvidas?

Programação em Shell Script

Expressões regulares

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Poupam tempo na busca por informações ou em tarefas complexas.Uma expressão regular (Regex), é uma construção que utiliza pequenas ferramentas, feita para obter uma determinada sequência de caracteres de um texto.Vários programas e linguagens de programação tem suporte à Regex, dentre eles o grep, egrep, find, sed, awk, lex, perl, e também alguns editores como o vim e emacs.

Por quê estudar expressões regulares?

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Curingas são utilizados para expressar conjuntos de arquivos na linha de comando:

*.txt: todos os arquivos que terminam com “.txt”

arquivo-??.txt: dois caracteres quaisquer após o hífen.

arquivo.{txt,html}: terminação com txt ou html.

Não confunda metacaracteres com curingas

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

grep, egrep, fgrep – imprimem linhas que casão com um padrão.

Grep [opcoes] PADRAO [arquivo]

grep 'root' /etc/passwdImprime as linhas do arquivo /etc/passwd que contêm a palavra root.

grep -v 'root' /etc/passwdImprime as linhas de /etc/passwd que não contêm a palavra “root”.

grep -lr 'wireless' /usr/src/linux/doc/* Imprime os arquivos do diretório /usr/src/linux/doc e subdiretórios, que contém a palavra wireless.

O comando grep

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Metacaracteres são caracteres com funções específicas, que informam padrões e posições impossíveis de serem especificadas com caracteres normais.Exemplos:

todas as linhas iniciadas pelos caracteres “a”,”b”,”c” e “d”, e que terminam com “1”

todas as linhas que possuam três números em seqüência

todos as linhas que possuem um padrão de data (dd/mm/aaaa)

Metacaracteres

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

O circunflexo ^: Simboliza o início de uma linha.grep '^root' /etc/passwd

O cifrão $: representa o fim de uma linha:

grep 'bash$' /etc/passwd

Uma combinação útil seria:

grep '^$' arquivo # busca por linhas em branco

O metacaractere ^ e $

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Os [ ] permitem limitar um conjunto de caracteres a ocupar uma dada posição no texto.Exemplos:

$ grep '^[aeiou]' /etc/groupfiltra todos os grupos com nome iniciado pelas vogais

$ grep '^[bcdfghjklmnpqrstvxywz]' /etc/passwdfiltra todas os usuários cujo o nome inicia por uma consoante

$ grep '[0123456789][0123456789][0123456789]' /etc/groupfiltra todas as linhas que possuam três números em seqüência

O metacaractere de lista [ ]

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Para lista seqüênciais como 0123456789, abcd...z é possível utilizar o meta caracter -, para simbolizar a seqüência.

Exemplos:$ grep '^[a-z]' /etc/passwd

filtra todas os usuários cujo o nome inicia por uma letra$ grep '[0-9][0-9][0-9]' /etc/group

filtra todas as linhas que possuam três números em seqüência

O metacaractere hífen (-)

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

As { } serve para indicar a quantidade de repetições de um caracter ou metacaracter

Exemplos:$ grep '^.\{41\}$' /etc/passwd

filtra todas as linhas que possuem 41 caracteres. Observe que as barras reversas, “\”, são necessários para escapar as chaves no grep. É sugerido utilizar o egrep no lugar do grep.

$ egrep '^.{41}$' /etc/passwdMesmo comando acima, porém mais simples

$ egrep '^.{20,40}$' /etc/passwdfiltra as linhas com 20 a 40 caracteres

O metacaractere chaves { }

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Mais exemplos:$ egrep '^.{20,}' /etc/passwd

filtra as linhas com 20 ou mais caracteres.

$ egrep '^.{,27}$' /etc/passwdfiltra as linhas com menos de 27 caracteres

$ egrep '^.{20,40}$' /etc/passwdfiltra as linhas com 20 a 40 caracteresAlgumas abreviações de repetição:

? == {0,1} - pode aparecer uma vez ou não

* == {0,} - pode aparecer qualquer quantidade, inclusive nenhuma

+ == {1,} - aparecer uma vez ou mais

O metacaractere chaves { }

Italo Valcy Administração de redes com GNU/Linux

Expressões regulares

Metacaracter ou (|): As listas, [ ], trabalham apenas com caracteres, mas em outras ocasiões é necessário procurar por palavras alternativas. Para isto de usa o ou lógico |.

Filtra apenas as linhas iniciadas com root, adm ou lp

$ egrep '^(root|adm|lp):' /etc/passwd

Metacaracter de negação de lista [^]: Para se negar uma lista, basta colocar o circunflexo a frente dos caracteres negados.

filtra as linhas iniciadas com consoantes

$ egrep '^[^aeiou]' /etc/passwd

Outros metacaracteres

Dúvidas?

Expressões regulares

Manipulação de stream

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Utilizado para exibir na saída padrão colunas colunas ou campos de um ou mais arquivos. O arquivo original não é modificado.Sintaxe: cut opcoes [arquivo]Algumas opções utilizadas:

-b lista-bytes: Mostra apenas os bytes nas posições listadas em lista-bytes.

-f lista-campos: Mostra os campos presentes em lista-campos.

-d delimitador: Define o delimitador de campos. Deve ser usada junto à -f.

O comando cut

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Queremos saber quais terminais virtuais estão em uso no sistema:

$ who | cut -c10-15tty7 pts/0 pts/1 pts/2 pts/3

Queremos quais usuários tem shell == /bin/bash no sistema:

$ grep bash /etc/passwd | cut -f1 -d:rootuser1

O comando cut - Exemplos

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

A operação básica do awk é pesquisar em um conjunto de linhas de entrada aquelas que satisfazem a um padrão e executar determinada ação para aquela(s) linha(s).A sintaxe básica:

awk [opcoes] 'padrao-acao' [arquivo ...]

O awk também trabalha com campos. Geralmente utilizamos esses campos nas cláusulas do padrão. Exemplo:

awk '$1 == “Paula” {print $2, $3}'

Tanto a ação quanto o padrão podem ser omitidos, sendo que:

'$1 == “nome”', imprime as linhas que casam com padrão

'{print $2, $3}', imprime o segundo e terceiro campo de todas as linhas.

O comando awk

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Opções úteis:-F value: configura o separador dos campos

-v var=value: seta variável var para ser usada com valor value.

Operadores relacionais usados em padrão

==, >, >=, <, <=

Operadores lógicos

&&, ||, !

O comando awk

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Utilizado para fazer edição de arquivos. Sua sintaxe geral:sed regex [arquivo]

Onde, regex segue em partes as regras já vistas, mas obedecem o seguinte formato geral:

[<addr1>[,<addr2>]] <funcao> <argumentos>

Nesse caso, addr1 e addr2 definem a abrangência do comando no arquivo. Se ambos forem omitidos, todas as linhas serão processadas. Se somente um for especificado, sobre a linha referida.

O comando sed

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Referenciando a linha pelo seu número:$ sed '4 ...' arquivo

$ sed '4,9 ...' arquivo

Procurando por uma cadeia no texto. Deve-se colocar tal cadeia entre barras.

$ sed '/cadeia/ ...' arquivo

$ sed '/cadeia1/,/cadeia2/ ...' arquivo

O comando sed - Endereçamento

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Função para substituição de cadeias (s).$ sed 's/{valor velho}/{novo valor}/'

Exemplo:

$ echo 'Frase qualquer' | sed 's/qualquer/especial/'

Frase especial

Podemos fazer múltiplas modificações usando a opção -e ou com “;”:

$ echo 'Frase qualquer' | sed -e 's/qualquer/especial/' -e \ 's/Frase/Palavra/'

Palavra qualquer$ echo 'Frase qualquer' | sed -e 's/qualquer/especial; \

s/qualquer/especial/'Palavra qualquer

O comando sed – Substituição

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Para realizar múltiplas substituições devemos adicionar um “g” ao fim do comando. Exemplo:

$ cat arquivoabcUNIXdefgUNIXhijlmUNIXnoUNIXpqrUNIX$ sed 's/UNIX/LINUX/' arquivoabcLINUXdefgUNIXhijlmLINUXnoUNIXpqrUNIX$ sed 's/UNIX/LINUX/g' arquivoabcLINUXdefgLINUXhijlmLINUXnoLINUXpqrLINUX

O comando sed – Substituições globais

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Outra função bastante usada é a remoção de linhas. Vejam que remoção de palavras pode ser feito pelo comando se substituição. A sintaxe do comando é:

'{string de busca} d'

Para remover as linhas que contenham two

sed '/two/ d' numbers

Para remover as três primeiras linhas:

sed '1,3 d' numbers

O comando sed – Deletando linhas

$ cat numersonetwoonethreetwoone

Italo Valcy Administração de redes com GNU/Linux

Manipulação de stream

Adicionar texto a uma posição específica;

Inserir texto em um trecho específico;

Ler e escrever ao mesmo tempo;

Alterar linhas;

Inverter lógica dos comandos;

etc.

O comando sed – Outras funções

Dúvidas?

Manipulação de stream

Italo Valcy Administração de redes com GNU/Linux

Referências

http://aurelio.net/shell/canivete.html

http://aurelio.net/curso/material/apostila-expressoes-intro.pdf

http://rra.etc.br/linux/apresentacoes/Incrementando_o_Shell_com_ER.pdf

http://www.oracle.com/technology/pub/articles/dulaney_sed.html