0% acharam este documento útil (0 voto)
3 visualizações34 páginas

GSOII - Linux

O documento aborda o sistema operacional Unix, incluindo sua história, características, estrutura e funcionamento do kernel e shell. Também discute o Linux, sua licença GPL e os tipos de usuários no sistema. Além disso, apresenta comandos básicos de prompt e exercícios para fixação do conteúdo.

Enviado por

Renato Sousa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
3 visualizações34 páginas

GSOII - Linux

O documento aborda o sistema operacional Unix, incluindo sua história, características, estrutura e funcionamento do kernel e shell. Também discute o Linux, sua licença GPL e os tipos de usuários no sistema. Além disso, apresenta comandos básicos de prompt e exercícios para fixação do conteúdo.

Enviado por

Renato Sousa
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

30/07/2013

Gestão de Sistemas Operacionais II - Unix

Renato Sousa – rjpsousa@[Link]

Conteúdo:

• Sistema Operacional – Conceito


• O UNIX – História
• O UNIX – Características
• O UNIX – Estrutura
• O UNIX – Kernel
• O UNIX - Shell
• O UNIX – Controlador de Processos
• O UNIX – Estrutura de diretórios
• O UNIX – Particularidades
• O Linux

Conteúdo:

• Licenciamento – GPL
• Tipos de usuário
• Comandos de prompt
• Editor VI
• Script Shell Unix

1
30/07/2013

SISTEMA OPERACIONAL - CONCEITO

O que é um sistema operacional?

Um sistema operacional é uma coleção de programas que :


• Inicializam o hardware do computador
• Fornecem rotinas básicas para controle de dispositivos
• Fornecem gerência, escalonamento e interação de
tarefas
• Mantém a integridade de sistema
• Tem todos os comandos básicos que os aplicativos vão
usar, em vez de ter todas estas funções reescritas para
cada aplicativo.

O UNIX - História

Em 1965 formou-se um grupo de


programadores, incluindo Ken Thompson,
Dennis Ritchie, Douglas McIlroy e Peter
Weiner, num esforço conjunto da AT&T
(Laboratórios Bell), da General Electric (GE) e
do MIT (Massachussets Institute of
Technology) para o desenvolvimento de um
sistema operacional chamado Multics.

O UNIX - História

Ainda em 1969, Ken Thompson,


começou a reescrever o Multics num
conceito menos ambicioso, batizado de
Unics, usando linguagem de montagem
(assembly). Mais tarde, Brian Kernighan
rebatizou o novo sistema de Unix.

2
30/07/2013

O UNIX - História

Um marco importante foi estabelecido em


1973, quando Dennis Ritchie e Ken
Thompson reescreveram o Unix, usando a
linguagem C. A linguagem C havia sido
desenvolvida por Ritchie para substituir e
superar as limitações da linguagem B,
desenvolvida por Thompson. O seu uso é
considerado uma das principais razões para a
rápida difusão do Unix.

O UNIX - Características

Características importantes ...


• Sistema operacional multitarefa -
Multitarefa significa executar uma ou mais
tarefas ou processos simultaneamente
• Sistema operacional multiusuário - aquele
capaz de executar, concorrente e
independentemente, várias aplicações
pertencentes a dois ou mais usuários

O UNIX - Características

• Portabilidade – está presente em


diferentes tipos de hardwares.
• Arquitetura aberta.
• Sistema de arquivos independente
dos dispositivos físicos
(montagem).

3
30/07/2013

O UNIX - Estrutura

Aplicações
Shell
Kernel
Sistema de Controle de
arquivos processos

Hardware

O UNIX - Kernel

O kernel do UNIX é responsável


pelo escalonamento de processos,
alocação de espaço em disco,
supervisão da transferência de
dados entre a memória e os dipositivos
periféricos e resolução das solicitações de serviço
dos usuários. O kernel nunca faz nada
diretamente para um usuário; todos os serviços
são fornecidos por programas utilitários que
interfaceam os usuários e o núcleo.

O UNIX - Shell

Um shell Unix é um interpretador de linha de


comando e que fornece uma interface entre o
usuário e o sistema operacional Unix.
Tipos de Shell:
• Bourne shell (sh, bsh e bash - Linux)
• C shell
• Korn shell

4
30/07/2013

O UNIX – Controlador de Processos

Responsável pelo escalonamento dos


processos, que nada mais são do
que programas em execução
num determinado ambiente. Para um dado
programa pode haver zero, um ou vários processos
ativos em um determinado momento. Essa idéia
de que os programas têm vida é conveniente e útil,
já que torna mais fácil pensarmos sobre os
mesmos e controlá-los corretamente.

O UNIX – Controlador de Processos

Entrada padrão Saída padrão


StdIn (Teclado)
Processo StdOut(Vídeo)

Saída
Erro
(Vídeo)
StdErr

O UNIX – Estrutura de diretórios

A árvore de diretórios do Unix é dividida em várias ramificações menores e pode


