Buscar

ShellScript_basico

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 142 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 142 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 142 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Profº André Luiz
andreluizsp@gmail.com
 Universidade Tuiuti do Paraná
Faculdade de Ciências Exatas
Sistemas Operacionais III - CSTR
Shell Script
“Meu Deus do Shell!
Porque eu não optei pelo Linux antes?”1 
 [1] NEVES, Júlio César
Profº André Luiz
andreluizsp@gmail.com
● Fundamentos de Shell
● Comandos básicos
● Principais arquivos/diretórios de configuração
● Comandos de rede
● Comandos avançados
● Tipos de variáveis e atribuição
● Variáveis de ambiente e variáveis especiais
● Trabalhando com arquivos de texto
 FHS - Permissões - Filtros - SED - Editores de texto
● Operadores do Shell
● Estrutura de decisão
● Laços
● Funções
● Expressões regulares
Conteúdo programáticoConteúdo programático
 
O que é Shell Script?O que é Shell Script?
 Shell é uma interface textual que interpreta os 
comandos existentes em um sistema operacional 
e os envia ao kernel imprimindo posteriormente o 
resultado do processamento na tela.
 “Embora seja verdade que haja ferramentas GUI 
 disponíveis para gerenciar praticamente tudo em um 
 sistema GNU/Linux, você precisa ter conhecimento 
sólido sobre utilitários de linha de comando para se 
 preparar melhor para se trabalhar com qualquer 
distribuição Linux.” (PRITCHARD; PESSANHA; STANGER;
 DEAN; LANGFELDT, 2007,P. 53)
 
O que é Shell Script?O que é Shell Script?
 O SHELL original para sistemas UNIX foi escrito por 
Steve Bourne e se chamava simplesmente sh. O 
SHELL padrão de sistemas Linux é o BASH (BOURNE-
AGAIN SHELL), que é uma variante GNU de sh.
 
O que é Shell Script?O que é Shell Script?
 Shell, é um interpretador de comandos que analisa 
o texto digitado na linha de comando e os executam.
 Na linha de comandos de um shell, podemos utilizar 
diversos comandos um após o outro, ou mesmo 
combiná-los numa mesma linha ( ; && | tee \ ). Se 
colocarmos diversas linhas de comandos em um 
arquivo texto simples, teremos em mãos um Shell 
Script, ou um script em shell.
 
Existe mais de um Shell?Existe mais de um Shell?
Exemplos de Shell:
● csh: É a shell mais utilizada em sistemas como *BSD ou Xenix. A sua 
estrutura de comandos é similar á Linguagem C.
● sh: Ou Bourne Shell é a shell pré-defenida com o Unix (1977). Desde a 
versão 7 substituindo a tcsh, esta costuma a ser a shell pré-defenida para 
o root.
● bash: (Bourne-Again SHell) Muito similar a sh, esta é a shell mais utilizada 
por conter características como: Auto-Complete, podemos personalizar 
todo o output de uma forma simples,entre outras....
● tcsh: Compatível e semelhante a csh.
● ksh: Considerada a mais popular no sistema Unix, tendo todas as funções 
do sh. Korn Shell foi a primeira a introduzir recursos avançados.
● zsh: Z Shell tem como grande vantagem um enorme interpretador de 
comandos 
 
E os interpretadores de comandos?E os interpretadores de comandos?
 Interpretadores de comandos são programas de computador responsáveis 
por tomar as ações efetivas conforme a orientação do usuário através de 
comunicação textual. Exemplos de Interpretadores de comandos:
● csh
● sh
● bash
● tcsh
● ksh
● zsh
● python
● perl
● expect
● awk
● Basic
● Vbscript
● PHP
 
Qual a diferença entre um compilador e um interpretador?Qual a diferença entre um compilador e um interpretador?
Compilador: É um programa responsável por gerar, a partir de de um 
programa escrito em linguagem de alto nível, um programa em 
linguagem de máquina, não executável. As linguagens de alto nível 
não possuem nenhuma relação direta com a máquina, ficando esta 
preocupação para o compilador. Exemplos: C, C++, Delphi, Visual 
Basic, etc ... 
Interpretador: Interpretador é considerado um tradutor que não 
gera código objeto. A partir de um programa fonte, escrito em 
linguagem de alto nível, o interpretador, no momento da execução do 
programa, traduz cada instrução e a executa em seguida. Exemplo de 
linguagens interpretadas: bash, sh, basic, VBscript, PHP, etc...
Linguagens “Híbridas”: Interpretada e compilada. Ex. Python, java.
 
Onde encontro o Shell?Onde encontro o Shell?
 O Sistema Operacional é o código executor das 
chamadas de sistemas.
 
Onde encontro o Shell?Onde encontro o Shell?
 Shell é fundamentalmente uma interface entre o 
Sistema Operacional e o seu usuário.
 
Como funciona um Shell?Como funciona um Shell?
 Para inicarmos os estudos sobre Shell Script vamos 
utilizar o bash (/sbin/bash).
 O BASH permite a execução de seqüências de 
comandos direto no prompt do sistema ou escritas em 
arquivos de texto, conhecidos como shell scripts.
 O BASH é o shell desenvolvido para o projecto GNU, 
da Free Software Foundation, que se tornou padrão nas 
várias distribuições Linux. Pode ser usado também com 
outros sistemas operacionais, como o Unix. É compatível 
com o Bourne shell (sh), incorporando os melhores 
recursos do C shell (csh) e do Korn Shell (ksh).
 
Como funciona um Shell?Como funciona um Shell?
 Pode-se pode customizar o ambiente do bash utilizando 
alguns arquivos/diretórios como:
● /etc/profile
● /etc/skel
● .bash_profile
● .bash_rc
 Importante: Nos sistemas GNU/Linux nomes de arquivos 
são case-sensitive, ou seja, distinguem maiúsculas de 
minúsculas e vice-versa.
TESTE != Teste != teste
 
Como funciona um Shell?Como funciona um Shell?
 O ambiente de uma sessão SHELL tem seu 
comportamento alterado de acordo com o conteúdo de 
algumas variáveis de ambiente, por exemplo:
 BASH
 HOSTNAME
 USER 
 USERNAME
 PATH
 PS1
 PS2
 DISPLAY 
 SHELL 
 HISTFILE
 HISTFILESIZE
 
Como funciona um Shell?Como funciona um Shell?
Designadores de expansão de histórico
!! - chama o último comando utilizado
History - mostra o histórico de comandos
!n - refere-se ao número n do histórico
!-n - comando atual -n do histórico
!string - refere-se ao último comando que 
 começa com a string (expressão)
!?string - refere-se ao último comando que 
 contenha a string (expressão)
^string1^string2 - repete o último comando substituindo 
 a ocorrência string1 por string2
 
Como funciona um Shell?Como funciona um Shell?
 Um comando para ser interpretado é dividido em 
partes distintas:
 
 parana@acer:~$ ps -aux | grep bash
 1ª parte) comando, o shell identifica se o arquivo 
existe no PATH e se o usuário possui privilégios suficientes 
para executá-lo;
 2ª parte) identifica por espaços quais são os 
parâmetros/argumentos. Esses alteram de alguma forma o 
comportamento durante a execução e/ou saída do 
comando;
 3ª parte) saída (direcionamento/pipe) que permite ao 
usuário receber o retorno da execução, seja saída padrão 
ou alguma mensagem de erro/advertência;
 
Como funciona um Shell?Como funciona um Shell?
Onde encontrar um terminal num sistema GNU/Linux?
● Os consoles são levantados pelo init na inicialização do sistema:
/etc/inittab
● Controlados pelo getty (/sbin/getty) que abre um novo processo 
para controlar uma porta ttyX (/dev/ttyX)
● Por padrão são definifos 6 consoles virtuais:
/dev/tty1 CRTL+ALT+1
/dev/tty2 CRTL+ALT+2
/dev/tty3 CRTL+ALT+3
/dev/tty4 CRTL+ALT+4
/dev/tty5 CRTL+ALT+5
/dev/tty6 CRTL+ALT+6
● Como em todo sistema GNU/Linux é necessário que se realize a 
autenticação antes de iniciar o uso.
 
Como funciona um Shell?Como funciona um Shell?
Onde encontrar um terminal num sistema Gráfico?
● O xterm é um emulador de terminais leve e direto;
● Comando para instalação no Debian: apt-get install xterm
● A variável de ambiente $TERM por padrão define xterm como 
terminal a ser utilizado por diversos sistemas.Como funciona um Shell?Como funciona um Shell?
gnome-terminal
● O gnome-terminal é o terminal padrão do Gnome (ambiente de 
trabalho gerenciado pelo servidor Xorg);
● Onde encontro? Menu: Aplicações – Acessórios – Terminal
● A variável de ambiente $COLORTERM define o gnome-terminal 
como o terminal padrão.
 
