serviços de redes 1 (24hrs) Instalação e · desmontagem de dispositivos; Comandos para...

Post on 22-Nov-2018

220 views 1 download

Transcript of serviços de redes 1 (24hrs) Instalação e · desmontagem de dispositivos; Comandos para...

II Curso de Especialização em Redes de

Computadores – Configuração e

Gerenciamento de Servidores e

Equipamentos de Redes

360 horas

Instalação e configuração de serviços de redes 1 (24hrs)

Prof. Jefer Benedett Dörr22 e 29/novembro e 06/dezembro/2014

Prof. Jefer Benedett Dörr

● Coordenador do curso de Licenciatura em Computação - UFPR Setor Palotina

● Mestre em Informática - UFPR● Especialista em Software Livre com ênfase

em Redes - UNIPAN● Bacharel em Informática - UNIOESTE

jefer@ufpr.brwww.profjefer.wordpress.com

Instalação e configuração de serviços de redes 1

Introdução ao uso de virtualização; Instalação de sistema operacional de rede (GNU/Linux); Comandos básicos; Criação de usuários e grupos; Editor de texto; Instalação e gerenciamento de pacotes (instalação, remoção, repositórios); Gerenciamento de partições e volumes lógicos (LVM); Compactação e descompactação de arquivos; Montagem e desmontagem de dispositivos; Comandos para gerenciamento de redes, contas, arquivos, processos e permissões; Agendamento de Tarefas; Shell Script: conceitos básicos, estrutura, variáveis e manipulação de strings, estruturas condicionais, estruturas de repetição, funções, expressões e uso de parâmetros, redirecionamento de entrada e saída, desenvolvimento de programas de instalação e desinstalação.

Etapas: nos dias 21/11 (4 horas) e 22/11 (8 horas); e dias 28 (4 horas) e 29/11 (8 horas)

1. Introdução2. Instalação3. Virtualização4. Comandos básicos5. Administração do Sistema6. Shell Script

Etapa 5

Administração do Sistema

1. Introdução2. Instalação3. Virtualização4. Comandos básicos5. Administração do Sistema6. Shell Script

https://www.youtube.com/watch?v=udhd9fmOdCs

Editores de texto

mcedit

nano

pico

vi

vim

emacs

Criação e administração de usuários

useradd: apenas cria o usuário;

adduser: cria usuário automatizado;

passwd: altera a senha;

usermod: modifica uma conta;

userdel: remove usuário e arquivos;

deluser: remove apenas o usuário;

Criação e Administração de grupos

groupadd: adiciona grupo ao sistema;

gpasswd: grava senha para o grupo;

groupdel: remove o grupo do sistema;

chage: configura expiração da conta;chage -E 2016-12-25 jefer

Gerenciamento de Permissões

drwx------ ... 2 jefer ............. 512 Jan ... 29 23:30 .. Arquivos/-rw-rw-r-- ... 1 jefer ....... 280232 Dec .. 16 22:41... notas.txt

r => significa permissão de leitura (read); w => significa permissão de gravação (write); x => significa permissão de execução (execution); - => significa permissão desabilitada.

Permissão Binário Decimal

--- 000 0--x 001 1-w- 010 2-wx 011 3r-- 100 4r-x 101 5rw- 110 6rwx 111 7

A ordem em que as permissões devem aparecer é rwx.

Sendo assim, vamos entender a string do nosso exemplo dividindo-a em 4 partes:

D r w x - - - - - -

- é um diretório (d);- o proprietário pode alterá-lo, gravá-lo e executá-lo (rwx);- o grupo não pode pode alterá-lo, gravá-lo, nem executá-lo (- - -);- os demais usuários não podem alterá-lo, gravá-lo, nem executá-lo (- - -).

chmod

chmod:

$ chmod 755 leiame.txt

$ chmod u=rwx, go=rx leiame.txt

$ chmod +x shell.sh

chown

Chown altera dono e grupo

$ chown jefer.posutfpr leiame.txt

$ chowm .posutfpr leiame.txt

$ chown -R jefer /home/jefer

chgrp

chgrp altera o grupo;

$ chgrp -R users /home

Instalação e gerenciamento de pacotes

apt

O APT busca em /etc/apt/sources.list por sua lista de origens (sources)

http://www.debian.org/doc/manuals/apt-howto/index.pt-br.html

Atualizando seu cache de pacotes local

Toda vez que você quiser instalar ou atualizar um aplicativo, você primeiramente, deveráatualizar seu cachê de pacotes. Isso assegura que você tenha as últimas informaçõessobre o aplicativo que você está instalando.prompt$ apt-get update

Vendo os pacotes disponíveis

O utilitário apt-cache permite a você buscar no cachê de pacotes local por pacotes quecontém certos textos.prompt$ apt-cache search apache

