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
rwrr 1 aluno cstr 2007101 Jan 5 10:58 CursoGnome.pdf
drwxrwxrwx 5 aluno cstr 44 Jan 12 14:46 DebianDesktop
rwxrxrx 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
rwrr 1 aluno cstr 6811510 Jan 13 10:50 SL2.odp
rwrr 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 [AZ]
[:lower:] Letras minúsculas [az]
[:alpha:] Letras maiúsculas/minúsculas [AZaz]
[:alnum:] Letras Letras e Números [AZaz09]
[:digit:] Números [09]
[: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[09]|[19]?)[09]|2([04][09]|5[05]))'
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 [AZ]
[:lower:] Letras minúsculas[az]
[:alpha:] Letras maiúsculas/minúsculas [AZaz]
[:alnum:] Letras Letras e Números [AZaz09]
[:digit:] Números [09]
[: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