Como funciona um Shell?Como funciona um Shell?
konsole
● O konsole é o terminal padrão do KDE (ambiente gráfico 
gerenciado pelo servidor Xorg);
● Onde encontro? KDE-Menu: Sistemas – Konsole
● O Konsole permite múltiplas sessões em abas, histórico, impressão 
e favoritos.
 
Comandos BásicosComandos Básicos
$ <comando> --help $ free $ continua . . .
$ man <comando> $ locate
$ ls $ find
$ cat $ uptime
$ cd $ alias
$ mkdir $ touch
$ rm $ sort 
$ rmdir $ uniq
$ date $ ln
$ su $ uname
$ du $ wc 
$ df $ tar 
 
Comandos BásicosComandos Básicos
$ <comando> --help Mostra os principais paramêtros e forma de uso
$ man <comando> Manual on-line do comando
 -t <manpage> | ps2pdf14 - <arquivo>.pdf
$ ls Lista o conteúdo de um diretório
 -l -la -lh -lha -R 
$ cat Lista o conteúdo de um arquivo de texto
 -n -b -T
$ cd Alterna entre um diretório e outro
 
Comandos BásicosComandos Básicos
$ mkdir Cria um novo diretório
 -p -v -m=600
$ rm Deleta arquivos e diretórios
 -r -f -rf -i -v
$ rmdir Deleta diretórios vazios
$ date Mostra e altera a data/hora do sistema
 +FORMATO %H %M %d %m %Y . . .
 $ date mesdiahoraminuto[segundo][ano]
 
Comandos BásicosComandos Básicos
$ su Alterna entre um usuário e outro no sistema
 - -c <comando> -s SHELL
$ du Mostra o uso do disco por um arquivo ou diretório
 -s -h -sh 
$ df Mostra o status sobre partições em uso, ou da partição 
onde um determinado arquivo está armazenado.
 -h -a [arquivo]
 
Comandos BásicosComandos Básicos
$ free Mostra uso de memória RAM (/proc/meminfo)
 -b -k -m -g 
$ locate <string> localiza um arquivo ou diretório (updatedb)
 Base: /var/cache/locate/locatedb
 
$ find localiza um arquivo ou diretório
 -name -iname -a -o
 -size -type -perm -cmin -ctime -mtime -regex -gid -group
 -printf
 -exec <comando> {} \;
 
Comandos BásicosComandos Básicos
$ uptime tempo desde que a maquina iniciou
$ alias mostra e cria um “atalho” para um comando/parametros
$ touch altera data criação/alteração de um arquivo
 -c -t -a -m
$ sort exibe de forma a ordenar o conteúdo de um arquivo
 -u -n -r 
 
Comandos BásicosComandos Básicos
$ uniq oculta linhas repetidas
$ ln cria links simbólicos e hard links
 -s 
$ uname exibe informações sobre o sistema, como a versão do Kernel
 -r -a
$ wc realiza a contagem de linhas, palavras e caracteres
 -l -c -m -w
$ tar empacota arquivos/diretórios em um único arquivo
 -cvzf -zvxf -cvjf -zvjf -rf -tf
 
Comandos BásicosComandos Básicos
Exercícios de Fixação
1) De que forma você poderia descobrir em que diretório você está?
2) Qual a diferença entre ( cd / cd .. cd)?
3) Diferencie caminho absoluto e caminho relativo.
4) Qual a seqüência de comando para criar um subdiretório (teste) em 
/home?
5) Como criar 5 diretórios hierárquicos de uma única vez (Ex. 
/home/teste/aula/gerds/pos/aula1)?
6) Crie um hard link para arquivo /etc/profile em /tmp/profile.
7) Crie um soft link para o arquivo /etc/resolv.conf em /tmp/dns.
8) Qual a diferença encontrada entre soft link e hard link?
 
RedirecionamentoRedirecionamento
Operador Ação
 < Redireciona a entrada padrão (STDIN)
 > Redireciona a saída padrão (STDOUT )
 2> Redireciona a saída de erro (STDERR)
 >> Redireciona a saída padrão, anexando
 2>> Redireciona a saída de erro, anexando
 | Conecta a saída padrão com a entrada padrão de outro comando
 2>&1 Conecta a saída de erro na saída padrão
 >&2 Conecta a saída padrão na saída de erro
 >&- Fecha a saída padrão
 2>&- Fecha a saída de erro
 
Comandos BásicosComandos Básicos
Exercício de Fixação
1) Crie um diretório “shell”, dentro dele um novo arquivo “file” e 
altere a sua data de criação/alteração para 01/01/2010 15:00.
2) Altere a data do sistema para 22/09/1978 ás 10 horas. 
3) Crie um alias chamado “kernel” que mostre a versão do Kernel.
4) Informe quantos usuários e grupos estão cadastrados, inclusive 
usuários e grupos de sistema.
5) Liste todos os usuários do sistema, e suas propriedades, por ordem 
alfabética de login.
6) Ordene a saída do comando abaixo: 
 $ echo -e "10 \n 4 \n 8 \n 6 \n 0 \n 2" 
 
Comandos BásicosComandos Básicos
Exercício de Fixação
7) Mostre o status de uso das partições dos arquivos 
/etc/debian_version e /proc/meninfo, explique porque são diferentes se 
os dois arquivos pertencem a mesma árvore de diretórios?
8) Atualize a base de dados do comando locate em background, 
depois localize o arquivo “70-persistent-net.rules”.
9) Liste todos os sub-diretórios do diretório /home dentro do arquivo 
/tmp/HomeDirs.txt 
10) Com um único comando liste todos os arquivos do sistema, não 
listar diretórios, que iniciem com a letra a (A ou a), tenham a extensão 
.txt, e mostre também o tamanho de cada um deles. Não mostre 
saídas de erro.
 
Comandos BásicosComandos Básicos
Exercício de Fixação
11) Execute um único comando que crie cópias backup de todos os 
arquivos de extensão ".txt" do sistema em um arquivo 
/tmp/backuptxt.tar;
12) Crie os alias de comando conforme exemplo abaixo:
 $ data
 Data do sistema (dd/mm/yyyy): 19/07/2010
 $ hora
 Hora do sistema: 22:15
13) Altere a data de modificação do arquivo /etc/passwd para:
 Sex Jul 9 10:26:16 BRT 2010 
 
Principais arquivos/diretórios de configuração Principais arquivos/diretórios de configuração 
 DEBIAN GNU/LINUX REDHAT
$ /etc/inittab
$ /etc/hostname $ /etc/sysconfig/network
$ /etc/passwd
$ /etc/shadow
$ /etc/group
$ /etc/profile
$ /etc/skel
~$ .profile
~$ .bashrc
~$ .bash_history
~$ .bash_logout
 
Principais arquivos/diretórios de configuração Principais arquivos/diretórios de configuração 
DEBIAN GNU/LINUX REDHAT
$ /etc/addusers.conf $ /etc/login.defs
$ /etc/security/
$ /etc/network/interfaces $ /etc/sysconfig/network-scripts/ifcfg-ethX
$ /etc/resolv.conf
$ /etc/host.conf
$ /etc/hosts
$ /etc/rc*
$ /etc/inetd.conf
$ /etc/crontab
$ /etc/cron.*
$ /etc/sudoers
$ /etc/fstab
 
Principais arquivos/diretórios de configuração Principais arquivos/diretórios de configuração 
$ /etc/issue
$ /etc/motd
$ /etc/services
$ /etc/protocols
$ continuar . . .
Outros diretórios importantes:
/tmp
/var/log
 
Principais arquivos/diretórios de configuraçãoPrincipais arquivos/diretórios de configuração
Exercício de Fixação
1) Qual o arquivo responsável pelaconfiguração dos servidores de 
nomes? 
2) Identifique na lista de serviços associados as portas TCP/UDP qual é 
a porta do serviço ldap?
3) Liste a configuração das partições e pontos de montagem utilizados 
pelo sistema durante a inicialização.
4) Identifique em que datas/horários o sistema executa comandos 
programados nas “tarefas agendadas”. 
5) Se durante o logon dos usuários do sistgema fosse identificado que 
se está executando um script de forma indevida, ou sem necessidade, 
quais os arquivos poderiam ser verificados?
 