Este comando retornou 119 pacotes na minha máquina. Em vez de ler todas as entradas, pode-se filtrar os resultados usando o comando grep

$ apt-cache search apache | grep "^apache"

Ver informações de um pacote prompt$ apt-cache show nomedopacote

Instalar um pacote$ apt-get install nomedopacote

Removendo um pacote$ apt-get remove nomedopacote

Mantendo seu sistema atualizado$ apt-get update$ apt-get upgrade

dpdddDD O dpkg complementa o apt-get, permitindo instalar pacotes .

deb baixados manualmente.

Digamos que você tenha baixado, por exemplo, o arquivo "skype_1.2.0.18-1_i386.deb", o pacote com o Skype, disponível no http://skype.com.

Para instalá-lo, você usaria o comando:# dpkg -i skype_1.2.0.18-1_i386.deb

DPKG

Gerenciamento de partições

/dev/hdX ou /dev/sdX

fdisk: criar, listar, alterar e apagar partições; fdisk /dev/sda

mkfs: formata as partições; mkfs -t vfat -I /dev/sdb

mkswap: prepara a partição para trabalhar como swap;

df: capacidade utilizada do disco;

du: utilização do disco;

fsck: checa e corrige erros;

/etc/fstab

Volumes lógicos (LVM)

SWAP

cat /proc/swaps

free -ht s1

cat /proc/sys/vm/drop_caches

Limpar: sysctl -w vm.drop_caches=1

Montagem e desmontagem de dispositivos

mount [opções] [dispositivo] [ponto_de_montagem]

● -a : monta todos os sistemas de arquivos especificados no arquivo

/etc/fstab.

● ro - monta somente como leitura;

O arquivo /etc/mtab possui a lista de todos os sistemas de arquivos

atualmente montados no Linux.

O comando mount sem parâmetros faz o sistema listar o conteúdo do

arquivo /etc/mtab.

● umount - desmonta sistemas de arquivos.

Compactação e descompactação de arquivos

tar

$ tar -cvf <arquivo_final> <origem>

-c: create-v: verbosa-f: será definido nome do arquivo final<origem>: arquivo ou diretório que será compactado

Exemplos:

$ tar -cvf teste.tar *

tar

$ tar -cvf /tmp/gifs.tar /var/www/htnl/*.tar

Descompactar: (-x descompacta o arquivo f)

$ tar -xvf arquivo.tar

Outras opções: (gzip/gunzip, tar+gzip, tar+bzip)

Comandos para gerenciamento de redes

$ ping

$ ifconfig : ifconfig eth0 down : ifconfig eth0 10.0.0.1 netmask 255.0.0.0

$ ifup / ifdown : ativa ou desativa a interface de rede definada em /etc/network

$ route: route add default gw 10.0.0.100 : route del default gw 10.0.0.100

$ dhclient eth0: solicitar dados de rede

$ mii-tool: negociação de link de rede

$ ethtool eth0

$ linx/links/elinks/links2 : navegadores

$ wget: download de arquivos

$ netstat: -tunap

$nmap

$ whois: dados sobre domínios

$ geoiplookup: localização geográfica do ip

$ iptraf: tráfego de rede

$ ethstatus -i eth0

$ ipcalc 192.168.1.0/255.255.255.0

$ dig www.utfpr.br.edu (dnsutils)

$ tcpdump: analisar de tráfego: tcpdump -nAi eth0 udp

$ hostname

Gerenciamento de Contas

susuxwwhoami

adduseruseradduserdelpasswd

Gerenciamento de Arquivos/Diretórios

cattailheadnanomceditmd5sumddwhichdetoxdfdudurep

mkdirrmdircdpwdlsstatrmwipecpmvfind locatechmod

chown lndiffcmptouchfiletree

Gerenciamento de Processos

Memóriafreememstatpmap pidtophtopiotopstress

Processospskillkillalljobs -lbgfgtimenohupstrace (strace -c ls /home)

renice renice +19 1000 -u jeferl

nice nice -n -5 ntpd

ionicefuser .

lsof -u user

Agendamento de Tarefas

cron

$ crontab -l

$ crontab -r

$ crontab -e

sintaxe: minuto hora dia_do_mês mês dia_da_semana /path/comando

15 23 * * * /sbin/reboot

0 0,12 * * 1-3 /sbin/reboot

*/10 * * * * /sbin/reboot

a=`df -h | grep sda6 | cut -d"%" -f1 | tr -s " " | cut -d " " -f5`

if [$a -gt 80] then echo " hd com $a" fi

Diretórios de agendamento

/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly

Etapa 6

Shell Script

1. Introdução2. Instalação3. Virtualização4. Comandos básicos5. Administração do Sistema6. Shell Script

jefer@acer:~$ cor=azuljefer@acer:~$ echo corCorjefer@acer:~$ echo $corazul