variar de uma versão para outra. Os diretórios mais comuns são os seguintes:
• / — Diretório raiz - este é o diretório principal do sistema. Dentro dele estão
todos os diretórios do sistema.
• /bin — Contém arquivos, programas do sistema, que são usados com
freqüência pelos usuários.
• /boot — Contém arquivos necessários para a inicialização do sistema.
• /dev — Contém arquivos usados para acessar dispositivos (periféricos)
existentes no computador.
• /etc — Arquivos de configuração de seu computador local.
• /home ou /user — Diretórios contendo os arquivos dos usuários.
• /lib — Bibliotecas compartilhadas pelos programas do sistema e módulos do
núcleo.
• /mnt — Diretório de montagem de dispositivos.

5
30/07/2013

O UNIX – Estrutura de diretórios

• /proc — Sistema de arquivos do núcleo. Este diretório não existe, ele é


colocado lá pelo núcleo e usado por diversos programas.
• /root — Diretório do usuário root.
• /sbin — Diretório de programas usados pelo superusuário (root) para
administração e controle do funcionamento do sistema.
• /tmp — Diretório para armazenamento de arquivos temporários criados por
programas.
• /usr — Contém maior parte de seus programas. Normalmente acessível
somente como leitura.
• /var — Contém maior parte dos arquivos que são gravados com frequência
pelos programas do sistema.

O UNIX – Particularidades

• Um sistema Unix é orientado a arquivos, tudo nele é


arquivo.
• Seus comandos são na verdade arquivos executáveis
(externos), que são encontrados em lugares previsíveis em
sua árvore de diretórios e até mesmo a comunicação entre
entidades e processos é feita por estruturas parecidas com
arquivos.
• O acesso a arquivos é organizado por meio de
propriedades e proteções. Toda a segurança
do sistema depende, em grande parte,
da combinação entre as propriedades e
proteções definidas em seus arquivos e
suas contas de usuários.

O LINUX

O Linux é um sistema operacional baseado em


Unix desenvolvido para a plataforma CICS
(computadores pessoais – PC).
O Linux foi criado em 1991 por Linus Torvalds,
então um estudante finlandês, e hoje é mantido
por uma comunidade mundial de desenvolvedores
(que inclui programadores individuais e empresas
como a IBM, a HP e a Hitachi), coordenada pelo
mesmo Linus, agora um desenvolvedor
reconhecido

6
30/07/2013

LICENCIAMENTO - GPL

O Linux adota a GPL (General Public License), ou


seja, uma licença livre – o que significa, entre
outras coisas, que todos os interessados podem
usá-lo e redistribuí-lo. Aliado a diversos outros
softwares livres, como o KDE, o GNOME, o
Apache, o Firefox, os softwares do sistema GNU
(Unix like) e o [Link].
O Linux pode formar um ambiente moderno,
seguro e estável para desktops, servidores e
sistemas embarcado.

TIPOS DE USUÁRIOS - COMUM

Usuários Comuns - São os usuários que podem se


conectar. Geralmente, esses usuários possuem um
diretório base (/home/usuário, por exemplo) e
podem criar e manipular arquivos em seu
diretório e em outros diretórios, isso quando o
usuário tem permissão para tal. Porém, os
usuários comuns normalmente têm acesso restrito
a arquivos e diretórios na máquina e não podem
executar muitas funções de sistema.

TIPOS DE USUÁRIOS - SISTEMA

Usuários de Sistema - Esses usuários, diferentemente dos usuários


comuns, não se conectam. São contas usadas para propósitos
específicos do sistema e não são de propriedade de uma pessoa em
particular. Exemplos desses usuários são:

•nobody é o responsável, normalmente, por manipular as


solicitações HTTP. Ele não se conecta nem mesmo tem um diretório
base.

•lp normalmente manipula solicitações de impressão (lp significa


"line printer", impressora de linha).

7
30/07/2013

TIPOS DE USUÁRIOS - SUPERUSUÁRIO

Superusuário - O superusuário é
normalmente chamado de "root". Ele tem
controle total sobre todo o sistema
operacional, podendo acessar todos os
arquivos e é geralmente o único que
pode executar certos programas.

Exercícios

1. O que é um sistema operacional?


2. Quem são os dois principais desenvolvedores Unix?
3. Em que linguagem o Unix foi desenvolvida que permitiu
uma grande difusão do sistema operacional?
4. Como o Unix se comporta na administração de tarefas e
usuários? Justifique sua resposta.
5. O que é o Kernel? Qual é a sua função?
6. O que é um Shell? Cite alguns tipos de Shell
7. Para que serve o controlador de processos? Quais são os
tipos de entrada e sáida de um processo?

Exercícios

8. Que tipo de informação tem nos diretórios a seguir:


a) /bin -
b) /dev -
c) /etc -
9. Como funciona o armazenamento de dados no Unix (arquivos,
diretórios, dispositivos etc)?
10.O Unix tem comandos internos de sistema operacional? Justifique.
11.O que é o Linux?
12.O que significa a sigla GPL? Para que serve?
[Link] são os tipos de usuários disponíveis no Unix?