Principais arquivos/diretórios de configuraçãoPrincipais arquivos/diretórios de configuração
Exercício de Fixação
6) Ao alterar o nome da estação, quais arquivos devem ser verificados 
antes da próxima reinicialização? 
7) Se o usuário jose precisar reiniciar as interfaces de rede ou outros 
serviços, mas não tem acesso de root, como poderia liberar o acesso 
somente para esse usuário realizar essa tarefa?
8) Ao instalar o serviço telnetd desejamos que esse serviço não seja 
carregado durante a inicialização, qual o procedimento necessário?
9) Descreva a configuração estática, para Debian, do endereço de rede 
do host educacao.edu.br 200.120.114.20/24, gateway 
200.120.114.254, dns 8.8.8.8:
 
Comandos de redeComandos de rede
$ arp $ wget
$ dig $ getent 
$ nslookup $ iftop
$ ifconfig $ ssh
$ ifup $ scp
$ ifdown $ finger
$ mii-tool $ links / links2 / lynx
$ netstat $ fping
$ ntpdate $ nmap
$ route
$ tcpdmatch
$ traceroute
 
Comandos de redeComandos de rede
$ arp permite uso da tabela dinânica de endereços da camada 2
 -a [unix [kmem ] ]
 -d hostname
 -f filename (padrão: /etc/ethers)
 -s hostname ether address [ temp ] [ pub ] [ trail ] 
$ dig permite auditorias em um servidor DNS para testar suas 
configurações
 -x
 <dominio> NS
 <dominio> MX
 
Comandos de redeComandos de rede
$ ifconfig <interface> utilitário de configuração das interfaces de rede
 up | down | <address > netmask <mask>
 hw ether <mac> | <alias>
$ ifup <interface> ativa as interfaces de rede (/etc/network/interfaces)
 -a
$ ifdown <interface> desativa as interfaces de rede (/etc/network/interfaces)
 -a
 
Comandos de redeComandos de rede
$ mii-tool -i <interface> lista o status de conexão nas interfaces
 -r -w -F (100baseTx-FD | 100baseTx-HD | 10baseT-FD | 10baseT-HD)
 
$ netstat lista o status das conexões, tabelas de roteamento, e 
estatisticas das interfaces. (Vários arquivos do /proc são lidos)
 -a -r -M -s 
 # netstat -a | less
 Conexões Internet Ativas (servidores e estabelecidas)
 Proto Recv-Q Send-Q Endereço Local Endereço Remoto Estado 
 tcp 0 0 0.0.0.0:6566 0.0.0.0:* OUÇA 
 tcp 0 0 127.0.0.1:3306 0.0.0.0:* OUÇA 
 tcp 0 0 0.0.0.0:22 0.0.0.0:* OUÇA 
 # netstat -r
 Tabela de Roteamento IP do Kernel
 Destino Roteador MáscaraGen. Opções MSS Janela irtt Iface
 10.15.16.0 * 255.255.252.0 U 0 0 0 eth0
 default 10.15.16.1 0.0.0.0 UG 0 0 0 eth0
 
Comandos de redeComandos de rede
$ ntpdate ajusta a data e hora via NTP (Network Time Protocol)
 -q -k -t
 # ntpdate pool.ntp.org
$ route exibe e atualiza a tabela de rotas
 Add | del | -net | -host | default gw
 
$ tcpdmatch testa as regras para conexões usando tcpwrapper
 # tcpdmatch telnet aluno@10.15.17.255
 client: address 10.15.17.255
 client: username aluno
 server: process telnet
 matched: /etc/hosts.deny line 21
 access: denied
$ traceroute exibe a rota realizada por um pacote ICMP
 -i -m -s -w
 # traceroute 8.8.8.8
 
Comandos de redeComandos de rede
$ wget baixa arquivos por HTTP, HTTPS, and FTP protocols
 -r -o 
$ iftop mostra informações sobre o uso da rede, por interface
 -i -n -F
$ ssh acesso remoto Secure Shell (/etc/ssh/ssh_config /etc/ssh/sshd_config)
 -i -o -p
$ scp transfere arquivos via SSH (/etc/ssh/ssh_config /etc/ssh/sshd_config)
 -i -o -P
 
Comandos de redeComandos de rede
Exercícios de Fixação
1) Qual o endereço de hardware (MAC) da interface de rede da sua estação de trabalho?
2) Verifique se a sua interface de rede estabeleceu um link de rede, qual sua velocidade 
+ modo de operação. Altere esse modo para Half Duplex com transferẽncia de 100 
mbps sem utilizar autonegociação.
3) Configure sua estação de trabalho para utilizar as seguintes regras de rede: Interface 
eth0:0 192.168.2.0/24 GW 192.168.2.1
4) Baixe o arquivo http://gerds.utp.br/roberto/linux/linux.doc por linha de comando e 
transfira uma cópia, por ssh, para a estação 192.168.2.101, utilizando o usuário aluno.
5) Após o exercício 4 identifique o endereço MAC da estação 192.168.2.101 através da 
sua tabela dinâmica de endereços de hardware.
6) Se eu tiver um servidor apache (porta 80) e quiser saber quantas conexões estão 
abertas, qual comando poderia auxiliar nessa questão?
 
Comandos de redeComandos de rede
Exercícios de Fixação
7) Como verificar se o tcpwappers contém alguma regra que limita o acesso telnet do 
cliente 10.10.10.10 a sua estação de trabalho? 
8) Como verificar se a estação 10.10.10.10 possui a porta de ftp aguardando conexões 
de rede, se está fechada ou se possui algum filtro?
9) Qual o comando que realiza uma consulta de data/hora de um servidor NTP 
200.160.0.8, sem alterar a data/hora do sistema?
10) Identifique na rede 10.10.10.0/24 quantos equipamentos ativos estão respondendo 
ICMP:
11) Tente mapear a rota, utilizando protocolo ICMP, para se chegar a um dos servidores 
da página www.google.com.br
12) Ao baixar um arquivo de uma página qualquer identifique qual a maior taxa de 
transferência atingida. 
 
Comandos avançadosComandos avançados
$ dd $ nohup $ killall 
$ diff $ pidof $ top
$ which $ pstree $ continuar ..
$ fsck $ stat 
$ last $ sync
$ lastlog $ watch
$ lsof $ dmesg
$ lspci $ hwclock
$ lsusb $ bg
$ mount $ fg
$ nice $ jobs
$ renice $ kill
 
Comandos avançadosComandos avançados
$ dd converte e copia arquivos e dispositivos de blocos
 if=<> of=<> bs=x count=x
$ diff permite comparar arquivos linha a linha
 <file1> <file2>
 Seu uso comum é a criação de patch e para controle de alterações.
$ which informa o caminho absoluto do arquivo de um comando
 <comando>
 Obs.: é necessário que o comando esteja no PATH do usuário.
 
Comandos avançadosComandos avançados
$ fsck verifica e repara sistemas de arquivos GNU/Linux.
 Pacotes: e2fsprogs dosfstools ntfsprogs xfsprogs reiserfsprogs 
reiser4progs jfsutils 
$ last lista os últimos logins realizados (/var/log/wtmp)
 <usuário> | -n | 
$ lastlog lista o último login de todos os usuários do sistema
 -t <dias> -u <usuário>
 
Comandos avançadosComandos avançados
$ lsof lista os recursos utilizados por um determinado processo
 -p <pid> | -u <usuario> | …
$ lspci lista os dispositivos do barramento PCI
 -v | -vv
$ lsusb lista os dispositivos do barramento USB
 -v | -d <device>
 
Comandos avançadosComandos avançados
$ mount lista dispositivosem uso e monta filesystem
 -a | <dispositivo> | -t <filesystem> | -o <opções>
$ nice altera a prioridade padrão (0) ao iniciar um processo
 -n <prioridade -19 a 20> 
$ renice altera a prioridade de um processo em execução
 <prioridade -19 a 20 > <pid>
 