Iniciando#!/bin/bashecho 'Nossa!Estou vivo!' Tornemos então o arquivo executável:

chmod +x arquivo.sh

Ou chmod 755 arquivo.sh

Para executar: ./arquivo.sh

bash

Se você der o comando "ps", vai ver que um dos programas rodando é o seu shell:

jefer@acer:~$ psPID TTY TIME CMD164 tty2 00:00:00 bash213 tty2 00:00:00 psjefer@acer:~$

Ou seja, o shell utilizado nesse console é o bash, que está rodando com PID 164.

Onde tem shell?

Quer exemplos?

file /usr/bin/* | grep shell

Shell

É muito perigoso estudar shell usando o superusuário, você pode danificar o sistema com um comando errado.

Se você não tem certeza qual o seu usuário, use o comando "whoami" para saber

Formato de Arquivos

A primeira linha de todo shell script deve começar com algo do tipo: #!/bin/bash , a qual indica com qual shell deverá ser executado o script.

Bourne Shell (sh)

Korn Shell (ksh)

Boune Again Shell (bash) *

C Shell (csh)

Variáveis de Ambiente

Algumas variáveis já são predefinidas no shell, como o PATH, que armazena o caminho dos programas. Por exemplo, a minha variável PATH contém:jefer@acer:~$ echo $PATH

/usr/local/bin:/usr/bin: /bin: /usr/X11R6/bin: /usr/openwin/bin: /usr/games: /opt/kde/bin: /usr/share/texmf/bin: /etc/script

É importante destacar que o shell possui várias variáveis pré-definidas, ou seja, que possuem um significado especial para ele, entre elas: PATH, PWD, PS1, PS2, USER e UID.

Para conhecer mais variáveis de ambiente digite:env

Variáveis

Prompt$ HOJE=$(date)echo "Hoje é: $HOJE"Sáb Abr 24 18:40:00 BRT 2004unset HOJEecho $HOJE

$ variavel="Eu estou logado como usuário $user"$ echo $variavel Eu estou logado como usuário cla

$ variavel='Eu estou logado como usuário $user'$ echo $variavel Eu estou logado como usuário $user

$ variavel="Meu diretório atual é o `pwd`"$ echo $variavel Meu diretório atual é o /home/cla

ParâmetrosParâmetros$0 : é o nome do shell script (parâmetro zero);$1 a $9 : $1 é o primeiro parâmetro, $9 o nono, assim por diante;${10}, ${11}.. quando o número do parâmetro possui mais de um dígito é necessário o uso das chaves;$* : todos os parâmetros em uma única string (exceto o $0);$@todos os parâmetros, cada um em string separadas (exceto $0);$# número de parâmetros (sem contar com o $0)$? valor de retorno do último comando;$$ PID do script.

Parametros.sh!/bin/bash# "basename" serve para eliminar o caminho do arquivo emostrar# somente o último nome dele. Neste caso: parametros.shecho "Nome do script: `basename $0`"echo "Número total de parâmetros: $#"echo "Primeiro parâmetro: $1"echo "Segundo parâmetro: $2"echo "Décimo quinto parâmetro: ${15}"echo "Todos os parâmetros: $*"

$ ./parametros.sh a b c d e f g h i j l m n o p q r s t u v x zNome do script: parametros.shNúmero total de parâmetros: 23Primeiro parâmetro: aSegundo parâmetro: bDécimo quinto parâmetro: pTodos os parâmetros: a b c d e f g h i j l m n o p q r s t u v x z

Passagem de Parâmetros

find / -name file -print

#!/bin/bash find / -name $1 -print

#o bash lê a variável "$1", ele a substitui pelo primeiro parâmetro passado na linha de comando para o nosso script.

;

#!/bin/bashecho "Vou buscar data do sistema. Posso continuar? [sn] " ; read RESPOSTA; test "$RESPOSTA" = "n" && exitecho "Data e Horário:" ;date

Exemplo IF

#!/bin/bash read -p 'Qual foi sua nota na Prova?' nota if test -n "$nota" then if test "$nota" -gt 7 then echo "voce esta aprovado!" else if test "$nota" -eq 10 then echo "show! gabaritou!" else if test "$nota" -ge 2 && test "$nota" -lt 5 then echo "reprovado!" else if test "$nota" -lt 2 then echo "assinou o nome?" else echo "voce apenas passou!" fi ;fi ;fi ; fi ; fi

test

Interagindo c/ test

#!/bin/bashecho "Vou buscar os dados do sistema. Posso continuar? [s/n] "read RESPOSTAtest "$RESPOSTA" = "n" && exitecho "Data e Horário:"dateecho "Uso do disco:"dfecho "Usuários conectados:"w

Expressões usando strings:

O test pode apenas comparar strings, ou seja, verificar se uma é igual a outra, e verificar se uma string é vazia ou não. Vamos aos exemplos para facilitar o entendimento:jefer@acer:~$ test "a" = "a"jefer@acer:~$ echo $?0

jefer@acer:~$ test "a" = "b"jefer@acer:~$ echo $?1

jefer@acer:~$ test "a" != "b"jefer@acer:~$ echo $?0

jefer@acer:~$ test -z neo"jefer@acer:~$ echo $?1jefer@acer:~$ test -z ""jefer@acer:~$ echo $?0jefer@acer:~$ test -n “neo"jefer@acer:~$ echo $?0jefer@acer:~$ test -n ""jefer@acer:~$ echo $?1

Ao lado temos os testes de vazio. A opção "-z" verifica se é vazio, e "-n" se não é vazio.

No primeiro caso, ele testa se "neo" é uma string vazia, retornando falso.

No segundo caso, como "" é vazia, retorna verdadeiro.

O terceiro e quarto são semelhantes aos primeiros, mas com "-n".

Expressões com arquivos:

Os testes que podem ser feitos com arquivos são para verificar determinadas caracteristicas, como se ele existe, se é executável, se é um link simbólico, se é um diretório etc.

Alguns exemplos:A opção "-e" verifica apenas se um arquivo existe e a opção "-d" verifica se o arquivo é um diretório.

A opção "-nt" verifica se o primeiro arquivo é mais novo que o segundo (nt = newer than) e "-ot" verifica se o primeiro é mais velho que o segundo (od = older than):

jefer@acer:~$ test -e vmlinuzjefer@acer:~$ echo $?0jefer@acer:~$ test -d vmlinuzjefer@acer:~$ echo $?1jefer@acer:~$ test -e /usrjefer@acer:~$ echo $?0

jefer@acer:~$ test -d /usrjefer@acer:~$ echo $?0jefer@acer:~$ test /usr -nt /vmlinuzjefer@acer:~$ echo $?0jefer@acer:~$ test /usr -ot /vmlinuzjefer@acer:~$ echo $?1

A seguir, uma lista de várias opções disponíveis:

* -b arquivo - Verdadeiro se arquivo é um arquivo de bloco, como /dev/hda. * -c arquivo - Verdadeiro se arquivo é um arquivo de caracter, como /dev/tty1. * -d arquivo - Verdadeiro se arquivo é um diretório. * -e arquivo - Verdadeiro se arquivo existe. * -f arquivo - Verdadeiro se arquivo existe e é um arquivo comum. * -s arquivo - Verdadeiro se arquivo existe e não é vazio. * -h arquivo - Verdadeiro se arquivo é um link simbólico. * -p arquivo - Verdadeiro se arquivo é um "named pipe" (fifo, lifo, etc).

* -S arquivo - Verdadeiro se arquivo é um "socket". * -r arquivo - Verdadeiro se arquivo pode ser lido pelo usuário atual. * -w arquivo - Verdadeiro se arquivo pode ser escrito pelo usuário atual. * -x arquivo - Verdadeiro se arquivo pode ser executado pelo usuário atual. * -O arquivo - Verdadeiro se arquivo pertence ao usuário atual. * -G arquivo - Verdadeiro se arquivo pertence ao grupo do usuário atual. * -N arquivo - Verdadeiro se arquivo foi modificado desde a ultima vez que foi lido.

Execução em foreground e background

o sinal de & depois de um comando.

Exemplo:jefer@acer:~$ cp arquivo1 arquivo2 &[1] 206

A primeira informação ([1]) chama-se job. Ela identifica os programas que estão sendo executados em bg (background). A segunda informação (206) é o pid do programa, ou seja, o número de processo que o kernel dá a esse programa.

Para retornar, usamos o comando fg [job]

Pipes, redirecionamento e backtick

Não são realmente comandos mas são conceitos muito importantes.

pipes (|) envia o output (stdout) de um programa para o input (stdin) de um outro programa. cat ficheiro.txt |grep palavra | wc -l

procura as linhas com a string PALAVRA no ficheiro.txt e conta as linhas.

O output do comando grep é utilizado como input para o comando wc. Dessa forma você pode concatenar os comandos que queira

redirecionamento: escreve o output de um comando para um aruivo ou adiciona dados a um ficheiro:

> escreve o output para um arquivo e sobrepõe o arquivo antigo caso ele existirEx.: echo oi > oi.txt

echo ola > oi.txt

>> adiciona dados a um arquivo (ou cria um novo se ele ainda não existir mas nunca sobrepõe nada).Ex.: echo oi >> oi2.txt

echo oii >> oi2.txt

BacktickO output de um comando pode ser utilizado como argumento da linha de comandos para um outro comando. Você pode também utiliza-lo para definir o output de um comando para uma variável.

O comando: find . -mtime -1 -type f -print

procura todos os ficheiros que foram modificados nas ultimas 24 horas (-mtime -2 significaria 48 horas).

Se você quer armazenar esse ficheiros num arquivo tar (ficheiro.tar) a syntax para o tar teria de ser:

tar xvf ficheiro.tar ficheiro1 ficheiro2 ...

Em vez de escrever isso tudo, você pode combinar 2 comandos (find e tar) utilizando backticks. Tar irá arquivar todos os ficheiro que find escreveu:

#!/bin/sh# Backticks (`) , não plicas ('):tar -zcvf ultimamod.tar.gz `find . -mtime -1 -type f -print`

Estruturas de ControleDesvio e Repetição

Estruturas de DesvioCondicionais são comandos que avaliam uma expressão. Se ela for verdadeira, uma determinada rotina é executada. Caso contrário, outra rotina pode ser executada.Controle de fluxo com:IfCaseSelect

if

o comando IF (ele é um comando embutido no bash e não um programa como o "ls", o "cp" etc.). A forma mais simples de representar uma condicional utilizando o IF, é da seguinte forma básica:

if [condição];then comandos1;else comandos2;fi;

Se [condição] for verdadeira, os comandos1 são executados. Se for falsa, os comandos2 são executados.Mas para o IF, o que é uma condição verdadeira ou uma falsa?

Se [condição] for verdadeira, os comandos1 são executados. Se for falsa, os comandos2 são executados.Mas para o IF, o que é uma condição verdadeira ou uma falsa?

TODO comando em Unix tem um código de retorno. Geralmente o código "0" (zero) significa que o comando foi executado perfeitamente e terminou bem. Códigos maiores que zero significam que alguma coisa de errado ocorreu.

É assim que o IF verifica uma condição. Se o seu código de retorno for zero, então ela é considerada verdadeira. Caso contrario, ela é falsa.Mas então a [condição] tem que ser um comando, certo?

Exemplo:jefer@acer:~$ if ls /boot; then echo "O diretório existe."; else echo "Diretório inválido."; fi;

System.map boot.0300 boot.b boot_message.txt chain.b config map os2_d.bO diretório existe.

O que aconteceu?Logo após o if, nós colocamos um comando: "ls /boot". O que o IF faz? Ele executa esse comando (por isso que temos a segunda linha começada por "System.map", que é o conteúdo do meu diretório /boot) e avalia o seu código de saída. Como o "ls" foi executado corretamente, ele retorna zero, significando verdadeiro para o IF, que executa o comando logo após o "then", ou seja, o echo "O diretório existe.", mostrando essa mensagem no console.

Agora vamos colocar um diretório que não existe:

jefer@acer:~$ if ls /dir_invalido; then echo "O diretório existe."; else echo "Diretório inválido."; fi;/bin/ls: /dir_invalido: Arquivo ou diretório não encontradoDiretório inválido.

A lógica é a mesma. Executa o "ls /dir_invalido", que retorna um código maior que zero. O IF avalia como falso e executa o comando após o else: echo "Diretório inválido"..

if [ -e $linux ]then echo 'A variável $linux existe.'else echo 'A variável $linux não existe.'fi

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável $linux existir, então (then) ele diz que que existe com o echo, se não (else), ele diz que não existe.

case

geralmente é utilizado como substituição de vários IFs. Um exemplo clássico e muito utilizado é quando precisa testar um parâmetro fornecido na linha de comando. O Case é utilizado desta forma em scripts de inicialização de serviços do sistema.

Exemplo: um script que inicialize/reinicialize ou pare algum serviço (como o sendmail, apache, bind, etc).

Sintaxe:case <parâmetro> in opção 1 ) <comandos 1> ;; opção2 ) <comandos 2> ;; * ) < comandos se não for nenhuma das opções > ;;esac

Explicação: O Case pega a string fornecida em <parâmetro> e compara com <opção 1>. Se forem iguais, ele executa <comandos 1> e sai fora. Caso contrario, ele compara <parâmetro> com <opção 2> e assim por diante.

Caso <parâmetro> não seja igual a nenhuma das opções, ele executa os comandos da opção "*", se este existir.

IMPORTANTE: Prestem atenção a alguns detalhes na sintaxe. Deve existir um ")" após cada opção e também um ";;" após todos os comandos de cada opção. Vejam o exemplo:

case "$1" in 'start' ) echo "Iniciando o serviço..." <comandos para iniciar o serviço> ;; 'restart' ) echo "Reinicializando o serviço..." <comandos para reinicializar o serviço> ;; 'stop' ) echo "Parando o serviço..." <comandos para parar o serviço> ;; *) echo "Opção invalida!" echo "As opções válidas são: start, stop e restart" ;;esac

O Case serve para evitar o teste de vários Ifs. No caso acima, teríamos que utilizar 3 Ifs. Mesmo se o primeiro já fosse verdadeiro, o bash iria testar o segundo e o terceiro, ou seja, ia perder tempo desnecessariamente. Já no case isso não acontece. Após entrar em uma opção e executar seus comandos, ele já pula fora do case sem testar as outras opções abaixo.

select

O Select é um comando de laço que nos permite mostrar um pequeno menuzinho de opções para o usuário. Cada opção possui um número e para escolher, o usuário digita o número correspondente a opção desejada. Vejamos a sintaxe a seguir:

select <var> in <lista de opções>;do <comandos>done;

o select vai mostrar as opções contidas em <lista de opções>, uma por linha, com um número na frente e espera que o usuário digite a opção desejada. Ao digitar a opção, o select atribui o nome da opção a variável <var> e executa os comandos. Para sair do select, é necessário executar o comando "break". Vamos a um exemplo:

select x in Iniciar Reiniciar Parar Sair; do echo "Opção Escolhida: $x" if [ "$x" == "Sair" ]; then break; fi;done;

se o usuário escolher alguma opção diferente de "Sair", o script apenas escreve a opção. Se for escolhida Sair, ele mostra a opção, entra no IF e executa o break, saindo do select.

É interessante combinar o Select com o Case. Vamos mostrar como ficaria aquele exemplo do case, de iniciar um serviço, utilizando o Select, para tornar o script interativo:

select x in Iniciar Reiniciar Parar Sair; do case "$x" in 'Iniciar' ) echo " Iniciando o serviço..." ;; 'Reiniciar' ) echo " Reinicializando o serviço..." ;; 'Parar' ) echo " Parando o serviço..." ;; 'Sair' ) echo " Script encerrado." break ;; *) echo " Opção inválida!" ;; esacdone;

Primeiramente o Select mostra um menu:

1) Iniciar2) Reiniciar3) Parar4) Sair#?

Quando o usuário digitar um número de opção, o select executa o case e este compara a variável x com suas opções. Se achar alguma, executa seus comandos, no caso um echo. Se o usuário escolher Sair, além do echo, ele executa o "break", que interrompe o select:

neo@matrix:~/test$ ./t1) Iniciar2) Reiniciar3) Parar4) Sair#? 1 Iniciando o serviço...1) Iniciar2) Reiniciar3) Parar4) Sair#? 5 Opção inválida!

1) Iniciar2) Reiniciar3) Parar4) Sair#? 4 Script encerrado.neo@matrix:~/test$

Estruturas de Repetição

whileuntilfor

WHILE

Ele testa uma condição (como faz o IF) e executa um conjunto de comandos se esta condição for verdadeira. Após a execução desses comandos, ele torna a testar a condição e se esta for verdadeira, ele reexecuta os comandos e assim por diante.

Sua sintaxe é a seguinte:while [ condição ]; docomando 1;comando 2;...done;

O parâmetro [ condição ] funciona exatamente igual ao do IF. Não voltarei a abortar os parâmetros condicionais pois eles já foram explicados na aula 3. Em caso de dúvida sobre isso, uma rápida revisão na aula 3 é suficiente.

Bom, vamos ao exemplo mais simples do While: um contador.

x = 0While [ "$x" -le 10 ];do echo "Execução número: $x"?; x = $((x+1));done;

Analisando:Na primeira linha temos a condição: enquanto o valor da variável x ( $x ) for menor-igual ( -le ) a 10, faça: mostre "Execução número: " e o valor de x ($x). Faça x = x + 1. Isso no bash é feito pelo comando $(( )). Ele realiza operações algébricas com variáveis. No caso acima, estamos somando x + 1 e colocando o resultado no próprio x.

Preste atenção, que as linhas do While precisam de um ";" para terminar, exceto a que contém o "do", pois ele representa o começo do bloco de comandos.

Quando executamos o script acima, temos uma contagem de 1 até 10:

jefer@acer:~$ x=0; while [ "$x" -lt 10 ]; do x=$((x+1)); echo"Execução número: $x"; done;Execução número: 1Execução número: 2...Execução número: 9

jefer@acer:~$

until

Tem as mesmas características do while, a única diferença é que ele faz o contrário. Veja o exemplo abaixo:

variavel="naovalor"until [ $variavel = "valor" ]; do comando1 comando2done

Ao invés de executar o bloco de comandos (comando1 e comando2) até que a expressão se torne falsa, o until testa a expressão e executa o bloco de comandos até que a expressão se torne verdadeira. No exemplo, o bloco de comandos será executado desde que a expressão $variavel = “valor” não seja verdadeira.

Se no bloco de comandos a variável for definida como “valor”, o until pára de executar os comandos quando chega ao done.

Um exemplo para o until que, sintaticamente invertido, serve para o while também:var=1count=0until [ $var = "0" ]; do comando1 comando2 if [ $count = 9 ]; then var=0 fi count=`expr $count + 1`done

Primeiro, atribuímos à variável “$var” o valor “1″. A variável “$count” será uma contagem para quantas vezes quisermos executar o bloco de comandos. O until executa os comandos 1 e 2, enquanto a variável “$var” for igual a “0″. Então usamos um if para atribuir o valor 0 para a variável “$var”, se a variável “$count” for igual a 9. Se a variável “$count” não for igual a 0, soma-se 1 a ela. Isso cria um laço que executa o comando 10 vezes, porque cada vez que o comando do bloco de comandos é executado, soma-se 1 à variável “$count”, e quando chega em 9, a variável “$var” é igualada a zero, quebrando assim o laço until

for

O for é semelhante ao while usado como um contador.

for <var> in <lista>; docomandosdone;

O For associa o primeiro item da lista de nomes à variável <var> e executa os comandos. Em seguida, associa novamente o segundo item da lista à <var> e executa novamente os comandos... e assim por diante, até acabar a lista.

jefer@acer::~$ for x in Compra Venda Aluguel; do echo $x; done;CompraVendaAluguel

Ou seja, primeiro ele coloca "Compra" na variável x e executa os comandos, no caso, "echo $x", e assim por diante.

Podemos facilmente implementar um contador, usando em conjunto com o for, o programinha "seq". Ele simplesmente gera uma seqüência de números. Por exemplo, "seq 10" gera uma seqüência de 1 até 10. Assim, podemos usá-lo no for:

for x in $(seq 10); do echo $x; done;

Esse comando é semelhante ao contador implementado com o While. Primeiro o x vale 1 e o for executa os comandos. Depois x vale 2 e ele reexecuta os comandos...

Vamos usar o For para renomear os arquivo de um diretório, mudando todos os arquivo terminados em ".mp3" para ".mp3.bak".

for x in *; do mv "$x" "${x}.bak"; done;for x in *.mp3; do if [ -e "$x" ]; then mv "$x" "${x}.bak"; fi; done;

No local de <lista> nos colocamos "*.mp3". Isso diz ao bash para expandir (transformar) ele na lista de arquivos terminados com ".mp3". Senão houver nenhum arquivo com essa terminação, o bash não faz nada, ficando para o for a string "*.mp3". Por isso precisamos do IF para testar se o arquivo existe.

Experimente no seu sistema.echo *.mp3

Vai mostrar os arquivos no diretório atual com terminação mp3, mas sem quebra de linha entre eles, ou seja, um nome após o outro. Se não houver nenhum arquivo com terminação mp3, ele apenas vai mostrar "*.mp3"

Bom, voltando ao For, ele vai atribuir a "x" cada nome na lista de arquivos com terminação ".mp3" e executar os comandos seguintes.

Primeiro ele testa para ver se o arquivo existe ( if [ -e "$x" ]; ), e se existir, renomeia ele para o seu próprio nome acrescido de ".bak" ( ${x}.bak ).

Resumindo, o For faz isso: você fornece uma lista de nomes para ele e ele vai atribuindo esses nomes, em ordem e um por vez, à variável <var> e executa os comandos entre o "do" e o "done;".

metacaracteresSão caracteres especiais. Quando eles são digitados são interpretados de outra forma. Podem ser usados para especificar um ou uma cadeia de outros caracteres. O shell procura no diretório corrente arquivos que casem com esse padrão e os expande.

Usando caracteres coringasGeralmente o caracter "*" é um coringa que significa "qualquer caracter em qualquer quantidade". Por isso se a gente executar "ls *", onde "*" entra no lugar do "nome do arquivo", significando qualquer string de qualquer tamanho. Por isso ele lista todos os arquivos.

Faixas de caracteres também são permitidos: [0-3] é o mesmo que [0123] [a-k] é o mesmo que [abcdefghijk] [A-C] é o mesmo que [ABC] [A-Ca-k] é o mesmo que [ABCabcdefghijk]

Existem também algumas formas alternativas: [[:alpha:]] é o mesmo que [a-zA-Z] [[:upper:]] é o mesmo que [A-Z] [[:lower:]] é o mesmo que [a-z] [[:digit:]] é o mesmo que [0-9] [[:alnum:]] é o mesmo que [0-9a-zA-Z] [[:space:]] casa com qualquer quantidade de espaços

grep

O grep basicamente faz buscas. Mais precisamente: grep palavra file retorna todas as linhas do arquivo file que contenham palavra

Outro jeito de usar o grep é atraves de pipe (lembram dos pipes?).

Por exemplo: ls | grep palavra

Lista todos os arquivos que contenham palavra em seu nome. Ou seja, a entrada do grep é uma lista de arquivos (gerada pelo ls) que será filtrada, sendo impressas somente as linhas que contenham palavra.

>cat file filebig bad bug bigger boogy

"." significa "qualquer e apenas um caracter". Para significar strings arbitrárias utilizamos "*".Intervalo numerico: ls oi[0-9].txt

sed

Exemplo 1: >cat file O gato preto foi caçado por um cachorro marrom. >sed -e 's/preto/branco/g' file O gato branco foi caçado por um cachorro marrom.

FunçõesFunções são blocos de comandos que podem ser definidos para uso posterior em qualquer parte do código. sintaxe de uma função:funcao() { comando1 comando2 ...}A função funcionará como um simples comando próprio. Você executa a função em qualquer lugar do script shell, e os comandos 1, 2 e outros serão executados. A flexibilidade das funções permite facilitar a vida do programador, e organizar

Shellzin GráficoXdialog --title "Exemplo número 2!" --stdout --yesno \"Neste exemplo, vamos ver o que você quer fazer. Você deseja continuar com o programa?" \0 0if [ $? = "0" ]; thenecho "Que bom! Você continuou o programa! Parabéns!"elif [ $? = "1" ]; thenecho "Você saiu do programa..."fi

Shell com janelasXdialog --title "Exemplo número 1!" --center --stdout --yesno \"Isto é legal?" \0 0

http://aurelio.net/shell/dialog/

mais janelas

Xdialog --title "Exemplo número 2!" --center --stdout --yesno \"Neste exemplo, vamos ver o que você quer fazer. Você deseja continuar com o programa?" \0 0

if [ $? = "0" ]; then echo "Que bom! Você continuou o programa! Parabéns!"elif [ $? = "1" ]; then echo "Você saiu do programa..."fi

kdialog

#!/bin/bashkdialog --msgbox "Olá, tudo bem?"

kdialog --inputbox "Canal a gravar (ex: 12)" 10 60 "12" 2> /tmp/resposta.tmpcanal=`/tmp/resposta.tmp`

kdialog --passivepopup "Esta janela some sozinha depois de 6 segundos." 6 &

arquivo=`kdialog --getsavefilename "/home/kurumin/Desktop" \"*.txt |Arquivos de texto"

mais janelas

Xdialog --title "Aviso" --center --stdout --msgbox \"Este programa é apenas um exemplo para você ver como o Xdialog \\nfunciona. Apropósito, se você praticar bastante pode criar \\nprogra mas incríveis e facilmente, que daria muito mais \\ntrabalho fazendo em outras linguagens." \0 0

mais janelas

dialog --title "Exemplo de Menu" --center --stdout --menubox \"Qual sua distribuição Linux favorita?" \20 50 0 \1 "Slackware" \2 "Debian" \3 "Red Hat" \4 "Conectiva Linux" \5 "Eu tenho minha própria distribuição"

Xdialog --title "Exemplo de Menu" --center --stdout --menubox \"Qual sua distribuição Linux favorita?" \20 50 0 \1 "Slackware" \2 "Debian" \3 "Red Hat" \4 "Conectiva Linux" \5 "Eu tenho minha própria distribuição"

#!/bin/bashkdialog --msgbox "Olá, tudo bem?"kdialog --inputbox "Canal a gravar (ex: 12)" 10 60 "12" 2> /tmp/resposta.tmpcanal=`/tmp/resposta.tmp`kdialog --passivepopup "Esta janela some sozinha depois de 6 segundos." 6 &arquivo=`kdialog --getsavefilename "/home/kurumin/Desktop" \"*.txt |Arquivos de texto"`

exemplo

#!/bin/sh#Desenvolvido por Jefer Benedett Dorr (jeferbd@gmail.com) #script para configurar rede do meu note na pos da unipankdialog --title "Script Configurador para Rede Unipan" --passivepopup "Aguarde....... Configurando a rede" 3 #msg passiva no canto superior esquerdoclearifconfig eth0 downifconfig eth0 upecho "iniciando configuração"ifconfig eth0 192.168.90.117 netmask 255.255.255.0 upecho "adicionando rota"route add default gw 192.168.90.1#adicionar dns no resolvecho "adicionando dns no resolv.conf"echo "nameserver 192.168.90.1" >> /etc/resolv.conf echo "testando conexao..........."if ping -c 3 www.unipan.br

then echo "Conexão --------- OK "echo "Conexão Testada ;)"else echo "Bahh!! Conexão Falhou!"

fi

Sobre Shell

Papo de Botequim – Julio Neves - http://twiki.softwarelivre.org/TWikiBar

Shell Script: Porque programar tem que ser divertido – Aurélio Marinho Jargas - http://aurelio.net/shell/

Guia do Hardware – Carlos Morimotto - http://www.gdhpress.com.br/ferramentas/leia/index.php?p=cap4-1

http://lcnsqr.byethost9.com/?sec=lpic&exam=102&node=13

Livros

Filmes

Piratas do

Vale do SilícioRevolution OS

The code

Linux