8
30/07/2013

COMANDOS DE PROMPT – Parte I

COMANDOS DE PROMPT

São comandos básicos:


- login/logout/exit – conecta e desconecta sessão
- man – consulta manuais de ajuda
- passwd – altera senha
- who – verifica quem está conectado
- echo – envia uma texto para saída padrão
- ls – lista arquivos e diretórios
- cp – copia arquivos
- rm – remove arquivos
- cat – mostra o conteúdo de um arquivo

COMANDOS DE PROMPT

Login/Logout(exit) – conecta e desconecta


do sistema operacional.

$ login
$ logout
$ exit

9
30/07/2013

COMANDOS DE PROMPT

man – mostra o texto de ajuda de um


comando

$ man passwd
$ man –K password

COMANDOS DE PROMPT

passwd – altera a senha do usuário

$ passwd
Enter old password:
Enter new password:
Confirm new password:
$

COMANDOS DE PROMPT

who – Mostra-nos quem está logado no


sistema

$ who
fcsousa
rpsousa
ctavolla
$

10
30/07/2013

COMANDOS DE PROMPT

Echo – mostra um linha na saída padrão

$ echo Teste
Teste

COMANDOS DE PROMPT

ls – Lista o conteúdo de um diretório,


semelhante ao comando dir do MS-DOS

$ ls
arq_teste.txt
[Link]
gera_dados.sh
$

COMANDOS DE PROMPT

cp – Copia arquivos, como o copy do MS-


DOS

$ cp art_teste.txt [Link]
$ ls [Link]
[Link]
$

11
30/07/2013

COMANDOS DE PROMPT

rm – apaga arquivos, como o del do MS-DOS

$ rm [Link]
$ ls [Link]
Arquivo não encontrado
$

COMANDOS DE PROMPT

cat – Exibe o conteúdo de um arquivo, como


o type do MS-DOS

$ cat arq_teste.txt
Teste
$

Exercícios

1. Para que servem os comandos login/logout/exit?


2. De que forma podemos consultar a sintaxe de um comando Unix?
Cite um exemplo.
3. Qual comando utilizamos para alterar a senha? Podemos utilizar
qualquer string para senha?
4. De que forma eu verifico quais usuários estão conectados no
ambiente? Como eu verifico com qual usuário eu estou conectado?
5. Qual comando utilizamos para mandar um texto para a saída padrão?
Cite um exemplo.

12
30/07/2013

Exercícios

6. Para que serve o comando "ls -l" ?


7. Qual sintaxe de comando você utilizaria para copiar o arquivo
"[Link]" para "[Link]"?
8. Como se deve proceder para remover o arquivo "[Link]"?
9. De que forma eu consigo visualizar na saída padrão o conteúdo
do arquivo "[Link]"?

COMANDOS DE PROMPT – Parte II

COMANDOS DE PROMPT

São comandos básicos:


mkdir - Cria um diretório
rmdir - Exclui um diretório (se estiver vazio)
rm -rf - Exclui um diretório e todo o seu conteúdo (cuidado com
este comando)
cd - Entra num diretório (exemplo: cd docs) ou retorna para HOME
cd / - Muda para o diretório raiz
cd - vai direto para o diretório home do usuário logado
mv – movimenta e renomeia um arquivo
pwd - Exibe o local do diretório atual
tail – mostra XX linhas finais de um arquivo
head – mostra XX linhas iniciais de um arquivo
cut - corta campos da entrada (para selecionar o que se deseja)

13
30/07/2013

COMANDOS DE PROMPT

mkdir – cria um diretório

$ mkdir carros
$ mkdir carros/gm
$ mkdir carros/gm/corsa
$ mkdir moto/yamaha/faser

COMANDOS DE PROMPT

rmdir – Exclui um diretório (se estiver vazio)

$rmdir carros/gm/corsa
$rmdir carros/gm
$rmdir carros

COMANDOS DE PROMPT

rm -rf - Exclui um diretório e todo o seu


conteúdo (cuidado com este comando)

$ rm –rf moto/yamaha/faser

14
30/07/2013

COMANDOS DE PROMPT

cd - Entra num diretório (exemplo: cd docs) ou


retorna para HOME
cd / - Muda para o diretório raiz
cd - vai direto para o diretório home do usuário
logado.

$ cd moto/yamaha/fazer
$ cd ..
$ cd ~

COMANDOS DE PROMPT

mv – renomeia ou movimenta um arquivo


(semelhante ao REN e MOVE do DOS)

$ mv art_teste.txt [Link]
$ ls [Link]
[Link]
$ ls art_teste.txt
Arquivo não encontrado
$

COMANDOS DE PROMPT

pwd - Exibe o local do diretório atual

$ pwd
/home/user01

15
30/07/2013

COMANDOS DE PROMPT

tail - mostra XX linhas finais de um arquivo