Comandos avançadosComandos avançados
$ nohup altera a saída padrão de um comando <non-tty>, tornando 
seu processo independente do terminal (Shell)
 nohup <comando>
 nohup: a ignorar a entrada e a acrescentar a saída a `nohup.out'
$ pidof procura o número do processo em execução
 <programa>
$ pstree lista a árvore de processos em execução, permitindo 
visualizar a relação de dependências entre os processos
 -p
 
Comandos avançadosComandos avançados
$ stat extrai informações de arquivos e sistemas de arquivos
 <file> | -f | -t
$ sync assegura que os discos estejam sincronizados com o cache 
 
$ watch executa um programa periodicamente, atualizando a saída 
na tela.
 -n <comando>
 
Comandos avançadosComandos avançados
$ dmesg exibe a saída da inicialização gerada pelo kernel lendo um 
buffer utilizado pelo kernel para enviar mensagens de eventos
 
$ hwclock exibe e altera a data/hora da máquina
 # hwclock --set --date="09/22/1978 10:30"
 -w ou --systohc : para copiar a hora do sistema para o relógio da máquina.
 -s ou --hctosys : para copiar a hora da máquina para a hora do sistema.
 -r ou –show
$ bg lista e envia processos em segundo plano.
 <pid>
 
Comandos avançadosComandos avançados
$ fg lista e envia processos em primeiro plano (ou plano de frente).
 <pid>
$ jobs lista os processos em segundo plano ou parados (STOP)
 jobs
$ kill envia sinais para os processos
 - <sinal> <pid>
 -l (lista todos os sinais possíveis de serem enviados)
 
Comandos avançadosComandos avançados
$ killall envia sinais para os processos com um determinado nome
 <nome>
 -u <user> | -g <group> 
$ top lista os processos por ordem de consumo de recursos
 -u <user> -p <pid's>
 
Comandos avançadosComandos avançados
Exercícios de fixação
1) Identifique os seguintes componentes da sua estação de trabalho:
 Processador, placa de vídeo, placa de rede e placa de som.
2) Inicie o Broffice Writer, por linha de comando, com prioridade 15. Depois altere essa 
prioridade para -5. Demonstre esse processo com alguma ferramenta que permita 
verificar essa alteração.
3) Inicie um processo com o comando sleep (200 segundos) , faça a seguinte sequência 
de comandos:
 a) pare a execução do comando após ter iniciado: 
 b) liste os processos parados: 
 c) reinicie o comando em segundo plano:
 d) finalize o processo enviando um sinal SIGKILL para ele: 
4) Identifique se na inicialização foi encontrada uma interface de rede (eth0,1), caso 
positivo verifique se o link de rede está “up”.
 
Comandos avançadosComandos avançados
Exercícios de fixação
5) Liste todos os recursos de memória (arquivos/bibliotecas carregadas) utilizados 
durante a execução do evince (se for necessário instale);
6) Liste informações detalhadas sobre os seguintes arquivos e seus sistemas de 
arquivos: /etc/passwd, /dev/cdrom, /proc/cpuinfo
7) Crie um arquivo com 200 MB, formate com o sistema de arquivos xfs. Faça a 
montagem no ponto /mnt e com opção de escrita, copie alguns arquivos nele, 
desmonte. Realize uma checagem para verificar sua integridade.
8) Como criar um backup com o comando tar de todos os arquivos do diretório /home, 
encerrar o terminal e garantir que o comando continue sendo executado?
9) Como descobrir qual o caminho absoluto para o comando locate?
10) Indique uma forma de sabermos se um pendrive foi reconhecido no barramento 
USB. 
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
 Não é necessário declarar uma variável em Shell Script, na 
atribuição não deve-se utilizar espaços e uma variável pode receber 
vários tipos de dados.
$ valor=1
$ string=”expressão $USER” # reconhece o caracter especial $
$ string='expressão $USER' # não reconhece caracteres especiais
$ string=$”expressão” # reconhece \t \n \a, etc...
$ kernel=`uname -r`
$ kernel=$(uname -r)
$ soma=$((5+8))
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Exemplos:
$ nome=Chico
$ idade=6
$ echo O $nome tem $idade anos.
O Chico tem 6 anos.
$ joana=30
$ beth=50
$ echo A soma das idades de Beth e Joana é de $(($joana+$beth)) anos.
A soma das idades de Beth e Joana é de 80 anos.
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Exemplos:
#Efetua um cálculo matemático simples.
echo -e “2 x 3 = $((2*3))”
echo -e “(5 + 3)/2 = $(((5+3)/2))”
echo -e “4 - 2 = $((4-2))”
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Exemplos:
# Lista de Usuários
USERLIST=`cat /etc/passwd | awk -F: '{print $1}'`
echo $USERLIST
1) Levando em consideração o exemplo abaixo, complete as demais 
variáveis:
IP=$(/sbin/ifconfig eth0 | grep "inet end" | awk -F" " '{print $3}')
MASK=
MAC=
GW=
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Atribuindo valor a uma variável com o comando read:
 $ read -p “Informe seu nome:” NOME
 Maria
 $ echo $NOME
 Maria
Recebendo a informação de uma forma elegante: Dialog
 nome=$( /usr/bin/dialog --stdout --inputbox 'Digite seu nome:' 0 0 )
 echo "O seu nome é: $nome"
 
Tipos de variáveis e atribuição
 Recebendo a informação de uma forma elegante: Dialog
 export DIALOG=$(which dialog)
 # Entrada de dados
 NOME=$( $DIALOG --stdout --inputbox 'Digite seu nome:' 0 0 )
 echo "O seu nome é: $NOME"
 # Confirmação 
 $DIALOG --yesno 'Deseja continuar?' 0 0
 echo "$?"
 # Mensagem de aviso
 $DIALOG --title "Aviso" --msgbox “Não faça isso!” 0 0
 # Menu
 OPC=$(dialog --stdout --menu "Selecione uma opção: " 0 0 5 1 "Pera" 2 "Uva" 3 
"Maçã" 4 "Abacaxi" 5 "Abacate")
 echo $OPC 
 
Tipos de variáveis e atribuição
 Recebendo a informação de uma forma elegante: Zenity
 export ZENITY=$(which zenity)
 # Entrada de dados
 NOME=$($ZENITY --entry --title "NOME" --text "Digite seu nome: ")
 echo "O seu nome é: $NOME"
 # Confirmação 
 $ZENITY --question --title "YES / NO" --text "Tem certeza?"
 echo "$?"
 # Mensagem de aviso
 $ZENITY --info --title "CUIDADO" --text "FUJA. ESSA MULHER TEM DONO."
 $ZENITY --notification --title "FUJA" --text "Cuidado. Essa mulher tem dono."
 # Menu
 OPC="$(zenity --list --column "Selecione uma opção: " --title="FRUTAS" "Abacaxi" 
"Banana" "Morango" "Uva" "Sair")"
 echo $OPC 
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Expansão de Strings
${#var} - Retorna o tamanho da string
eval $var - Executa o conteúdo de $var
${!texto*} - Retorna os nomes de variáveis começadas por 'texto'
${var:N:tam} - Retorna 'tam' caracteres à partir da posição 'N'
${var#texto} - Corta 'texto' do início da string
${var%texto} - Corta 'texto' do final da string.
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
SubString
$ SUBSTR=”meusapato”
$ echo ${SUBSTR:$[3]}
sapato
$ echo ${SUBSTR:$[-6]}
sapato
$ echo ${SUBSTR:$[0]:$[3]}
meu
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
$ SUBSTR=”Meu sapato velho. Meu sapato novo.”
Substituição de Strings
$ echo ${SUBSTR/sapato/carro} #Substitui uma vez
Meu carro velho. Meu sapato novo.
$ echo ${SUBSTR//sapato/carro} #Substitui todas as ocorrências
Meu carro velho. Meu carro novo.
O bom e velho sed
$ echo $SUBSTR | sed "s/sapato/carro/"#Substitui uma vez
$ echo $SUBSTR | sed "s/sapato/carro/g" #Substitui todas
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Array em Bash
 
Quando devo usar?
Devemos usar arrays nas seguintes situações:
 1. Quando lidamos com muitos dados do mesmo tipo.
 2. Quando esses dados são correlacionados.
 3. Quando precisamos trabalhar com esses dados em loops.
 4. Quando precisamos de índices para trabalhar nos dados.
 5. Quando queremos evitar a fadiga.
 6. Encontrar coisas rapidamente. 
Exemplo de uso: em lista de cidades, lista de alunos, lista de itens...
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Array em Bash
 
1) Iniciando um array:
 $ array=(valor1 valor2 valor3)
2) Vamos a segunda maneira de se criar um array:
 $ array2[0]='valor1'
 $ array2[1]='valor2'
 $ array2[2]='valor3'
 Obs.: Acima temos um array com três valores, internamente o shell 
armazena essa estrutura dessa maneira:
 $ array=([0]="valor1" [1]="valor2" [2]="valor3")
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Array em Bash
3) Listar todos os elementos de um array:
 $ echo ${array[*]}
 
4) Contar os elementos de um array:
 $ echo ${#array[*]}
 
5) Contar tamanho de um elemento do array:
 $ echo ${#array[<valor>]}
 
6) Eliminar um elemento do array:
 $ unset array[valor]
 
7) Eliminar um array:
 $ unset array
 
Tipos de variáveis e atribuiçãoTipos de variáveis e atribuição
Array - Exemplo de uso
 
$ LISTA=("Curitiba" "São Paulo" "Rio de Janeiro" "Florianópolis" "Porto Alegre")
$ echo ${LISTA[3]}
Florianópolis
$ echo ${LISTA[1]}
São Paulo
Observe que a lista inicia-se pela posição zero:
0 Curitiba
1 São Paulo
2 Rio de Janeiro
...
 
Variáveis de AmbienteVariáveis de Ambiente
LANG = Codificação do terminal e linguagem padrão
HOME = Diretório home do usuário logado
USER / USERNAME = Nome do usuário logado
PWD = Diretório corrente
PATH = Caminhos pelos quais o shell procurará os comandos que você 
tentar executar
HOSTNAME = Nome da estação de trabalho
http_proxy = Proxy da rede para conexões externas
? = Valor de retorno do ultimo comando executado
 
Variáveis de AmbienteVariáveis de Ambiente
PS1 = Formata o prompt padrão
RANDOM = Fornece um número inteiro de forma aleatória
DISPLAY = Id do display utilizado pelo servidor X na corrente sessão
HISTFILE = Arquivo que irá armazenar o histórico dos comandos
HISTFILESIZE = Tamanho máximo do arquivo com histórico
…
Dica para ver todas as váriaveis:
$ echo $<tab>
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Shell é o ambiente.
Um Shell Script é formado por um conjunto de comandos que serão 
executados a partir de um arquivo de texto.
 Para facilitar o entendimento sobre Shell Script teremos que 
analisar vários fatores que irão contribuir para sua correta execução:
 1) FHS – Arquivos e diretórios
 2) Sistema de permissões
 3) Filtros de texto
 4) Editores de texto
 5) Comandos básicos do Shell
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
FHS – Arquivos e diretórios
http://www.pathname.com/fhs/
 
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
FHS – Arquivos e diretórios
http://www.pathname.com/fhs/
/ – É na raiz que ficam todos os diretórios do GNU/Linux;
/bin – Contém os comandos essenciais para o funcionamento do sistema;
/boot – Arquivos necessários à inicialização do sistemae os arquivos do gerenciador de boot;
/dev – Armazena todos os arquivos-dispositivos, chamados de nós de dispositivos;
/etc – Arquivos de configuração do sistema da máquina local;
/lib – Biblilotecas compartilhadas e módulos do kernel;
/media – Ponto de montagem para mídias removíveis;
/mnt – Diretório usado como ponto de montagem de sistema de arquivos;
/opt – Normalmente, é utilizado por programas que foram instalados com o sistema já em 
funcionamento, e precisam de um espaço maior para serem armazenados (ex. OpenOffice);
/var – Contém arquivos de dados variáveis;
/sbin – Comandos utilizados para inicializar, reparar, restaurar e/ou recuperar o sistema;
/tmp – Utilizado para armazenar arquivos temporários;
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
FHS – Arquivos e diretórios
http://www.pathname.com/fhs/
/usr - Armazena dados compartilhados, somente-leitura;
/home – É o diretório que mantém os dados dos usuários;
/root – Diretório pessoal do adminsitrador (root) do sistema;
/proc – Diretório virtual, mantido pelo kernel onde encontramos a configuração atual do sistema;
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Sistema de permissões
Tipos de permissões
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Sistema de permissões
Tipos de permissões
aluno@gerds123:~/curso$ ls ­l
total 29604
­rw­r­­r­­ 1 aluno cstr 2007101 Jan  5 10:58 Curso­Gnome.pdf
drwxrwxrwx 5 aluno cstr      44 Jan 12 14:46 Debian­Desktop
­rwxr­xr­x 1 aluno cstr 5591278 Jan 12 15:24 Desktop.sh
­rw­­­­­­­ 1 aluno cstr 1314131 Jan  4 09:12 Expresso.pdf
drwxrwxrwx 3 aluno cstr      19 Jan 12 14:46 Pessoa
­rw­r­­r­­ 1 aluno cstr 6811510 Jan 13 10:50 SL­2.odp
­rw­r­­r­­ 1 aluno cstr 6264237 Jan 12 16:01 SL.odp
drwxrwxrwx 3 aluno cstr      17 Jan 12 14:46 Totais
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Sistema de permissões
Permissões especiais
SUID
Se este bit estiver ligado em um arquivo executável, isso indica que que ele vai rodar 
com as permissões do seu dono (o proprietário do arquivo) e não com as permissões do 
usuário que o executou.
OBS: Só tem efeito em arquivos executáveis.
SGUID
Faz o mesmo que o SUID, mas agora o arquivo executado vai rodar com as permissões 
do grupo do arquivo. Se aplicado a um diretório, força os arquivos/diretórios criados 
dentro dele a ter o mesmo grupo do diretório pai, ao invés do grupo primário do usuário 
que o criou.
STICKY
Se este bit for ativado, faz com que arquivos criados em um determinado diretório só 
possam ser apagados por quem o criou (dono) ou pelo super-usuário do sistema. Um 
exemplo de uso do STICKY é o diretório /tmp. 
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Sistema de permissões
Utilitários
# chmod
 Sintaxe: chmod <permissões> <arquivo/diretório>
 Muda as permissões de um arquivo ou diretório. Existem várias formas de se alterar 
 as permissões, escolha a que mais lhe agrada.
# chown
 Sintaxe: chown <usuário> <arquivo/diretório> OU
 Sintaxe: chown <usuário>.grupo <arquivo/diretório>
 O comando chown permite que se altere o usuário proprietário de um arquivo ou
 diretório. Possui a possibilidade de alterar o grupo junto ao proprietário.
# chgrp
 Sintaxe: chgrp <grupo> <arquivo/diretório>
 Muda o grupo do qual um arquivo ou diretório faz parte.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Sistema de permissões
Utilitários
# umask
 Sintaxe: umask <valor>
 Define uma máscara de permissão pela qual os novos arquivos e diretórios serão 
criados.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Exercicios de Fixação
1) Foi determinado que os usuários comuns (não root) não deverão executar o 
comando df. Como retirar a permissão do comando df para que esses usuários 
não possam executá-lo?
2) Altere o grupo do arquivo /var/log/lpr.log para lpadmin para que os usuários 
desse grupo possam ler este arquivo.
3) Como fazer para que um diretório compartilhado pelo samba crie arquivos 
fazendo com que ele mantenha as permissões para o grupo de usuários, ou 
seja, a pessoa (com autorização) queexecutar o arquivo (acessar o diretório), 
o fará com se fosse membro do grupo a qual pertence o arquivo.
4) Como definir que um determinado arquivo tenhas as seguintes permissões:
Dono: Ler, Gravar e Executar Grupo: Ler e Gravar Outros: Ler
5) Qual o diretório que mantêm informações do sistema que podem variar 
durante o uso dos recursos (daeom, logs, etc...)?
6) Qual diretório que mantém pontos dinâmicos de montagem de mídias 
removiveis?
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 O Linux possui diversas ferramentas para 
trabalhar e transformar arquivos texto, puros sem 
formatação especial.
 Estas ferramentas são úteis quando estamos 
trabalhando com Scripts, Arquivos de 
Configuração, Arquivos de Log, etc.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
cat - concatenar arquivos, ou entrada padrão, para a saída 
padrão.
 
# cat teste1.txt
# cat teste1.txt teste2.txt > teste 
# cat teste3.txt >> teste 
# cat < texto.txt
# cat texto.txt | wc -l
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
cut - Lê o conteúdo de um ou mais arquivos e tem como saída uma coluna 
vertical
 
Opções
-b numero - Imprime o byte número
-c número - Imprime o caractere número
-d delimitador - Delimitador que separa as colunas
-f número - Imprime a coluna número
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
Exemplos de uso do comando cut:
# ifconfig eth0 | grep 'inet ' | cut -d ':' -f 2 | cut -d ' ' -f 2
# ls -la | cut -c 47-70
# $cut –d : -f 1 /etc/passwd
# cat /etc/hosts | cut –f 2
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
expand - Troca a tabulação dentro dos textos pelo número de espaços. Deixa o 
texto mais fácil sua leitura.
Opções:
-t número - especifica o número de espaço para o tab.
-i - Converte somente no início das linhas
Exemplo de uso:
$ cat LEIAME.TXT
a a a a
a a a a
$ expand -t 1 LEIAME.TXT
a a a a
a a a a
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
fmt - Formata um texto com uma largura específica. Pode remover ou adicionar 
espaços.
Opções:
-w número - Configura a largura desejada para o texto
$ fmt –w 50 texto.txt
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
grep - Procura por linhas/palavras em um arquivo que satisfaça um determinado 
padrão de busca.
Opções:
-i ignora maiúscula e minúscula
-c contar quantas coincidências
-l não mostra a linha encontrada
-v Mostra as linhas não coincidentes
-n Mostra a linha dentro do arquivo
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
Exemplos de uso do grep
$ grep aluno /etc/passwd (Forma não elegante: # cat /etc/passwd | grep aluno)
$ grep aluno /etc/passwd |cut –d : -f 5
$ grep eth0 /proc/net/dev
$ ifconfig eth0 | grep packets
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
head - Mostra as primeiras 10 linhas do início de um texto, ou um número de 
linhas definido pelo usuário.
Opções:
-n número Configura o número de linhas a ser mostrada
$ head –n 20 /etc/passwd
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
tail - Mostra as últimas 10 linhas do fim de um texto, ou um número de linhas 
definido pelo usuário.
Opções:
-n número Configura o número de linhas a ser mostrada
$ tail –n 20 /etc/passwd
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
join - Unes a linhas de ambos os arquivos que tenham um índice comum. 
Usado para criar um banco de dados simples.
Opções:
-j1 número - Escolhe o campo número como índice para o arquivo1
-j2 número - Escolhe o campo número como índice para o arquivo2
-j número -j1 número - Escolhe o campo número como índice para ambos 
arquivos
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Filtros de Texto
 
Exemplo de uso do comando join
Supondo um arquivo com: 
1. GZH-1234
2. HYD-2389
Outro arquivo com:
1. Fiat Uno Mille
2. Audi A3
$ join –j 1 arquivo1 arquivo2
1. GZH-1234 Fiat Uno Mille
2. HYD-2389 Audi A3
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
O poderoso SED
 
 O utilitário “sed” é um editor de streams. Um programa desta natureza, é 
usado para realizar transformações num arquivo de texto ou num pipe (fluxo de 
dados). Sed é bastante útil para fazer trocas de letras, palavras ou linhas 
inteiras de texto. É uma ferramenta largamente utilizada em scripts shell.
sed [opções] [script] [arquivo/pipe]
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
O poderoso SED – exemplos de uso:
 
 $ sed “n” teste.txt
 Imprime o conteúdo do arquivo “teste.txt” na saída padrão (monitor).
 $ sed -n “2,4p” teste.txt
 Imprime da segunda à quarta linha do arquivo “teste.txt” na saída padrão 
(monitor).
 
 $ sed “s/zé/marcius/” teste.txt
 Substituí a primeira ocorrência da string “zé” de cada linha por “marcius”, 
presente no arquivo “teste.txt”.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
O poderoso SED – exemplos de uso:
 
 $ sed -e “2q” -e “s/zé/marcius/” teste.txt
 Processa o arquivo “teste.txt” até o inicio da segunda linha, substituindo a 
primeira ocorrência da string “zé” por “marcius”.
 $sed “s/zé/marcius/2” teste.txt
 Substituí a segunda ocorrência da string “zé” de cada linha, pela string 
“marcius”, presente no arquivo “teste.txt”.
 $sed “/^$/d” teste.txt
 Apaga as linhas em branco do arquivo “teste.txt”.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
O poderoso SED – exemplos de uso:
 
 $ sed “/zé/d” teste.txt
 Apaga as linhas que contenham a string “zé” do arquivo “teste.txt”.
 
 $sed -i “s/samba/rede/” teste.txt
 Substituí a primeira ocorrência da string “samba” de cada linha por “rede”, e 
grava esta alteração no arquivo “teste.txt”.
 
 $ sed “/CPPC/Id” teste.txt > teste_modificado.txt
 Apaga todas as linhas que contenham a string “CPPC”, independentemente 
de maiúsculas e minúsculas, gravando o resultado no arquivo 
“teste_modificado.txt”.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Exercícios de Fixação
 
1) Liste as linhas do arquivo /etc/group em que o usuário aluno esteja presente.
2) Liste todos os usuários do sistema, apresentando na saída do comando 
apenas o nome do usuário e seu respectivo UID.
3) Liste apenas as linhas do /etc/passwd com usuários que iniciem com “a”.
4) Liste apenas as 5 últimas linhas do arquivo /etc/passwd que terminem com a 
expressão “/bin/sh”.
5) Altere a saída do comando lspci para apresentar a seguinte saída para 
placas de vídeo, som e rede: 
# lspci | <xxx | xxx | xxx>
00:14.2 Placa de som: ATI Technologies Inc SBx00 Azalia (Intel HDA)
01:05.0 Placa de Vídeo: ATI Technologies Inc RS690 [Radeon X1200 Series]
02:00.0 Placa de rede: Realtek Semiconductor Co., Ltd. RTL8101E/RTL8102E 
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Editores de texto
cat
nano
gedit
oowriter
Continuar...
Editor escolhido: Vim - Visual Interface Improved
Para obter mais informações sobre VIM consulte: 
http://aurelio.net/vim/vim-basico.txt
 
Trabalhando com arquivos detextoTrabalhando com arquivos de texto
Editores de texto - VIM
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Editores de texto – Executando o VIM
$ vim => Abre o vim vazio, sem nenhum arquivo e exibe a 
tela de apresentação.
$ vim arquivo => Abre o arquivo de nome "arquivo".
$ vim arquivo + => Abre o arquivo de nome "arquivo", com o 
cursor no final do mesmo.
$ vim arquivo +10 => Abre o arquivo de nome "arquivo", com 
o cursor na linha 10.
$ vim arquivo +/Copag => Abre o arquivo de nome "arquivo", 
na primeira ocorrência da palavra "Copag".
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Editores de texto - VIM
No vim temos vários "modos", que são estados do editor.
São eles:
Modo          Tecla   Rodapé          Descrição 
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­  
de Inserção    i  ­­ INSERT ­­    Inserção de texto
de Comandos  <ESC>        Comandos de manipulação de texto
Linha de comando :    :   Comandos de manipulação arquivo 
Visual        v  ­­ VISUAL ­­ Seleção visual de texto
Busca        /       /    Busca de padrões no texto
Reposição    R   ­­ REPLACE ­­   Inserção sobreescrevendo
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Editores de texto – VIM – Modo de comando
:w => Salva o arquivo que está sendo editado no momento.
:q => Sai.
:wq => Salva e sai.
:x => Idem.
ZZ => Idem.
:w! => Salva forçado.
:q! => Sai forçado.
:wq! => Salva e sai forçado.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Editores de texto – VIM – Modo Visual
Entre no modo visual: v
Agora, utilize as teclas direcionais (setas) do teclado, 
para selecionar o texto desejado.
Pressione e cole, utilizando a tecla "p" (paste).
Veja agora como apagar um determinado texto:
Utilizando normalmente as teclas Backspace/Delete, ou 
entrando em modo visual (v) e pressionando a tecla Delete.
Você pode remover até o final de uma palavra, utilizando: 
dw
Pode também remover até o final de uma frase: d$
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Criando o primeiro arquivo de Shell Script
$ vim helloword.sh
   #!/bin/bash
   VAR=“Hello Word!”
   echo $VAR
$ chmod +x helloword.sh
$ ./helloword.sh
Hello Word!
$bash +xv helloword.sh     # Execução em modo de debug.
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Exercícios de Fixação
 
Crie um shell script com a seguinte saída:
 
­­­­­­­ Descrição do sistema ­­­­­­­­­­­­­
Sistema operacional: $OS
Processador: $CPU
Clock da CPU: $CLOCK
Memória da Máquina: $MEM
Placa de vídeo: $VGA
Placa de Rede: $NET
Placa de Som: $SOUND
Esta máquina já está no ar: $UPTIME
 
Trabalhando com arquivos de textoTrabalhando com arquivos de texto
Exercícios de Fixação
 
  Faça um script que liste todos os executáveis que estão 
no seu PATH, ordene a saída, e grave em um arquivo chamado 
executaveis.txt.  Não  deixe  aparecer  nenhuma  mensagem  de 
erro.
 
Variáveis especiaisVariáveis especiais
Variável Parâmetros Posicionais
 $0 Parâmetro número 0 (nome do comando ou função)
 $1 Parâmetro número 1 (da linha de comando ou função)
 ... Parâmetro número N ...
 $9 Parâmetro número 9 (da linha de comando ou função)
 ${10} Parâmetro número 10 (da linha de comando ou função)
 ... Parâmetro número NN …
 $# Número total de parâmetros da linha de comando ou função
 $* Todos os parâmetros, como uma string única
 $@ Todos os parâmetros, como várias strings protegidas
 $$ Número PID do proc esso atual (do próprio script)
 $? Código de retorno do último comando executado
 
Operadores do ShellOperadores do Shell
Operadores Aritméticos Operadores Relacionais
+ Adição == Igual
- Subtração != Diferente
* Multiplicação > Maior
/ Divisão >= Maior ou Igual
% Módulo < Menor
** Exponenciação <= Menor ou Igual
 
Operadores do ShellOperadores do Shell
Operadores de Atribuição
 = Atribui valor a uma variável 
 += Incrementa a variável por uma constante 
 -= Decrementa a variável por uma constante
 *= Multiplica a variável por uma constante
 /= Divide a variável por uma constante
 %= Resto da divisão por uma constante
 ++ Incrementa em 1 o valor da variável
 – Decrementa em 1 o valor da variável
 
Operadores do ShellOperadores do Shell
Operadores Lógicos Operadores de BIT
&& E lógico (AND) == Igual
|| OU lógico (OR) != Diferente
* Multiplicação > Maior
/ Divisão >= Maior ou Igual
% Módulo < Menor
** Exponenciação <= Menor ou Igual
 
Estrutura de decisãoEstrutura de decisão
if TESTE
then
 comandos
elif TESTE
 comandos
else
 comandos
fi
 Caso o comando seja executado com sucesso serão executados os 
comandos do bloco then.
 
Estrutura de decisãoEstrutura de decisão
if [ $opc -eq 1 ]
then
 inclusao
elif [ $opc -eq 2 ]
then
 alteracao
elif [ $opc -eq 3 ]
then
 exclusao
elif [ $opc -eq 4 ]
then
 exit
else
 echo “Digite uma opção entre 1 e 4.”
fi
 
Estrutura de decisãoEstrutura de decisão
Podemos associar a estrutura de decisão com as opções do comando test:
OPERAÇÃO COM ARQUIVOS:
-e arq verifica se o arquivo existe
-s arq verifica se o arquivo existe e tem tamanho maior que zero
-f arq verifica se ele é um arquivo
-d dir verificar se ele é um diretório
-z arq verifica se o arquivo existe e tem tamanho zero
-r arq quero saber se o usuário que esta executando o shell script pode ler o
arquivo
-w arq quero saber se pode alterar o arquivo
-x arq quero saber se ele consegue executar o arquivo
... ver $ man teste
 
Estrutura de decisãoEstrutura de decisão
Podemos associar a estrutura de decisão com as opções do comando test:
OPERAÇÃO COM STRING
-n string se é maior que zero
-z string se igual a zero
OPERAÇÃO COM INTEIROS
n1 -eq n2 – igual
n1 -gt n2 – maior
n1 -lt n2 – menor
... Ver $man test
 
Estrutura de decisãoEstrutura de decisão
Exercícios utilizando a estrutura de decisão (if):
1) Crie um shell script que receba dois números inteiros (entre 0 e 100) e 
informe se o primeiro é maior, menor ou igual ao segundo;
2) Escreva um script que receba um arquivo por parâmetro, com caminho 
absoluto, e informe se o arquivo existe, se tem tamanho maior que zero e se 
for um diretório liste seu conteúdo; 
3) Crie um programa que recebe um comando simples, por parâmetro, 
verifique se ele realmente existe no sistema (informando sua ausência) e 
informe o caminho absoluto do seu binário. No final pergunte ao usuário se 
ele deseja ver o manual on-line do comando recebido. (considere um comando 
válido os comandos encontrados pelo utilitário which)
 
Estrutura de decisãoEstrutura de decisão
É uma estrutura de decisão, ainda mais sofisticada que “if”. A seguir, a 
sintaxe de utilização:
 case VARIÁVEL in
 VALOR1)
 comandos;;
 VALOR2)
 comandos;;VALOR3)
 comandos;;
 *)
 comandos;;
 esac
 
Estrutura de decisãoEstrutura de decisão
HORA=`date +%H`
case $HORA in
 0?|1[01]) echo "Bom dia!" ;;
 1[2-8]) echo "Boa tarde!" ;;
 19|2?) echo "Boa noite!";;
 *) echo "Erro ao solicitar a hora
esac
 
Estrutura de decisãoEstrutura de decisão
Exercícios utilizando a estrutura de decisão (case):
1) Crie um shell script que limpe a tela, forme um menu solicitando a idade do 
usuário, e exiba as seguintes informações de acordo com a idade informada:
1-13 Você é uma Criança, vá brincar.
14-17 Adolecente, vá estudar.
18-60 Adulto, vá trabalhar.
61-99 Apto para o clube da melhor idade!
Qualquer outro valor: “Idade inválida!”
 
LaçosLaços
# lista os nomes a partir de uma lista criada em uma variável
nome="joao francisco decio"
for i in $nome
do
 echo $i
 sleep 1
done
# lista as linhas de um arquivo, aguardando 1 segundo entre uma linha e outra
for i in `cat arquivo`
do
 echo $i
 sleep 1
done
 
LaçosLaços
# lista o conteúdo do diretório atual
for i in * # o caracter "*" irá trazer o conteudo do diretório corrente
do
 echo $i
 sleep 1
done
# Lista números de 1 a 100, aguardando 1 segundo entre um número e outro.
for i in $(seq 1 100)
 do
 echo $i
 sleep 1
done
 
LaçosLaços
# Lista números de 1 a 9
for ((i=1; i<=9; i++))
do
 echo -n “$i “
done
# Lista o conteúdo de um array
array=(1 2 3 4 5 6 7 8 9 10)
for i in ${array[*]}
do
 i=$[i-1]
 echo ${array[$i]}
done
 
LaçosLaços
Exercícios de Fixação utilizando a estrutura de repetição (for):
1) Verifique no sistema quantos usuários existem, quantos são usuários de 
sistema (UID abaixo de 1000) e quantos são usuários criados para uso (UID 
igual ou acima de 1000). Informe quantos usuários utilizam o bash como shell, 
quantos utilizam sh e quantos estão bloqueados para uso com shell (/bin/false).
2) A partir de um diretório, passado por parâmetro, escrever um script que 
renomeia todos os arquivos de uma determinada extensão (parâmetro) para 
outra extensão.
Exemplo: Todos os arquivos .doc do diretório /tmp alterados para .txt
 $ ./renomeia.sh /tmp doc txt
 
LaçosLaços
# Repete a informação enquanto a variável $inicio seja menor que a variável $fim
inicio=1
fim=10
while [ $inicio -lt $fim ]
do
 echo "Valor inicial é menor que o final: $inicio $fim"
 inicio=$((inicio+1))
done
echo "Valor inicial é igual ao valor final: $inicio $fim"
 
LaçosLaços
# Lê o conteúdo de um arquivo, linha a linha, até o final.
arq=$1
i=0
echo " ------------- Inicio do arquivo. ------------- "
cat $arq | while read LINE
do
 i=$((i+1))
 echo “Linha $i: $LINE”
done
echo " ------------- Final do arquivo. ------------- "
 
LaçosLaços
# Repete o bloco de comandos enquanto a condição não é satisfeita
# Ou sejam enquanto o usuário cabrito não se logar no sistema o laço não será 
# desfeito.
until who | grep cabrito
do
 clear 
 echo "Usuario cabrito nao se logou no sistema"
 sleep 2
done
date "+ O usuario cabrito logou-se no sistema em %d/%m/%Y as %H:%M".
 
LaçosLaços
Exercícios utilizando a estrutura de repetição (while/until):
1) Crie um shell script que monitore o tamanho de um diretório, e passar dos 
10 MB o script irá enviar um aviso de LOG para o sistema para que o 
administrador receba o alerta da hora/minuto que isso ocorreu.
2) Escreva um script que monitore o tamanho de um arquivo, se o arquivo 
tiver um tamanho superior a 50 linhas o script irá enviar um aviso de LOG 
para o sistema para que o administrador receba o alerta da hora/minuto que 
isso ocorreu.
 
FunçõesFunções
 Funções são aglomerados de comandos que podem ser definidos para uso
posterior em qualquer parte do código. Praticamente todas as linguagens 
usam funções que ajudam a organizar o código. Vejamos a sintaxe de uma 
função:
 nome_da_funcao() {
 comandos
 }
 O corpo das funções devem construídos sempre antes de serem utilizados, 
caso contrário, o sistema retornará um erro do tipo “command not found”, 
que significa que a função em questão não pode ser encontrada.
 
FunçõesFunções
function entrada(){
 read -p "Valor inicial: " inicio
 read -p "Valor final: " fim
}
entrada
while [ $inicio -ge $fim ]
do
 echo "Valor inicial eh maior que o final."
 entrada
done
for i in $(seq $inicio $fim)
do
 echo "$i"
done
 
Expressões RegularesExpressões Regulares
 “Expressão regular é um método formal de se especificar um 
padrão de texto”
 O uso de expressões regulares torna mais rápida a procura pela 
informação desejada, quanto mais refinada for a sua construção, mais 
preciso e rápido será o resultado.
 
Expressões RegularesExpressões Regulares
O que podemos validar com uma expressão regular?
● Data
● Horário
● Endereço IP
● Endereço de email
● Endereço de Internet
● Número de Telefone, RG, CPF, cartão de crédito . . . 
● Dados que estejam no começo ou no final da linha.
 
Expressões RegularesExpressões Regulares
Metacaracteres
. ? * + ^ | [ ] { } ( ) \
 . - Um caracter qualquer
[....] - Lista de caracteres permitidos
[^...] - Lista de caracteres não permitidos
 ? - Zero ou um caracter
 * - Zero, um ou mais caracteres
 + - Um ou mais
{n,m} – De n até m
 ^ - Início da linha
 $ - Fim da linha
 
Expressões RegularesExpressões Regulares
Metacaracteres
. ? * + ^ | [ ] { } ( ) \
 \b - Início ou fim de uma palavra
 \c - Torna literal o caractere c
 | - Ou um ou outro
(…) - Delimita um grupo
\1...\9 – Texto casado com os grupos 1...9
 
Expressões RegularesExpressões Regulares
Exemplos de uso de lista
 
n[ãa]o não, nao
[Tt]eclado teclado, Teclado
e[xs]tendido estendido, extendido
12[:. ]45 12:45, 12.45, 12 45
 
Exemplos de uso de lista
 
n[ãa]o não, nao
[Tt]eclado teclado, Teclado
e[xs]tendido estendido, extendido
12[:. ]45 12:45, 12.45, 12 45
 
Expressões RegularesExpressões Regulares
Classes POSIX
 Posix é um padrão internacional que define classes de caracteres.
 
 Exemplos de uso:
 Classe POSIX Significado
  [:upper:]    Letras maiúsculas [A­Z]
  [:lower:]    Letras minúsculas [a­z]
  [:alpha:]    Letras maiúsculas/minúsculas [A­Za­z]
  [:alnum:]    Letras Letras e Números [A­Za­z0­9]
  [:digit:]    Números [0­9]
  [:blank:]    Espaço e TAB [ \t]
  .
  .
  .
 
Expressões RegularesExpressões Regulares
Exemplo de uso de uma expressão regular
#!/bin/bash
a=­10                     # zerando a contagem
while [ $a ­lt 350 ]      # limitando a amostragem ate 350
do echo $a |
   egrep ­x '((1[0­9]|[1­9]?)[0­9]|2([0­4][0­9]|5[0­5]))'
   a=$((a+1))             # incrementan a contagem
done
      Neste  exemplo  a  variável  $a  recebe  números  de  ­10  a 
349,  mas  somente  mostra  na  tela  valores  de  0  a  255. 
Números típicos usados em um endereço IP.
 
Expressões RegularesExpressões Regulares
Exercício de fixação
      Com  base  no  exemplo  dado  escreva  um  shell  script  que 
receba um endereço IP e informe se é um endereço válido ou 
não.
$ ValidaIP.sh 10.10.10.102
Endereço IP 10.10.10.102 é um endereço Ipv4 válido.
$ ValidaIP.sh 10.10.10.266
O endereço 10.10.10.266 não é um endereço Ipv4 válido.
 
Expressões RegularesExpressões Regulares
Classes POSIX
 Posix é um padrão internacional que define classes de caracteres.
 
 Exemplos de uso:
 Classe POSIX Significado
  [:upper:]    Letras maiúsculas [A­Z]
  [:lower:]    Letras minúsculas[a­z]
  [:alpha:]    Letras maiúsculas/minúsculas [A­Za­z]
  [:alnum:]    Letras Letras e Números [A­Za­z0­9]
  [:digit:]    Números [0­9]
  [:blank:]    Espaço e TAB [ \t]
  .
  .
  .
 
Shell Script – Exercícios de FixaçãoShell Script – Exercícios de Fixação
Estudo dirigido
  Com base nos conhecimentos apresentados e a fim de fixar 
é  proposto  uma  lista  de  exercícios  a  ser  entregue  até  o 
dia da prova. Poderão ser aproveitadas as aulas restantes.
    Esta  lista  terá  peso  3.0  para  avaliação  do  bimestre. 
Para  obtenção  da  nota  total  todos  os  exercícios  deverão 
estar  completos,  sem  erros  de  execução,  e  seus  códigos 
copiados para um trabalho impresso entregue em mãos.
 
ReferênciasReferências
[ 1 ] JARGAS, Aurélio Marinho. Expressões regulares: uma abordagem 
divertida. São Paulo: Novatec Editora, 2008. 2a ed. rev. e ampl.
[ 2 ] NEVES, Júlio César. Curso de Shell Script - Papo de Botequim. 
Revista Linux Magazine. Edição 11. Agosto 2005.
[ 3 ] PRITCHARD; PESSANHA; STANGER; DEAN; LANGFELDT. Certificação 
Linux LPI. Alta Books. 2007.
[ 4 ] RIBEIRO, Uirá. Certificação Linux. Axcel Books. 2004.
 
Atribuição-Compartilhamento pela mesma licença 2.5
(http://creativecommons.org/licenses/by-sa/2.5/deed.pt)
 Você pode:
● copiar, distribuir, exibir e executar a obra
● criar obras derivadas
● fazer uso comercial da obra
 Sob as seguintes condições:
Atribuição. Você deve dar crédito ao autor original, da forma especificada pelo autor 
ou licenciante.
Compartilhamento pela mesma Licença. Se você alterar, transformar, ou criar outra 
obra com base nesta, você somente poderá distribuir a obra resultante sob uma licença 
idêntica a esta.
● Para cada novo uso ou distribuição, você deve deixar claro para outros os termos da licença 
desta obra.
● Qualquer uma destas condições podem ser renunciadas, desde que Você obtenha permissão do 
autor.
Qualquer direito de uso legítimo (ou "fair use") concedido por lei, ou qualquer outro direito protegido 
pela legislação local, não são em hipótese alguma afetados pelo disposto acima.
Este é um sumário para leigos da Licença Jurídica
(na íntegra: http://creativecommons.org/licenses/by-sa/2.5/br/legalcode).
Termo de exoneração de responsabilidade: 
http://creativecommons.org/licenses/disclaimer-popup?lang=pt
	Slide 1
	Slide 2
	Slide 3
	Slide 4
	Slide 5
	Slide 6
	Slide 7
	Slide 8
	Slide 9
	Slide 10
	Slide 11
	Slide 12
	Slide 13
	Slide 14
	Slide 15
	Slide 16
	Slide 17
	Slide 18
	Slide 19
	Slide 20
	Slide 21
	Slide 22
	Slide 23
	Slide 24
	Slide 25
	Slide 26
	Slide 27
	Slide 28
	Slide 29
	Slide 30
	Slide 31
	Slide 32
	Slide 33
	Slide 34
	Slide 35
	Slide 36
	Slide 37
	Slide 38
	Slide 39
	Slide 40
	Slide 41
	Slide 42
	Slide 43
	Slide 44
	Slide 45
	Slide 46
	Slide 47
	Slide 48
	Slide 49
	Slide 50
	Slide 51
	Slide 52
	Slide 53
	Slide 54
	Slide 55
	Slide 56
	Slide 57
	Slide 58
	Slide 59
	Slide 60
	Slide 61
	Slide 62
	Slide 63
	Slide 64
	Slide 65
	Slide 66
	Slide 67
	Slide 68
	Slide 69
	Slide 70
	Slide 71
	Slide 72
	Slide 73
	Slide 74
	Slide 75
	Slide 76
	Slide 77
	Slide 78
	Slide 79
	Slide 80
	Slide 81
	Slide 82
	Slide 83
	Slide 84
	Slide 85
	Slide 86
	Slide 87
	Slide 88
	Slide 89
	Slide 90
	Slide 91
	Slide 92
	Slide 93
	Slide 94
	Slide 95
	Slide 96
	Slide 97
	Slide 98
	Slide 99
	Slide 100
	Slide 101
	Slide 102
	Slide 103
	Slide 104
	Slide 105
	Slide 106
	Slide 107
	Slide 108
	Slide 109
	Slide 110
	Slide 111
	Slide 112
	Slide 113
	Slide 114
	Slide 115
	Slide 116
	Slide 117
	Slide 118
	Slide 119
	Slide 120
	Slide 121
	Slide 122
	Slide 123
	Slide 124
	Slide 125
	Slide 126
	Slide 127
	Slide 128
	Slide 129
	Slide 130
	Slide 131
	Slide 132
	Slide 133
	Slide 134
	Slide 135
	Slide 136
	Slide 137
	Slide 138
	Slide 139
	Slide 140
	Slide 141
	Slide 142

Outros materiais