$ cat > arq_teste.txt <<!


Carlos
Eduardo
Marcelo
Antonio
!
$ tail – 2 arq_teste.txt
Marcelo
Antonio

COMANDOS DE PROMPT

head - mostra XX linhas iniciais de um arquivo

$ head – 2 arq_teste.txt
Carlos
Eduardo

COMANDOS DE PROMPT

cut - corta campos da entrada (para selecionar o


que se deseja).

$ cut –c1-3 arq_teste.txt


Car
Edu
Mar
Ant

16
30/07/2013

Exercícios

1. Quais comandos serão necessários para criar a seguinte estrutura de


diretórios. \home\user

carros materias

VW FOX POR GRAM

GOL LIT BRASIL

GM CORSA MAT ALG PORTUGAL

CELTA GEO

FIAT UNO HIS BRASIL IMPERIO

IDEA GERAL CLIMA

FORD FIESTA GEO BRASIL HIDRO

KA MUNDO RELEVO

Exercícios

2. Qual comando você utilizaria para criar um arquivo chamado “[Link]”


com o seu nome completo no conteúdo no seu diretório de login?
3. Qual é o comando deve ser utilizado para movimentar o arquivo “nome .txt”
para o diretório “HIDRO”?
4. Qual é a sequencia de comandos que você utilizaria para acessar o diretório
“FOX” e verificar se o diretório acessado é o correto?
5. Qual comando você utilizaria para excluir toda a estrutura do diretório
“GEO”?
6. Execute o seguinte comando a seguir:
$ ls –lRd carros/*/* > [Link]
Pergunta-se:

a) O que faz esse comando?


b) Qual comando você utilizaria para ver as 3 primeiras linhas do arquivo
“[Link]”?
c) Qual comando você utilizaria para ver a ultima linha do mesmo arquivo?

COMANDOS DE PROMPT – Parte III

17
30/07/2013

COMANDOS DE PROMPT

Outros comandos básicos:


chmod - Altera as permissões de arquivos ou diretórios
chown - Altera o dono de arquivos ou diretórios
chgrp – Altera o grupo de arquivos ou diretórios
find - Comando de busca
tr – substitui caracteres
| (pipe) – Filtros / Concatenar execução de comandos
Redirecionamentos “< “, “>” “>>”

COMANDOS DE PROMPT

chmod - Altera as permissões de arquivos ou diretórios

$ chmod 750 [Link]

No exemplo o número 750 está escrito na forma octal. Sua forma binária seria
111101000. O 7 é a forma octal do binário '111' e representa todas as
permissões (leitura, escrita e execução) para o proprietário (user) do arquivo
'[Link]'. O 5 é a forma octal do binário 101 e representa as permissões de
leitura e execução para o grupo, e por fim, 0 representa a negação de todas as
permissões para outros.

Nível Proprietário Grupo Outros Grupos


Permissão rwx rwx rwx
Binário 111 101 000
Octal 7 5 0

COMANDOS DE PROMPT

chmod - Altera as permissões de arquivos ou diretórios

$ chmod 750 [Link]

No exemplo o número 750 está escrito na forma octal. Sua forma binária seria
111101000. O 7 é a forma octal do binário '111' e representa todas as
permissões (leitura, escrita e execução) para o proprietário (user) do arquivo
'[Link]'. O 5 é a forma octal do binário 101 e representa as permissões de
leitura e execução para o grupo, e por fim, 0 representa a negação de todas as
permissões para outros.

Nível Proprietário Grupo Outros Grupos


Permissão rwx rwx rwx
Binário 111 101 000
Octal 7 5 0

18
30/07/2013

COMANDOS DE PROMPT

chmod - Altera as permissões de arquivos ou diretórios

Outra forma é fazer uma associação binária para o octal.

Tipo de Permissão Proprietário


r (Read) 4
w (Write) 2
x (eXecute) 1

chmod [octal do proprientário][octal do grupo][octal de outros grupos] arquivo

Chmod 741 [Link] (-rwx r-- --x) Controle total para o proprietário, leitura para
quem pertence ao mesmo grupo e execução para que não pertencer ao grupo.

COMANDOS DE PROMPT

chown - Altera o dono de arquivos ou diretórios

$ chown renato root arq_teste.txt

COMANDOS DE PROMPT

chgrp – Altera o grupo de arquivos ou diretórios

$ chgrp usuarios2Q usuarios3Q arq_teste.txt

19
30/07/2013

COMANDOS DE PROMPT

find - Comando de busca

$ find –name / arq_teste.txt

COMANDOS DE PROMPT

tr – Substitui caracteres

O comando tr é usado para converter caracteres, ou melhor, trocar


um conjunto por outro.

As opções mais usadas são:


-d : Elimina os caracteres especificados.
-s : Comprime a seqûencia de caracteres repetidos.

Exemplo:
$ cat [Link] | tr a-z A-Z

Neste exemplo o comando tr troca todas as letras de a a z para


maiúsculas.

COMANDOS DE PROMPT

| (pipe) – Filtros / Concatenar execução de comandos

O pipe (em portugês algo como “cano” ou “tubo”), permite juntar


diversos comandos por meio de um im simbolo (| - um barra em pé
no teclado) passando a saída de um comando para a entrada de
outro. Isso facilita muito o trabalho e pode agilizar tarefas .

$ ls –l | tr a-z A-Z

O resultado do comando ls –l será encaminhado para o tr, que


transformará o resultado do ls –l em maiúsculo.

20
30/07/2013

COMANDOS DE PROMPT

Redirecionamentos “< “, “>” “>>”

cmd > arquivo e

cmd 1> arquivo – envia stdout para arquivo

cmd 2> arquivo – envia stderr para arquivo

cmd > arquivo 2>&1 – envia stdout e stderr para arquivo

cmd > arquivo1 2> arquivo2 – envia stdout para arquivo1 e stderr
para arquivo2

cmd < arquivo – recebe stdin de arquivo

COMANDOS DE PROMPT

Redirecionamentos “< “, “>” “>>”

cmd >> arquivo e

cmd 1>> arquivo – adiciona stdout ao final de arquivo

cmd 2>> arquivo – adiciona stderr ao final de arquivo

cmd >> arquivo 2>&1 – adiciona stdout e stderr ao final de arquivo

cdm1 | cmd2 – Envia stdout de cmd1 para cmd2

cmd1 2>&1 | cmd2 – Envia stdout e stderr de cmd1 para cmd2

Exercícios

1. Qual comando você utilizaria para alterar a permissão do


arquivo "[Link]" para que tenha as seguintes características:

a)-rwxr--r--
b)-r--r--r-x
c)-rw-r-x--x
d)---x-w-r--
e)----------

2. Qual comando você utilizaria pra localizar o executável “pwd”


no Unix?
3. Qual sequencia de comandos você utilizaria para substituir
todas as letras do conteúdo do arquivo “[Link]” de minúscula
para maiúscula (atualizando o conteúdo do arquivo)?

21
30/07/2013

Editor VI

Editor VI

- Modos de operação
- Inserção de caracteres
- Exclusão de caracteres
- Substituição de caracteres
- Movimentação de cursor
- Busca de palavras
- Operações com buffers
- Operações de bloco
- Manipulando arquivos

Editor VI

Uma vez iniciado, o editor entra no modo


visualização e aguarda comandos do usuário. Para
entrar no modo edição que permite alterar o
texto, tecle <Insert>.

Enquanto estiver no modo edição o editor não


recebe comandos, para retornar ao modo
visualização tecle <ESC>.

22
30/07/2013

Editor VI

Inserção de caracteres

i - insere texto antes do caractere atual.


I - insere texto no início da linha atual.
a - insere texto após o caractere atual.
A - insere texto no final da linha atual.
o - abre uma linha abaixo da atual e insere texto nela.
O - abre uma linha acima da atual e insere texto nela.

Observação: Para sair do modo de inserção de caracteres,


pressione <ESC>.

Editor VI

Exclusão de caracteres

<DEL> - exclui a letra anterior ao cursor (depende da


configuração).
x - exclui a letra sob o cursor.
nx - exclui as próximas n letras.
dw - exclui o restante da palavra atual (a partir do cursor).
ndw - exclui as n próximas palavras.
dd - exclui a linha atual.
ndd - exclui n linhas a partir da atual.
u - desfazer. Restaura o que foi apagado por último ou apaga o
que foi inserido por último

Editor VI

Substituição de caracteres

s - apaga a letra atual e entra no modo de inserção.


S - apaga o conteúdo da linha atual e entra no modo de
inserção.
r - substitui a letra atual (não entra no modo de
inserção).
R - entra no modo de substituição (sai com <ESC>).
~ - inverte a caixa da letra atual (troca maiúscula por
minúscula e vice-versa).
. - repete a última alteração.

23
30/07/2013

Editor VI

Movimentação de cursor

Em algumas dessas situações as setas também funcionam.

j - uma linha para baixo


k - uma linha para cima
h - um caracter para a esquerda
l - um caracter para a direita
b - volta para o início da palavra.
w - avança para a próxima palavra.
0 - início da linha
$ - fim da linha
nG - vai para a linha n (0G ou G vai para a última linha).
% - usado com parênteses, colchetes e chaves para achar o par correspondente.
+n - vai n linhas para baixo.
-n - vai n linhas para cima.

Editor VI

Busca de palavras

/palavra - procura palavra a partir da posição atual.


?palavra - procura palavra no sentido contrário (na
direção do começo do arquivo).
n - procura próxima ocorrência da última palavra
procurada (na mesma direção em que foi buscada).
# - destaca todas as ocorrências iguais à palavra onde
o cursor está posicionado.

Editor VI

Operações com buffers

yy ou Y - copia a linha inteira.


nyy ou nY - copia n linhas.
ndd - apaga n linhas (a partir da atual). Elas poderão
ser recolocadas com os comandos p e P.
p - coloca após a linha atual a última linha copiada ou
apagada.
P - coloca antes da linha atual a última linha copiada
ou apagada.

24
30/07/2013

Editor VI

Operações de bloco

:'a,'b[operação] - realiza a operação no bloco contido


entre as marcas a e b.
:d - exclui a linha atual (útil como operação de
blocos).
:s/string1/string2/ - substitui string1 por string2.
mx - marca a posição atual como x (pode ser usada
qualquer letra do alfabeto).
`x - vai para a posição previamente marcada como x.

Editor VI

Para ler ou escrever o arquivo (ou parte dele) usam-se


os comandos:

:r arquivo - inserir o conteúdo do arquivo na posição


atual do arquivo que está sendo editado.
:w - salva alterações.
:w abc - grava arquivo com o nome abc.
:q - sai se o arquivo não foi modificado.
:q! - sai descartando quaisquer alterações não
gravadas.
:wq ou ZZ - sai, salvando o arquivo editado.

Unix Shell Script

25
30/07/2013

Unix Shell Script

Vocês aprenderam como utilizar comandos básicos Unix e


como utilizar o editor VI.

O que vamos aprender agora é a linguagem de script


incorporada no sh ou o bash do Unix/Linux. Diversas
pessoas utilizam-se desta linguagem para facilitar a
realização de inúmeras tarefas administrativas no Unix ou
criar seus próprios programas.

Patrick Volkerding, criador da distribuição Slackware, utiliza


esta linguagem para toda a instalação e configuração de sua
distribuição. Você poderá criar scripts para automatizar as
tarefas diárias de um servidor, para efetuar backup
automático regularmente etc.

Unix Shell Script

Interpretadores de comandos são programas feitos


para intermediar o usuário e seu sistema.

Por meio destes interpretadores, o usuário manda


um comando, e o interpretador o executa no
sistema.

Eles são a “Shell” do sistema Unix. Usaremos o


interpretador de comandos bash (Linux). É muito
importante ter uma boa base sobre o conceito de
lógica de programação.

Unix Shell Script

Uma das vantagens destes shell scripts é que eles não


precisam ser compilados, ou seja, basta apenas criar um
arquivo texto qualquer e inserir comandos nele.

Para dar ao arquivo a definição de “shell script” temos que


torná-lo “executável”, utilizando o comando chmod.

Vamos seguir com um pequeno exemplo de um shell script


que mostre na tela:

“Nossa! Estou vivo!”

26
30/07/2013

Unix Shell Script

O simbolo “#” no início da linha indica um comentário.


Neste caso é para identificar em qual shell deve rodar
esse script)

#!/bin/bash
echo 'Nossa! Estou vivo!'

Salve esse arquivo como “[Link]”


Transforme-o em executável usando o seguinte comando
$ chmod 755 [Link]

Para executá-lo, utilize:


$ ./[Link]

Unix Shell Script

Variáveis

Variáveis são caracteres que armazenam dados, uma espécie de atalho.

O bash reconhece uma variável quando ela começa com $, ou seja, a diferença
entre ‘palavra’ e ‘$palavra’ é que a primeira é uma palavra qualquer, e a outra
uma variável.

Para definir uma variável, utilizamos a seguinte sintaxe:

$ variavel=“valor”

O ‘valor’ será atribuído a ‘variável ‘. Valor pode ser uma frase, números, e até
outras variáveis e comandos. O valor pode ser expressado entre as aspas (“”),
apóstrofos (”) ou crases (“). As aspas vão interpretar as variáveis que estiverem
dentro do valor, os apóstrofos lerão o valor literalmente, sem interpretar nada, e
as crases vão interpretar um comando e retornar a sua saída para a variável.

Unix Shell Script

Variáveis especiais

$0 Nome do script que está sendo executado


$1-$9 Parâmetros passados à linha de comando
$# Número de parâmetros passados
$? Valor de retorno do último comando ou de todo o shell script.
(o comando “exit 1″ retorna o valor 1)
$$ Número do PID (Process ID)

27
30/07/2013

Unix Shell Script

test - verificar os tipos de arquivos e comparar os valores

test EXPRESSÃO ou [ EXPRESSÃO ]

onde EXPRESSÃO pode ser

\(Expressão\)
Expressão é verdadeira

! EXPRESSÃO
EXPRESSÃO é falsa

Expressão1-a expressão2
tanto expressão1 e expressão2 são verdadeiras

Expressão1-o Expressão2
expression1 ou expression2 é verdade

[-n] STRING
o comprimento de STRING é diferente de zero

-z STRING
o comprimento de STRING é zero

Unix Shell Script

test - verificar os tipos de arquivos e comparar os valores

String1 = string2
as strings são iguais

String1 ! = String2
as strings não são iguais

INTEIRO1-eq INTEIRO2
INTEIRO1 é igual a INTEIRO2

INTEIRO1 -ge INTEIRO2


INTEIRO1 é maior ou igual a INTEIRO2

INTEIRO1 -gt INTEIRO2


INTEIRO1 é maior do que INTEIRO2

INTEIRO1 -le INTEIRO2


INTEIRO1 é menor ou igual a INTEIRO2

INTEIRO1 -lt INTEIRO2


INTEIRO1 é menor do que INTEIRO2

Unix Shell Script

test - verificar os tipos de arquivos e comparar os valores

INTEIRO1 -ne INTEIRO2


INTEIRO1 não é igual a INTEIRO2

Arquivo1 -ef arquivo2


Arquivo1 e arquivo2 existem e tem as mesmas características

Arquivo1 -nt arquivo2


FILE1 é mais recente (data de modificação) que FILE2

Arquivo1 -ot arquivo2


Arquivo1 é mais antigo que o arquivo2

-b ARQUIVO
ARQUIVO existe e é bloco especial

-c ARQUIVO
ARQUIVO existe e é de caráter especial

-d ARQUIVO
ARQUIVO existe e é um diretório

-e ARQUIVO
ARQUIVO existe

28
30/07/2013

Unix Shell Script

test - verificar os tipos de arquivos e comparar os valores

-f ARQUIVO
ARQUIVO existe e é um arquivo regular

-h ARQUIVO
ARQUIVO existe e é um link simbólico (o mesmo que -L)

-L ARQUIVO
ARQUIVO existe e é um link simbólico (o mesmo que-h)

-r ARQUIVO
ARQUIVO existe e é legível

-s ARQUIVO
ARQUIVO existe e tem um tamanho maior que zero

-w ARQUIVO
ARQUIVO existe e é gravável

-x ARQUIVO
ARQUIVO existe e é executável

Unix Shell Script

test - verificar os tipos de arquivos e comparar os valores

Exemplos:

$ test 1 -lt 2
$ echo $?
0

$ test 1 -gt 2
$ echo $?
1

$ test 2 -gt 1
$ echo $?
0

$ test 2 -ge 2
$ echo $?

O exemplo seguinte serve para identificar se há quatro de argumentos na linha de comandos, e se o


primeiro argumento é um -m, e se o último argumento da linha de comando é um diretório ou um
arquivo cujo tamanho seja maior do que zero:

[ \( $# -eq 4 \) -a \( "$1" = "-m" \) -a \( -d "$2" -o -s "$2" \)

Unix Shell Script

expr - Permite que o shell calcule o resultado de expressões aritméticas em que os


operadores são os habituais (+, -, *, /, % ). Além disso, é possível realizar operações
booleanas com os operadores de comparação (<, >, ==, !=) e utilizando o operador ’!’ como
a ”negação”.

Nota: deve utilizar o caracter ’´para evitar que a shell interprete da forma habitual os
caracteres’*’, ’<’, ’>’, ’(’ e ’)’

29
30/07/2013

Unix Shell Script

expr – Exemplos

contador=`expr $contador + 1`

$ expr \( 30 + 2 \) \* \( 13 % 2 \) - \( 2 \* \( 20 - 8 \) \)
8

$ expr \( 30 + 2 \) \* \( 13 % 2 \) - \( 2 \* \( 20 - 8 \) \) / 2
20

$ expr \( \( 30 + 2 \) \* \( 13 % 2 \) - \( 2 \* \( 20 - 8 \) \) \) / 2
4

Nota: deve utilizar o caracter “\” para evitar que a shell interprete da forma habitual os
caracteres ’*’, ’<’, ’>’, ’(’ e ’)’

Unix Shell Script

read - Lê uma linha da entrada padrão


(normalmente teclado) e coloca em uma variável.
Se for especificada mais do que uma variável, cada
string digitada é colocada na variável respectiva.

Exemplo:

$ read nome
$ echo Bom dia $nome!

Unix Shell Script

Comando IF - Controle de fluxo

Controle de fluxo são comandos que vão testando algumas alternativas, e de


acordo com essas alternativas, vão executando comandos. Um dos comandos de
controle de fluxo mais usados é certamente o if, que é baseado na lógica “se
acontecer isso, irei fazer isso, se não, irei fazer aquilo”.

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

O que este pedaço de código faz? O if testa a seguinte expressão: Se a variável


$valor existir, então (then) ele diz que que existe com o echo, se não (else), ele
diz que não existe.

30
30/07/2013

Unix Shell Script

Comando IF - Controle de fluxo

O operador -e que usei é pré-definido, e você pode encontrar a listagem dos


operadores na lista a seguir:
Op Significado
-eq Igual
-ne Diferente
-gt Maior
-lt Menor
-o Ou
-d Se for um diretório
-e Se existir
-z Se estiver vazio
-f Se conter texto
-o Se o usuário for o dono
-r Se o arquivo pode ser lido
-w Se o arquivo pode ser alterado
-x Se o arquivo pode ser executado

Unix Shell Script

Comando Case - Controle de fluxo

O case é para controle de fluxo, tal como é o if. Mas enquanto o if testa
expressões não exatas, o case vai agir de acordo com os resultados exatos.
Vejamos um exemplo:

case $1 in
parametro1) comando1 ; comando2 ;;
parametro2) comando3 ; comando4 ;;
*) echo "Você tem de entrar com um parâmetro válido" ;;
Esac

Aqui aconteceu o seguinte: o case leu a variável $1 (que é o primeiro parâmetro


passado para o programa), e comparou com valores exatos. Se a variável $1 for
igual à “parametro1″, então o programa executará o comando1 e o comando2; se
for igual à “parametro2″, executará o comando3 e o comando4, e assim em
diante. A última opção (*), é uma opção padrão do case, ou seja, se o parâmetro
passado não for igual a nenhuma das outras opções anteriores, esse comando
será executado automaticamente.

Unix Shell Script

Comando Case - Controle de fluxo

Você pode ver que, com o case fica muito mais fácil criar uma espécie de “menu”
para o shell script do que com o if. Vamos demonstrar a mesma função anterior,
mas agora usando o if:

if [ -z $1 ]; then
echo "Você tem de entrar com um parâmetro válido"
exit
elif [ $1 = "parametro1" ]; then
comando1
comando2
elif [ $1 = "parametro2" ]; then
comando3
comando4
else
echo "Você tem de entrar com um parâmetro válido"
fi

31
30/07/2013

Unix Shell Script

Comando Case - Controle de fluxo

Veja a diferença. É muito mais prático usar o case!

A vantagem do if é que ele pode testar várias expressões que o case não pode.

O case é mais prático, mas o if pode substituí-lo e ainda abrange mais funções.

Note que, no exemplo com o if, citamos um “comando” não visto antes: o elif –
que é uma combinação de else e if. Ao invés de fechar o if para criar outro,
usamos o elif para testar uma expressão no mesmo comando if.

Unix Shell Script

Comando For - Controle de repetição/laço

O laço for vai substituindo uma variável por um valor, e vai executando os
comandos pedidos. Veja o exemplo:

for i in 1 2 3 4 5
do
echo $i
done

Primeiramente, o laço for atribuiu um valor da lista numérica (1 2 3 4 5) para a


variável $i. Em seguida, por meio do comando echo , ele mostra o número
atribuído a variável $i na saída padrão (tela). Isso se repete até que o final da
lista numérica.

Unix Shell Script

Comando For - Controle de repetição/laço

Outro exemplo:

for original in *;
do
resultado=`echo $original | tr '[:upper:]' '[:lower:]'`
if [ ! -e $resultado ]
then
mv $original $resultado
fi
done

Aqui, o que ocorre é a transformação de letras maiúsculas para minúsculas. Para


cada arquivo que o laço lê, uma variável chamada $resultado irá conter o arquivo
em letras minúsculas. Para transformar em letras minúsculas, usei o comando tr.
Caso não exista um arquivo igual e com letras minúsculas, o arquivo é
renomeado para o valor da variável $resultado, de mesmo nome, mas com letras
minúsculas.

32
30/07/2013

Unix Shell Script

Comando While - Controle de repetição/laço

O while testa continuamente uma expressão, até que ela se torne falsa.
Exemplo:

variavel="valor"
while [ $variavel = "valor" ]
do
comando1
comando2
done

O que acontece aqui é o seguinte: enquanto a “$variavel” for igual a “valor”, o


while ficará executando os comandos 1 e 2, até que a “$variavel” não seja mais
igual a “valor”. Se no bloco dos comandos a “$variavel” mudasse, o while iria
parar de executar os comandos quando chegasse em done, pois agora a
expressão $variavel = “valor” não seria mais verdadeira.

Unix Shell Script

Comando While - Controle de repetição/laço

Para entendermos melhor o funcionamento do while, vejam o exemplo a seguir:

Vamos criar o seguinte arquivo ([Link]):


$ cat>[Link]<<!
1 – Banana
2 – Laranja
3 – Maca
4 – Goiaba
5 - Abacaxi
!

Verifique se o arquivo foi criado corretamente:


$ cat lista .txt

Tem que ser apresentado na tela a lista de frutas criadas.

Unix Shell Script

Comando While - Controle de repetição/laço

Agora, usando o editor vi, vamos criar o seguinte script ([Link]):

if [ -e [Link] ]
then
rm –f [Link]
fi
contador=5
while [ $contador -gt 0 ]
do
linha=`head -$contador [Link] | tail-1`
echo $linha >> [Link]
contador=`expr $contador - 1`
done
echo [Link]
cat [Link]
echo
echo [Link]
cat [Link]

33
30/07/2013

Unix Shell Script

Comando While - Controle de repetição/laço

Para rodar o script, execute os seguintes comandos:

$ chmod 755 [Link]


$ ./[Link]

Acompanhe qual será o resultado final.

Renato Sousa

rjpsousa@[Link]

34

Você também pode gostar