You are on page 1of 179

CURSO DE

UNI X
PARA USUÁRIO FINAL

Página: 1
INSTRUTOR:
Marcos Aurélio Pchek Laureano
Habilidades
Sistemas Operacionais
IBM MVS
QNX/FREEBSD/HP/SUN/AIX UNIX
DOS/WINDOWS
LINUX (várias distribuições)

Linguagens
JCL (JOB CONTROL LANGUAGE)
PASCAL
C/C++
POWERBUILDER
SHELL SCRIPT UNIX/LINUX
PERL
PHP
JAVA

DATA BASE MANAGEMENT SYSTEMS


SYBASE
INFORMIX
ORACLE

Instrutoria
Atividades realizadas na empresa HSBC BANK Banco Múltiplo; Treinamentos em Unix, C e Segurança.
Trabalhando atualmente com segurança da informação, criptografia e sistemas operacionais.
Professor de Sistemas Operacionais e Linguagem de Programação no OPET, Faculdades ESEEI e PUC.

Página: 2
DATAS E HORÁRIO:
Datas:
Dias 17,19,24 e 26 de Setembro de 2002.
Horário:
Das 18:30h às 22:00h

Um intervalo de 15 minutos em cada data.

AUDIÊNCIA:
• Destina-se a profissionais que necessitam / desejam ter acesso
ao ambiente operacional do sistema Unix.
• Não há pré-requisitos significativos.

EXPECTATIVAS...

OBJETIVOS:
• Familiarização com o Sistema Operacional Unix;
• Capacidade de iniciar e terminar uma sessão de trabalho com
shell;
• Capacidade de interpretar os acontecimentos básicos em uma
sessão de trabalho com shell;
• Habilidade em operar os comandos básicos através do
interpretador de comandos (shell).

Página: 3
DÚVIDAS / VOCABULÁRIO:
• Dúvidas, preferencialmente no encerramento do tópico;
• Quando não houver familiaridade com o termo utilizado,
interrompa!!

PROGRAMAÇÃO DOS TEMAS:


1. Histórico e fundamentos
2. Utilização do sistema
3. Comandos básicos
4. Técnicas básicas de operação

Página: 4
MÓDULO 1

Histórico e fundamentos

Página: 5
Fundamentos do Unix
Modularidade e Especialização - Um dos principais
fundamentos do SO Unix é a filosofia chamada “small is
good”, o que pode ser traduzido como “o simples é bom”. A
idéia consiste em que cada programa seja desenhado para
realizar bem um (e somente um) trabalho específico.
Flexibilidade - Os módulos componentes do Unix foram
desenvolvidos por pessoas diferentes com necessidades
diferentes e ele cresceu se tornando um sistema operacional
que é flexível e fácil de adaptar para necessidades
especificas.
Independência do Sistema de Arquivos -
Independência do tipo/modelo de dispositivo.
Multi-Usuário e Multi-Tarefa - Pode-se ter mais de um
usuário no computador executando mais de uma tarefa
simultâneamente.

Página: 6
Fundamentos do Unix
(cont.)
Networking - Uma das maiores razões para utilizar o Unix
é a sua capacidade de trabalhar em rede. Com outros sistemas
operacionais, software adicional necessitava ser comprado
para rede. No Unix a capacidade de trabalhar em rede é parte
integrante do sistema operacional. Unix é ideal para WWW, e-
mail e conexão a Internet.
Portabilidade – O Unixsegue várias padronizações que
garante a interoperabilidade e compatibilidade entre os vários
sabores Unix. A padronização mais famosa é a IEEE
denominada POSIX.

Página: 7
Histórico do Unix
O Sistema Operacional Unix tem seu inicio no MULTICS
(Multiplexed Operating and Computing System) que era um
projeto conjunto por General Eletric, MIT e Bell Labs em
meados da decada de 60. Em 1969 Bell Labs deixou o
projeto.
Um dos componentes do Bell Laboratories envolvido no
projeto era Ken Thompson. Ele gostou do potencial do
MULTICS mas achou-o muito complexo e em 1969 escreveu
a primeira versão do Unix, chamado UNICS (Uniplexed
Operating and Computing System). Entretanto o sistema
operacional foi alterado e o nome encurtado para UNIX.
Ken Thompson uniu-se a Dennis Ritchie, que escreveu o
primeiro compilador para a linguagem C. Em 1973 eles re-
escreveram o kernel do Unix em C. Em 1974 uma versão
conhecida como 5a. Edição foi licenciada para universidades.
A 7a. Edição liberada em 1978 serviu como um ponto de
divisão para duas linhas divergentes do desenvolvimento do
Unix. Estas linhas sáo conhecidas como SVR4 (System V
Release 4) e BSD (Berkley Software Distribution).

Página: 8
Histórico do Unix (cont.)
Ken Thompson, Bill Joy e Chuck Haley (dois graduados de
Berkley) escreveram a primeira versão de Unix de Berkley
(BSD) e esta foi distribuída para os estudantes. Isto resultou
no código fonte ter sido desenvolvido e trabalhado por
muitas pessoas diferentes. Do BSD vieram o editor vi, C
Shell, memória virtual, Sendmail e o suporte para TCP/IP.
Por muitos anos SVR4 foi mais conservador, comercial e
bem suportado pelos fornecedores. Hoje SVR4 e BSD estão
muito parecidos.
Como Ken Thompson e Dennis Ritchie eram programadores,
o principal objetivo do sistema operacional foi a obtenção de
um ambiente satisfatório de trabalho para programadores.
Por isso que geralmente usuários e programadores
experientes consideram o UNIX um sistema operacional
simples, elegante e fácil de aprender, enquanto os iniciantes
costumam considerá-lo resumido e não muito amistoso.

Página: 9
Histórico do Unix (cont.)
Nos últimos anos houve um trabalho intenso no sentido de
melhorar a interface de usuário para UNIX. Dentre as
principais implementações realizadas neste sentido está o X-
Window System (X11 que atualmente tornou-se uma infra-
estrutura padrão para ambiente gráfico em Unix). Este padrão
no entanto não define um gerenciador de janelas
padronizado.
Um gerenciador de janelas consiste em um software, rodando
sobre o X11, que é responsável por gerenciar cada aplicação
gráfica. O gerenciador de janelas é o responsável pelas
funções de ajuste de tamanho de uma janela, minimização,
maximização, etc.
Entre os gerenciadores mais famosos podemos citar o Open
Look, da Sun Microsystems, e o Motif, desenvolvido na
comunidade acadêmica. O uso do ambiente gráfico aumenta
a produtividade do usuário, permitindo acesso e visualização
de várias aplicações simultaneamente, de uma forma muito
mais amigável. O uso do mouse é indispensável em um
ambiente como este.

Página: 10
Histórico do Unix (cont.)
O X11 utiliza a arquitetura cliente-servidor, onde as
aplicações fazem o papel de cliente e o ambiente gráfico de
servidor. Desta forma o servidor pode estar executando em
um computador e o cliente em outro.
A máquina onde a aplicação está sendo visualizada é que
roda o servidor X-Window, respondendo as requisições da
aplicação X11 cliente rodando em uma máquina remota.
Atualmente, um intensivo esforço de desenvolvimento está
sendo feito nestas interfaces gráficas de usuário (Graphical
User Interface) ou simplesmente GUIs. Estes exigem
processamento mais veloz, mais memória, vídeo com alta
capacidade gráfica.
Apesar da existência das GUIs, a maior parte dos usuários do
Unix utilizam as interfaces de caractere. Mesmo que se
utilize a GUI com várias janelas em sua tela algumas delas
certamente serão sessões de shell ou programas orientados a
caracter.

Página: 11
Evolução do Unix
A árvore genealógica do Unix

UNICS (1969)
I
Fifth Edition (1973)
I
Sixth Edition (1976)
I
Seventh Edition (1978)

SVR4 (1983) BSD (1979)


SunOS 5.x/Solaris (SUN) SunOS 4.x(SUN)
HP-UX (HP) ULTRIX (DEC)
AIX (IBM) NextStep (Steve
IRIX (SGI) Jobs)
Digital UNIX (DEC)

Página: 12
Os Principais
Fabricantes
• Berkley = BSD (temos o FreeBSD e
OpenBSD que são gratuitos e rodam em
máquinas comuns)
• DEC = Digital UNIX (formalmente
OSF/1)
• IBM = AIX
• Hewllet Packard = HP-UX
• Linus Torvalds = Linux (temos várias
distribuições, as mais famosas Suse, Red
Hat, Slackware e Mandrake)
• Next = NeXTSTEP e OpenStep
• Sun Microsystems = SunOS e Solaris
• SGI = IRIX
• SCO = SCO Unix

Página: 13
Independência de
Hardware
Portabilidade
Os sistemas Unix (e unix-similares) foram escritos em sua
maior parte em uma linguagem independente de máquina
(linguagem C). Desta forma pode rodar em uma grande
variedade de hardware. Estão disponíveis de muitas fontes
diferentes, algumas delas sem custo. Isto torna possível
utilizar “o mesmo” interface de usuário em muitos sistemas
diferentes tornando-o um sistema aberto (Open System).

Página: 14
Independência de
Hardware
A Conexão entre Unix e a linguagem C
Quando a primeira versão de Unix foi escrita a maioria dos
desenvolvedores de sistemas operacionais acreditavam que um
sistema operacional devia ser escrito em linguagem Assembler
para que pudessem funcionar efetivamente e maximizar o
acesso ao hardware. O Unix não foi inovativo somente como
um sistema operacional mas também quebrou esta máxima por
ter sido escrito em uma linguagem diferente do Assembler
(linguagem C).
A linguagem C trabalha em um nível alto o suficiente para ser
portável para uma variedade de hardwares. Um apelo do
software Unix disponível publicamente é ser distribuído em
fontes C que devem ser compilados antes da utilização.
Muitos programas Unix seguem a sintaxe da linguagem C. As
chamadas de sistema (system calls) do Unix são referidas
como funções em C.
Isto significa para os usuários de sistema Unix que um
conhecimento em C faz o Unix mais fácil de ser entendido.

Página: 15
MÓDULO 2

Utilização do Sistema
Parte 1

Página: 16
Utilização do Sistema

Objetivos
Após o término desta unidade
os alunos serão capazes de:

• Entrar e sair do sistema


• Conhecer os tipos de
usuários do UNIX
• Conhecer a estrutura de
comandos do UNIX
• Conhecer as principais
características do UNIX

Página: 17
Utilização do Sistema

• Para entrar no sistema


login: aluno01
aluno01’s Password: *********
$_
• Para sair do sistema
$ <ctrl-d>
ou
$ exit
ou
$ logout

login:_

Página: 18
Utilização do Sistema
Após a execução do login o SO posiciona o usuário
em um diretório configurado no momento da
criação do mesmo no ambiente. Normalmente este
diretório fica abaixo do /home. Por exemplo
/home/aluno01.

Criando ou alterando senhas


$ passwd
• O comando passwd é usado para alterar a senha
de um usuário.
• Todas as senhas são criptografadas e não poderão
se decodificadas por outros usuários.
• O sistema inicializa o processo passwd que
solicita ao usuário uma nova senha.
• Quando o processo do passwd for finalizado,
será apresentado novamente o prompt ao usuário,
permitindo a entrada de um novo comando.

Página: 19
Utilização do Sistema

Usuários
• Basicamente há duas classes de usuários no UNIX;
Super usuários e usuários comuns.
• Um super usuário, normalmente conhecido como
root, tem o poder sobre toda a máquina, todos os
processos e file systens.
• Os usuários comuns possuem acesso restrito
conforme o grupo de usuários ao qual pertencem.
Grupos
• Todo usuário em um sistema UNIX pertence a um
grupo. Um grupo é uma coleção de indivíduos
agrupados por alguma razão. Um usuário pode
pertencer a vários grupos. Todavia, um usuário pode
ser membro de um grupo de cada vez, porque os
grupos também são usados para determinar
permissões sobre os file systens.
• O comando id lista a qual grupo o usuário pertence.
$ id

Página: 20
Utilização do Sistema

Formato de Comandos
$ comando opção(s) argumento(s)
Por exemplo:
$ mail -f newmail
O comando ou nome do processo deve vir primeiro
Os espaços são usados pelo shell como separadores
na linha de comando.
A(s) opção(s), usada para modificar a operação de
um comando, deve seguir o nome do comando,
separado de um espaço e precedida de um “-”.
Os argumentos seguem as opções, novamente
separadas por espaço.
Exemplo de Formato de Comando
CERTO ERRADO
1. Separação
$ mail -f newmail $ mail - f newmail
$ who -u $ who-u

Página: 21
Utilização do Sistema

Exemplo de Formato de Comando


CERTO ERRADO
2. Ordem
$ mail -f newmail $ mail newmail -f
$ mail aluno01 $ aluno01 mail
$ who -u $ -u who

3. Múltiplas Opções
$ who -m -u $ who -m-u
$ who -mu $ who -m u

4 Múltiplos Argumentos
$ mail aluno01 aluno02 $mail aluno01aluno02

EXISTE EXCEÇÃO!!! (alguns comandos as


opções começam com “+”)

Página: 22
Utilização do Sistema

Comando date
Exibe a data e hora atual do sistema
$ date
Sat Feb 27 10:15:00 GMT 1995
Comando Cal
Lista o calendário do sistema
$ call 2 1995
$ call 1995
Comando who
Lista quem está no sistema ou quem é você
$ who
$ who am i
$ whoami
Comando finger
Lista informações sobre os usuários conectados ao
sistema (muitas vezes este comando está desabilitado por
motivos de segurança)
$ finger aluno01

Página: 23
Utilização do Sistema
Comando mail
Ativa o processo de envio e recebimento de mensagens
Enviando uma mensagem
$ mail aluno01
Subject: Churrasco
Teremos churrasco no sabado.
<ctrl-d>
Cc:<Enter>
$_
Recebendo mensagens
$ mail
Comandos importantes
d remove mensagens
m avança mensagens
q sai do mail sem remover as
mensagens
s salva mensagens num arquivo
t exibe uma mensagen
Para obter uma lista dos comandos disponíveis, digite ?
No prompt do mail.

Página: 24
Utilização do Sistema
Comando clear
Limpa a tela do terminal
$ clear
Comando echo
Escreve o texto que o acompanha na tela
$ echo Tenha um bom dia
Tenha um bom dia
$_
Comando banner
Escreve uma string em letras expandidas por toda a tela
$ banner hello
Comando wc
Conta o número de linhas, palavras e bytes de um
arquivo.
$ wc [-c] [-l] [-w] nome do arquivo
Opções:
-c conta o número de bytes
-l conta o número de linhas
-w conta o número de palavras

Página: 25
Utilização do Sistema
Teclas Especiais
<Backspace> Correção de erros
<ctrl-c> Termina o comando corrente e volta
para o shell
<ctrl-d> Sai da transmissão e fecha o arquivo
<ctrl-s> Para temporariamente a saída na tela
<ctrl-q> Reinicia a saída(parada com ctrl-s)
<ctrl-u> Apaga linhas inteiras

OBS: As teclas ctrl-s e ctrl-q dependem do sistema.


Comando set
Efetua configurações no ambiente do usuário
$ set -o vi
Permite que os comandos do vi possam ser usados na
linha de comando.
<esc> Modo de comandos do vi
<-> Lista o último comando

Página: 26
Utilização do Sistema
Principais Características do UNIX
• Sistema preemptivo (o processo pode sair da
CPU sem ter terminado)

• Multi-usuário

• Multi-processo

• Multi-thread

• Pouco amigável

• Estável

Página: 27
Utilização do Sistema
Resumo da Unidade
• Acesso ao sistema
• Classes de usuários
• Formato de comandos
• Comandos date, cal, who, finger, echo, clear,
banner, wc
• Características do SO

Página: 28
Utilização do Sistema
Atividades
Exercício 1
• Após o término deste exercício, o aluno estará apto a:
• Dar login no UNIX e mudar sua senha
• Executar comandos básicos
• Usar as teclas de controle para manipular as saídas
dos comandos

Página: 29
Utilização do Sistema
Atividades
Acesso via login/Mudança de senhas
1. Dê login no sistema com o usuário e a senha fornecidos pelo
seu instrutor.
2. Altere a sua senha para uma que você gostaria de utilizar até
o final do curso.
3. Certifique-se de que a senha foi atualizada entrando de novo
no sistema.
Comandos Básicos
4. Mostra a data do sistema
5. Mostre a quantidade de linhas do arquivo /etc/passwd.
6. Exiba o calendário completo do ano 2002.
7 Verifique quem está logado no sistema.
8 Mostre o seu login name
9 Use o comando banner para exibir “Hora do Lanche”
10 Use o comando echo para exibir “Hora do Lanche”
11. Use o comando clear para limpar sua tela.

Página: 30
Utilização do Sistema
Atividades
Enviando e recebendo mail
12. Envie uma mensagem para si mesmo usando o comando
mail
13. Inicialize o mail e veja se há mensagens na sua caixa postal.
14. Envie mensagens para outros alunos da classe.
Dicas de teclado
15. Usando o comando banner, mostre o alfabeto separando
cada caracter com um espaço em branco. Como a saída vai
ser rolada no seu termianl, pare temporariamente a saída.
Reinicialize a rolagem.
16. Saia do sistema.

Página: 31
Utilização do Sistema
Atividades
Acesso via login/Mudança de senhas
1. Dê login no sistema com o usuário e a senha fornecidos pelo seu
instrutor.
Toda vez que você entra pela primeira vez no sistema, será requisitada a
mudança de senha.
Login: alunoxx (no prompt do login)
Password: alunoxx
You are required to change your password. Please choose a new one.
alunoxx’s New password: alunoxx
Enter new password again: alunoxx

2. Altere a sua senha para uma que você gostaria de utilizar até o final do
curso.
$ passwd
Changing password for “alunoxx”
alunoxx’s Old password:
alunoxx’s New password:
Enter the new password again:

Página: 32
Utilização do Sistema
Atividades
Acesso via login/Mudança de senhas
3. Certifique-se de que a senha foi atualizada entrando de novo no
sistema.
$ exit
login: alunoxx
Password: (digite a sua nova senha)

Comandos Básicos
4. Mostra a data do sistema
$ date
5. Mostre a quantidade de linhas do arquivo /etc/passwd.
$ wc -l /etc/passwd
6. Exiba o calendário completo do ano 2000.
$ cal 2000
7 Verifique quem está logado no sistema.
$ who
ou
$ finger

Página: 33
Utilização do Sistema
Atividades
9 Use o comando banner para exibir “Hora do Lanche”
$ banner Hora do Lanche
10 Use o comando echo para exibir “Hora do Lanche”
$ echo Hora do Lanche
11. Use o comando clear para limpar sua tela.
$ clear
Enviando e recebendo mail
12. Envie uma mensagem para si mesmo usando o comando mail
$ mail alunoxx
Subject: Uma mensagem para mim mesmo
A reunião já foi as 10:00
<ctrl-d>
Cc:<enter>

Página: 34
Utilização do Sistema
Atividades
12. Envie uma mensagem para si mesmo usando o comando mail
$ mail alunoxx
Subject: Uma mensagem para mim mesmo
A reunião já foi as 10:00
<ctrl-d>
Cc:<enter>
13. Inicialize o mail e veja se há mensagens na sua caixa postal.
$ mail
? t (você pode usar 1 se preferir)
?s
“/home/alunoxx/mbox”[New file] (você receberá esta mensagem)
?q
Held 1 message in /var/spool/mail/teamxx (esta será a sua caixa postal
particular)

Página: 35
Utilização do Sistema
Atividades
Dicas de teclado
14. Usando o comando banner, mostre o alfabeto separando cada caracter
com um espaço em branco. Como a saída vai ser rolada no seu
terminall, pare temporariamente a saída. Reinicialize a rolagem.
$ banner a b c d e f g h i j k l m n o p q r s t u v x z
<ctrl-s> (bloqueia temporariamente a rolagem de tela)
<ctrl-q> (libera a rolagem de tela)
<ctrl-c> (interrompe a execução do comando)
15. Saia do sistema.
$<ctrl-d>
ou
$ exit

Página: 36
MÓDULO 2

Utilização do Sistema
Parte 2

Página: 37
Utilização do Sistema

Objetivos
Após o término desta unidade
os alunos serão capazes de:
• Descrever a estrutura do
Unix
• Descrever a estrutura de
Sistema de Arquivos e
diretórios do Unix
• Entender os conceitos de
Processo e Usuarios do Unix

Página: 38
Estrutura do Unix
Componentes principais do Unix

Kernel (Núcleo do sistema operacional / Sistema de


Arquivos)
Shell (Ambiente de trabalho)

/ Protocolos de Comunicação /
| Utilitários de Rede
| Processadores de Texto
| Linguagens de Programação
Utilitários <| Gerencia de Sistema
do sistema | Documentação On-Line
| Ambiente Gráfico X-Windows
\ Outros utilitários

/ Armazenamento Discos /
| Unidades de Fita
| Video, teclado, mouse
Hardware <| Impressora
| Comunicação
\ CPU

Página: 39
Estrutura do Unix (cont.)

Página: 40
Estrutura do Unix (cont.)
O Unix é um sistema composto em camadas.

O Kernel (núcleo do sistema operacional), o shell


(interpretador de comandos) e os utilitários (programas
auxiliares) comandam instruções ao hardware.

As palavras ”sistema operacional" são freqüentemente


utilizadas para se referir ao kernel, shell e utilitários ou
comandos porém, tecnicamente, os utilitários não são parte
do sistema operacional.

Os utilitários que acompanham o sistema operacional são


ferramentas básicas que evoluíram nos comandos Unix
padrão. Elas tornam o sistema operacional mais fácilmente
utilizável para o usuário mas apenas o kernel e o shell são
verdadeiramente o sistema operacional.

O Hardware incluí as partes físicas do sistema como:


monitor, teclado, mouse, impressora, cabos, processadores,
etc.

Página: 41
Estrutura do Unix (cont.)
A linguagem da camada de hardware não é acessível
diretamente ao usuário final.

O hardware conversa com o kernel que fala tanto com o


hardware quanto com o shell.

O shell por sua vez consegue conversar com qualquer


componente do sistema, com exceção do hardware. Ele
recupera o arquivo que contém as instruções para cada
comando que lhe é digitado permitindo aos usuários
utilizarem os serviços do kernel.

Os utilitários Unix podem conversar com o shell e assim,


indiretamente com o kernel. Os utilitários usam funções
chamadas “system calls” para requisitar serviços ao kernel.
Eles não conseguem interagir com o kernel diretamente.

Página: 42
Estrutura do Unix (cont.)
Kernel
É a parte central do sistema operacional. Consiste de uma
pequena coleção de software que torna possível ao sistema
prover outros serviços, basicamente:

• Criação e gerenciamento de processos


• Sistema de arquivos
• Comunicação com processos e drivers
• Uma forma para iniciar o sistema

Página: 43
Sistema de Arquivos
Arranjo dos arquivos (coleção de caracteres) nas unidades
físicas de armazenamento.

É composto da hierarquia de diretórios composta de todos os


arquivos que estão acessíveis para o usuário.

O sistema de arquivos do Unix esta organizado em uma


estrutura de árvore onde todos os arquivos estão logicamente
subordinados a uma raiz (chamada de root).

Uma das coisas típicas do sistema de arquivos do Unix é que


ele trata tudo como um arquivo. Os arquivos podem ser
divididos em 3 categorias: ordinários ou arquivos comuns,
diretórios e especiais ou arquivos de dispositivos. (device
files).
Arquivos ordinários ou comuns no Unix não são somente
arquivos de texto. Eles podem conter também texto ASCII,
dados binários e entrada ou saída de programas.. Arquivos
binários executáveis (programas) também são arquivos
comuns (ex.: os utilitários). Quando um usuário digita um
comando o arquivo associado é recuperado e executado.

Página: 44
Sistema de Arquivos (cont.)
Diretórios no Unix são um tipo especial de arquivo que
mantém uma lista de outros arquivos que estão “contidos”
nele, podendo ser inclusive arquivos do tipo diretório.

Arquivos especiais ou de dispositivo no Unix permitem que


o sistema acesse todos os dispositivos físicos. Eles são a forma
que o kernel utiliza para se comunicar com o hardware. Os
arquivos de dispositivo mantém informação sobre a
localização, tipo e modo de acesso para um dispositivo
específico. Existem dois tipos de arquivos de dispositivo:
caractere e bloco.

Um arquivo contém de duas partes:


• Bloco de inode - descreve o arquivo
• Blocos de dados

Página: 45
Sistema de Arquivos (cont.)
Regras para formação de nomes de arquivos
Deve ser descritivo do conteúdo
Deve-se usar somente caracteres alfa-numéricos, letra
maiúscula, minúscula, números, #, @, ...
Não deve-se incluir espaços em branco
Não deve-se usar caracteres especiais do shell:
‘ * ? : , / ; & ! [ ] $ ` “ ~

Não deve ter o mesmo nome de comando do sistema


Levar em conta que há distinção entre caracteres maiúsculos e
minúsculos:
Saida.txt e saida.txt representam arquivos diferentes
Nomes de arquivos iniciados com ponto (.) são ocultos ao
comando ls. (ls -a mostra todos os arquivos ocultos).
O múmero máximo de caracteres para um nome de arquivo é
255.

Página: 46
Estrutura de diretórios

Página: 47
Estrutura de diretórios (cont.)
PATHNAMES (Caminhos para acesso)
Para acesso a um arquivo, diante de uma estrutura de diretório
complexa como a que vimos, necessitamos especificar um
caminho para acesso ao mesmo. A este caminho damos o
nome de pathname. Os diretórios necessários a serem
percorridos são separados por barras e os caracteres ponto tem
significado especial:
. = diretório atual (identificado pelo comando pwd)
.. = diretório imediatamente acima
O pathname pode ser:
Absoluto - inicia no diretório raiz (root)
Relativo - inicia no diretório atual (corrente)
Exemplos:
/usr/bin/ls (caminho absoluto)
../bin/ls (caminho relativo, tendo como diretório atual o
/usr)

Página: 48
Processos
Um processo é a execução de um programa. É a unidade
básica de execução. No kernel do Unix, tudo que é
executado, exceto as ações automáticas, é feito por um
processo acionando chamadas ao sistema (system calls).
Processos normalmente podem criar outros processos que
executam em paralelo a eles, realizando sub-tarefas e ao
terminar, finalizam a si próprios. Este tipo de processo é
chamado processo filho (child)

Ambiente de um Processo
Programa
Id do usuário (dono do processo) / Grupo
Privilégios do Sistema de Arquivos + Diretório Corrente
ID do Processo (PID)
ID do Processo Pai (PPID)
Variáveis de ambiente

Página: 49
Ambiente dos Processos
Exemplo:
Ao efetuar o Login o usuário inicia uma sessão shell:

Programa: ksh, PID: alunoxx, GID: users, Arquivos:


/dev/ttyx
PID: 649, PPID: 184,
Variáveis de ambiente: LOGNAME, USER, SHELL, etc.

Caso acione um comando (ls, por exemplo), durante a


execução do comando ls será criado um novo ambiente
conforme abaixo:

Programa: ls, PID: alunoxx, GID: users, Arquivos:


/dev/ttyx
PID: 710, PPID: 649,
Variáveis de ambiente: LOGNAME, USER, SHELL, etc.

O comando para ver os processos chama-se ps.


$ ps Lista os processos do usuário
atual
$ ps –ef Lista todos os processos

Página: 50
Ambiente dos Processos (cont.)
Variáveis de Ambiente
As variáveis fazem parte do ambiente do processo e são
exclusivas deste processo.

$ myvar=“Texto” = Atribuição de valor


$ echo $myvar = Referência ao conteúdo
Texto = Externaliza o conteúdo da
$_ variável

Processos Pai e Filho


$ ksh ou bash = Inicia um processo filho
$ echo $myvar = Tenta referência a variável
= Não tem acessibilidade a
$_ variável do processo pai

Para que o processo filho tenha acesso a variável é necessário


exportá-la (comando export no ksh/bash)

Página: 51
Ambiente dos Processos (cont.)
Exportando Variáveis de Ambiente
As variáveis fazem parte do ambiente do processo e são
exclusivas deste processo.

$ myvar=“Texto” = Atribuição de valor


$ echo $myvar = Referência ao conteúdo
Texto = Externaliza o conteúdo
$ export myvar = Exporta a variável

$ ksh ou bash = Inicia um processo filho


$ echo $myvar = Tenta referência a variável
Texto = Após exportada a variável
$_ tem visibilidade

Página: 52
Usuários
O que influencia no ambiente inicial do usuário ?

• Tipo de shell (sh, csh, bash, ksh)


• Parametrização do arquivo /etc/environment (AIX)
Arquivo contém variáveis que especificam o ambiente básico
para todos os processos.
• Parametrização do arquivo /etc/profile
Ajusta variáveis de ambiente e executam comandos mas só
pode ser alterado pelo administrador do sistema
• Parametrização do arquivo $HOME/.profile
Ajusta variáveis de ambiente e executam comandos.
Podera ser alterado pelo próprio usuário caso tenha permissão
de escrita neste arquivo do sistema

Variável ENV
A variável ENV pode ser ajustada para conter um nome de
arquivo para executar comandos a cada nova abertura do ksh
(Korn Shell) ou bash (Bash Shell). Uma boa sugestão para
seguir o exemplo de outros shell’s seria $HOME/.kshrc.

Página: 53
Usuários
Exemplo de um arquivo /etc/profile
# /etc/profile

# System wide environment and startup programs


# Functions and aliases go in /etc/bashrc

PATH=/usr/share/jdk_1.1.7/bin:$PATH:/usr/X11R6/bin:/usr/local/bi
n

LOGNAME=$USER
PS1="[$LOGNAME]$ "
MAIL="/var/spool/mail/$USER"

HOSTNAME=`/bin/hostname`

# Java stuff
CLASSPATH=/usr/share/jdk_1.1.7/lib/classes.zip:/usr/share/swing-
1.0.3/swingall.jar

export PATH PS1 HOSTNAME USER LOGNAME MAIL


export CLASSPATH

Página: 54
Usuários
Exemplo de um arquivo .profile
# .profile

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
ENV=$HOME/.kshrc
USERNAME=“root”

export PATH

export USERNAME ENV PATH

mesg n

Exemplo de um arquivo .kshrc (variável ENV)


# .kshrc

# User specific aliases and functions


alias lsf="ls -CF”
alias dus="du -s * | sort -n”

Página: 55
Utilização do Sistema
Atividades
Exercício 2
• Após o término deste exercício, o aluno estará apto a:
• Iniciar e terminar um processo filho (subshell)
• Verificar/Alterar as variáveis de seu ambiente
• Customizar o arquivo .profile
• Criar um alias

Página: 56
Utilização do Sistema
Atividades
Estrutura do Processo
1. Entre no sistema e mostre o PID do seu processo corrente
2. Crie um subshell digitando ksh. Qual é o id do processo do subshell?
3. Digite o comando necessário para observar os seus processos.
4. Finalize o seu subshell. O que acontece se você digitar exit no seu
shell de login.

Ambiente do Processo
5. Mostre todas as variáveis do seu ambiente atual.
6. Crie uma variável chamada x e carregue o valor 10 para ela. Verifique
o valor da variável. Novamente mostre todas as suas variáveis.
7. Crie um subshell via ksh. Verifique se o valor da variável x se mantém
no subshell. Qual é o valor de X?
Liste as variáveis existentes no subshell. Você consegue ver a variável
x na listagem?
8. Retorne para o processo inicial. Defina o valor da variável x para que
agora ele seja herdado no processo filho.Verifique isso criando um
subshell e checando o valor da variável x.
9. Altere o valor de x para 200 no subshell. Verifique se o valor foi
modificado.
10. Retorne ao processo anterior. Verifique o valor de x neste ambiente.
A alteração feita no subshell foi exportada de volta ao processo pai?

Página: 57
Utilização do Sistema
Atividades
Customizando o ambiente de trabalho
11. Para customizar seu ambiente de trabalho e ter as
configurações sempre ativas após o login, você deve
incorporar as alterações no arquivo que é lido no login.
Certifique-se de estar em seu diretório home. Edite seu
arquivo .profile e adicione as seguintes funções.
a. Alterar o prompt do shell para exibir o diretório corrente
b. Uma mensagem deve ser exibida após o login que mostre
o seu nome de login e horário em que você está entrando no
sistema.
c. Definir um alias chamado dir para o comando ls -l.

12. Teste sua customização re-executando seu arquivo .profile.


Você pode escolher entre sair e entrar de novo no sistema
ou simplesmente re-executar o arquivo no shell corrente.
Depois de fazer isto responda as perguntas
a. A sua mensagem foi exibida?
b. O prompt indica o seu diretório corrente?
c. Mude para o diretório /etc. O prompt mudou?
d. Retorne ao seu diretório. Usando o comando dir você obteve uma
lista longa de arquivos do seu diretório ?

Página: 58
Utilização do Sistema
Atividades
Estrutura do Processo
1. Entre no sistema e mostre o PID do seu processo corrente
$ echo $$
2. Crie um subshell digitando ksh. Qual é o id do processo do subshell?
$ ksh
$ echo $$
3. Digite o comando necessário para observar os seus processos.
$ ps -fu alunoxx
4. Finalize o seu subshell. O que acontece se você digitar exit no seu
shell de login.
$exit

Ambiente do Processo
5. Mostre todas as variáveis do seu ambiente atual.
$ set
6. Crie uma variável chamada x e carregue o valor 10 para ela. Verifique
o valor da variável. Novamente mostre todas as suas variáveis.
$ x =10
$ echo $x
$ set

Página: 59
Utilização do Sistema
Atividades
... Estrutura do Processo
7. Crie um subshell via ksh. Verifique se o valor da variável x se mantém
no subshell. Qual é o valor de X?
Liste as variáveis existentes no subshell. Você consegue ver a variável
x na listagem?
$ ksh
$ echo $x
$ set
8. Retorne para o processo inicial. Defina o valor da variável x para que
agora ele seja herdado no processo filho.Verifique isso criando um
subshell e checando o valor da variável x.
$ exit
$ export x=10
$ ksh
$ echo $x
9. Altere o valor de x para 200 no subshell. Verifique se o valor foi
modificado.
$ x=200
$ echo $x
10. Retorne ao processo anterior. Verifique o valor de x neste ambiente.
A alteração feita no subshell foi exportada de volta ao processo pai?
$ exit
$ echo $x

Página: 60
Utilização do Sistema
Atividades
Customizando o ambiente de trabalho
11. Para customizar seu ambiente de trabalho e ter as
configurações sempre ativas após o login, você deve
incorporar as alterações no arquivo que é lido no login.
Certifique-se de estar em seu diretório home. Edite seu
arquivo .profile e adicione as seguintes funções.
a. Alterar o prompt do shell para exibir o diretório corrente
b. Uma mensagem deve ser exibida após o login que mostre
o seu nome de login e horário em que você está entrando no
sistema.
c. Definir um alias chamado dir para o comando ls -l.
$ cat > .profile
PS1=‘$PWD => ‘
echo Usuario $LOGNAME se logando em `date`
alias dir = ‘ls -l’
<ctrl-d>

Página: 61
Utilização do Sistema
Atividades
Customizando o ambiente de trabalho
12. Teste sua customização re-executando seu arquivo .profile.
Você pode escolher entre sair e entrar de novo no sistema
ou simplesmente re-executar o arquivo no shell corrente.
Depois de fazer isto responda as perguntas
a. A sua mensagem foi exibida?
b. O prompt indica o seu diretório corrente?
c. Mude para o diretório /etc. O prompt mudou?
d. Retorne ao seu diretório. Usando o comando dir você obteve uma
lista longa de arquivos do seu diretório ?

$ logout
Login: alunoxx
alunoxx`s Password: alunoxx
$
ou
$ . .profile

Se alguma das respostas for negativa verifique o conteúdo do seu arquivo


.profile e corrija-o.

Página: 62
MÓDULO 3

COMANDOS UNIX
Parte 1

Página: 63
Comandos UNIX

Objetivos
Após o término desta unidade os
alunos serão capazes de:

• Listar o funcionamento do
shell
• Listar as características
do comandos do UNIX
• Manipular comandos no UNIX
• Listar os comandos de
segurança de arquivos

Página: 64
Comandos UNIX

O Shell
Sempre que é iniciada uma sessão em um sistema UNIX, o
usuário é posto em um programa chamado shell, onde é
mostrado um prompt no canto esquerdo da tela.
O shell é um interpretador de comandos. Ele recebe os
comandos digitados pelo usuário e os repassa para o
KERNEL do sistema operacional para que sejam
processados. Ele, então, mostra o resultado desta operação na
tela ou em alguma saída indicada pelo usuário.
O shell possibilita ao usuário uma ou mais das seguintes
características:
• Criar um ambiente que atenda as necessidades do usuário
• Escrever shell scripts
• Definir command aliases (apelidos para comandos)
• Manipular histórico de comandos
• Automaticamente completar a linha de comando
• Editar a linha de comando
Alguns shells provêm mais dessas facilidades do que outros.

Página: 65
Comandos UNIX

Súmário das Características do Shell

Bourne C TC Korn BASH


__________________________________________________

command history No Yes Yes Yes Yes

command alias No Yes Yes Yes Yes

shell scripts Yes Yes Yes Yes Yes

filename completion No Yes* Yes Yes* Yes

command line editing No No Yes Yes* Yes

job control No Yes Yes Yes Yes

__________________________________________________
* not the default setting for this shell

Página: 66
Comandos UNIX
Comandos e Processos
Quando o usuário entra com um comando, é
invocado um programa. Enquanto este programa
estiver rodando ele é chamado processo. É
importante notar que embora haja somente uma
cópia do comando salva no disco, pode haver vários
processos rodando este comando.
Quando o sistema operacional, após o boot, é
inicializado, um único processo é startado. Este
processo é o pai de todos os processos subsequentes.
Cada processo criado no sistema possui uma número
único chamado PID associado a ele.
Quando um usuário se loga no sistema é iniciado um
processo para executar o shell deste usuário.
Qualquer comando ou programa executado a partir
de então é filho deste processo.
Um processo pode ter vários filhos mais somente um
pai.

Página: 67
Comandos UNIX
Executando comandos
Comandos do UNIX são arquivos binários
executáveis localizados em diretórios com o nome
bin (de binário). Muitos dos comandos
normalmente usados pelo usuário estão localizados
no diretório /usr/bin.
Quando o usuário entra com um comando, o shell
verifica se é um comando built-in (comandos que
são executados no próprio processo do shell). Caso
não seja, o shell procura pelo arquivo binário ao
qual se refere o comando em cada diretório definido
na variável de ambiente PATH.
A execução de um comando implica na criação de
um novo shell só para ele.
Variáveis de Ambiente
São variáveis que definem algum aspecto do seu
ambiente de trabalho como, diretório home, editor,
qual shell está sendo executado, etc.
Estas variáveis são atribuidas no momento do login.

Página: 68
Comandos UNIX
Comando env
Lista todas as variáveis reconhecidas pelo shell
$ env
Comando export
Insere uma nova variável na lista de variáveis
reconhecidas pelo shell
$ export variavel=valor
Descobrindo o seu shell
$ echo $SHELL

Página: 69
Comandos UNIX
Expressões Regulares
Uma expressão regular é uma forma concisa de
representar qualquer conjunto de caracteres. Ela é
construída combinando caracteres e meta-
caracteres, ou seja, caracteres que possuem um
significado especial para o shell.
Expressões regulares podem ser usadas para
especificar nomes de arquivos, pesquisar conteúdo
de arquivos, mudar conteúdo de arquivos. O
conjunto de expressões regulares suportadas difere
de comando para comando.
Pesquisando Nome de Arquivos
? matches any single character
* matches any number of any characters
[nnn] matches any of the enclosed characters
[!nnn] matches any character that is not enclosed
[n-n] matches any character in this range

Página: 70
Comandos UNIX
Expressões Regulares
Exemplos
Listar todos os arquivos com uma determinada extensão:
$ ls *.fm
Irá listar todos os arquivos no diretório corrente que possuam a
extensão .fm
Remover um range de arquivos:
$ rm foo.?
Removerá todos os arquivos no diretório corrente com um único
caracter na extensão do nome. Arquivos foo.c e foo.o serão
removidos bem como o arquivo foo.3
Copiar todos os arquivos contendo um mesmo padrão:
$ cp [pP]art[0-9] ../book
Copiará todos os arquivos cujo nome contenha um padrão que
inicie com p ou P seguido pelas letras art e terminando com
qualquer número entre 0 e 9. Assim o arquivo part1 será copiado
para o diretório pai book, bem como, o arquivo Part7.

Página: 71
Comandos UNIX
Expressões Regulares
Pesquisar conteúdo de arquivos
Os caracteres abaixo podem ser usados para criar
uma expressão regular na pesquisa de um padrão
com o comando grep.
“Always quote the regular expression. This
prevents the shell from interpreting the special
characters before it is passed to the grep
command.”
c any non-special character represents itself
\\c turns off the meaning of any special character
^ beginning of a line
$ end of a line
. matches any single character except a newline
[...] matches any of the enclosed characters
[^...] matches any character that is not enclosed
[n-n] matches any character in this range
* matches any number of the preceding character

Página: 72
Comandos UNIX
Expressões Regulares
Exemplos
To search using enclosed characters:
$ grep -n “[dD]on't” tasks
Localiza e mostra cada linha no arquivo tasks que contenha o
padrão don’t ou Don’t. O número de cada linha é mostrado
também.
To turn off the meaning of a special character:
$ grep '^\\$' money
Lista todas as linhas no arquivo money que começem com um
sinal $ (dolar). Este caracter é precedido por um \\ (backslash)
para remover o siginificado especial do caracter para o shell.
To search from the beginning of a line:
$ ls -l | grep '^d........x'
Lista todos os diretórios no diretório corrente que tenham
permissão de execução para outros.
To search for lines ending in a particular pattern:
$ ls -l | grep '[^.xdh]$'
Lista todos os arquivos no diretório corrente que não terminem
com .xdh.

Página: 73
Comandos UNIX
Substituição de Comandos
Para incluir a saída de um comando dentro da linha
de comando para um terceiro comando, ponha o
comando do qual a saída é desejada entre
`backquotes` (crases).
$ echo The date today is `date +%d/%m/%y`
The date today is 17/05/95
A saída do comando date +%d/%m/%y é
substituída na posição apropriada dentro da linha
de comando usada pelo comando echo.
Passando Caracteres Especiais como
Argumentos para Comandos
Alguns caracteres conhecidos como meta-
caracteres tem um significado especial para o shell.
Sempre ponha entre aspas os argumentos para um
comando ou uma expressão regular caso seja
necessário prevenir que o shell interprete os
caracteres especiais antes que sejam passados
para comando.

Página: 74
Comandos UNIX
Passando Caracteres Especiais como
Argumentos para Comandos
Exemplos
Remover o significado especial de um único caracter:
$ rcp ubik:/home/roger/recipe.ps .;\\<Return>
lpr -Pps3 #6m recipe.ps
Impede que o shell trate o caracter newline, gerado a partir da
tecla <return>. Desta forma pode-se continuar o comando na
próxima linha

Impedir o shell de expandir um argumento contendo vários


caracteres especiais:
$ sed -e 1,$s/V[0-9].*: //p /etc/motd
sed: command garbled: 1,/V[0-9].*:
$ sed -e '1,$s/V[0-9].*: //p' /etc/motd
DYNIX/ptx(R) Tue Feb 25 12:04:15 GMT 1993
No primeiro caso o shell tenta expandir a linha de comando e
muda o significado dos parâmetros para o processo. Quando o
argumento para o comando é protegido pelas aspas simples, o
comando sed é executado com sucesso.

Página: 75
Comandos UNIX
Passando Caracteres Especiais como
Argumentos para Comandos
Exemplos
Impedir o shell de expandir caracteres especiais mas
permitir a substituição de comandos:
$ echo 'My working directory is `pwd`'
My working directory is`pwd`
$ echo "My working directory is `pwd`"
My working directory is /home/jane/docs
Quando postos com aspas simples o caracter `pwd` são tratados
literalmente como parte da string a ser mostrada pelo comando
echo. Usando aspas duplas, o comando dentro das crase é
executado e sua saída é substituída no lugar correto.
Dicas para o tratamento de caracteres especiais
\\ impede o shell de expandir qualquer
caracter simples
'’ impede o shell de expandir todos os
caracteres especiais dentro da string exceto !
"” impede o shell de expandir qualquer
caracter especial exceto $, ` e !.

Página: 76
Comandos UNIX
Entrando com mais de um comando na
mesma linha
Use ; (ponto e vírgula) para separar um comando do outro,
permitindo que vários comandos possam ser digitados na
mesma linha.
Exemplo
$cd ..; ls -l
Esta linha de comando contem dois comandos. Se necessário, é
possível continuar um comando em outra linha usando \ e a
tecla <return>.

FileName Completion
Frequentemente é usado o nome de um arquivo ou diretório
como parte de um comando. É possível completar
automaticamente o nome do arquivo ou diretório digitando
alguns poucos caracteres iniciais e, então, precionando uma
tecla particular.
No ksh é necessário que a variável EDITOR esteja com o
conteúdo vi.
No AIX a tecla especial é <ESC><|>.
No HP-UX a tecla especial é <ESC><ESC>.

Para o bash basta pressionar <TAB> em qualquer Unix/Linux.

Página: 77
Comandos UNIX
Editando a linha de comando
É possível editar a linha de comando para corrigir
erros e efetuar alterações antes de entrar com o
comando.
No ksh é necessário que a variável EDITOR esteja
com o conteúdo vi.
Usando o histórico de comandos
Cada vez que um comando é executado ele é
adicionado a uma lista de histórico de comandos. É
possível reusar esta lista.
Comando history
Lista o conteúdo a lista de histórico de comandos
$ history
Para faça
executar o último comando r
executar o comando n rn
executar o comando mais
recente iniciando com a string r string

Página: 78
Comandos UNIX

Redirecionando a entrada e saída


padrão
O unix considera qualquer device ligado
ao sistema como sendo um arquivo. Isto
inclui o terminal.
Por default, um comando trata o terminal
como o arquivo padrão para leitura de
dados. O terminal é também tratado como
arquivo padrão para a saída de dados do
comando.
Estas ações podem ser mudadas através do
redirecionamento da entrada e saída
padrão do comando.

Página: 79
Comandos UNIX

Redirecionando a entrada e saída padrão


Exemplos:
$ mail tony < memo
Redireciona a entrada padrão do comando mail
fazendo com que os dados sejam lidos do arquivo
memo e não do terminal.
$ grep Smith /etc/passwd > popular
Redireciona a saída padrão do comando grep
fazendo com que os dados sejam gravado no
arquivo popular
$cat part1 > chapt2
$cat part2 >> chapt2
Cria um arquivo chamado chapt2 com o mesmo
conteúdo do arquivo part1. Lê o conteúdo do
arquivo part2 e adiciona ao final do arquivo
chapt2.

Página: 80
Comandos UNIX

Conectando Comandos
O unix permite que dois ou mais comandos sejam
ligados juntos através de um pipe. O pipe pega a
saída padrão de um comando e usa com entrada
padrão para o outro comando.
command1 | command2 | command3
O caracter | (barra vertical) é usado para
representar o pipeline conectando os comandos.
Exemplo
$ who | wc -l
342
O comando who lista a quantidade de usuários
ativos no sistema passando a sua saída para o
comando wc que com a opção -l conta a
quantidade de linhas geradas.

Página: 81
Comandos UNIX

Criando um alias para um comando


Lembrar-se do nome de um comando e de como
ele é usado muitas vezes é difícil. Assinalando um
nome particular conhecido por você, um alias,
torna mais fácil a operação do sistema.
No ksh a sintaxe do comando alias é
alias name_of_alias=definition_of_alias
Exemplos
$ alias del='rm -i'
$ del memo.txt
rm: remove memo.txt? Y
Isto cria um alias del para o comando rm -i o qual
pede a confirmação da remoção de um arquivo
antes de executar a ação.

Página: 82
Comandos UNIX

Criando um alias para um comando


Exemplos
$ alias
Lista todos os alias conhecidos pelo shell na sua
sessão.
$ alias del
rm -i
Lista o comando associado ao alias del.
$ unalias del
Cancela o alias del para a sessão ativa do shell.
Localizando um comando
Para descobrir se um comando ou um utilitário está
disponível no sistema, use o comando wich ou
whereis.
$ wich command_name
Se o comando é encontrado o pathname é
mostrado. Caso contrário é mostrada a mensagem:
command_name: Command not found
$ whereis command_name
Se existir o comando é mostrado o pathname.

Página: 83
Comandos UNIX

Manipulação de Arquivos
Onde eu estou?
O comando pwd mostra o diretório de trabalho (print
working directory), ou seja, mostra qual é o diretório
corrente.
$ pwd
/home/aluno01
Comando mkdir
Cria um diretório
$ mkdir dir_name
Criar o diretório script como um subdiretório do
/home/aluno01:
$ mkdir /home/aluno01/script (caminho completo)
ou
$ cd /home/aluno01
$ mkdir script (caminho relativo)

Página: 84
Comandos UNIX

Manipulação de Arquivos
Comando cd
Muda de diretório
$ cd dir_name
Se você deseja se mover do diretório /home/aluno01
para o diretório /home/aluno01/script
$ cd script caminho relativo
ou
$ cd /home/aluno01/script (caminho completo)
$ cd (vai para o diretório home)
$ cd .. (Sobe um nível a partir do diretório corrente)
$ cd - (volta para o diretório anteriormente)

Comando rmdir
Remove um diretório
$ rmdir dir_name
1) dir_name deve estar vazio
2) dir_name não deve ser o diretório corrente

Página: 85
Comandos UNIX

Manipulação de Arquivos
Comando ls
Lista o conteúdo de um diretório.
$ ls dir_name (dir_name é opcional)
Exemplo
Para listar o conteúdo de seu diretório home:
$ pwd
/home/aluno01
$ ls
script
Para listar todos os arquivos incluindo os ocultos
$ ls -a
. .. script
Para gerar uma listagem longa dos arquivos
$ ls -l
drwxr-xr-x 2 aluno01 tre 58 Apr 21 16:06 script

Página: 86
Comandos UNIX

Manipulação de Arquivos
Comando cp
Copia de arquivos
$ cp origem destino
$ cp file1 file2 ... Diretorio_destino
Se você está usando mais do que um arquivo em uma
operação, então o destino especificado tem que ser um
diretório. Se o destino é um diretório, as cópias deverão
ter o mesmo nome dos arquivos originais.
Comando mv
Move ou renomeia arquivos
$ mv origem destino
O mv pode ser feito para um arquivo ou uma lista de
arquivos. Se a origem for uma lista de arquivos, então o
destino deve ser um diretório.
O destino pode ser um arquivo ou diretório.
ATENÇÃO: Se o destino e o nome do arquivo já
existirem e se você tiver as permissões corretas para o
arquivo e diretório, você irá sobrescrever o arquivo e não
haverá mensagem de erro. Para evitar este problema
utilize a opção –i.

Página: 87
Comandos UNIX

Manipulação de Arquivos
Comando ln
O comando ln permite que um arquivo tenha mais do
que um nome.
$ ln source_file target_file
Exemplo:
$ pwd
/home/aluno01
$ ln manuals /home/aluno01/man_files
Referencia o arquivo manuals como man_files.
Comando cat
O comando cat mostra e copia arquivos para a tela.
$ cat filename1 filename2
$ cat myscript.sh ( mostra o conteúdo do arquivo
myscrit.sh)
Se a saída do comando cat é mais longa que uma tela, o
arquivo será rolado até que pare na última tela do
arquivo. Neste caso, você será capaz de ler somente a
última tela de informação.

Página: 88
Comandos UNIX

Manipulação de Arquivos
Comando rm
O comando rm remove arquivos de um diretório.
$ rm file1 file2 ...
Exemplo
Remover o arquivo mon_report em seu diretório
corrente:
$ ls
mon_report tri_ltr walrus myscript.sh
$ rm mon_report
$ ls
tri_ltr walrus myscript.sh
O comando rm remove as entradas para um arquivo de
um diretório. Notar que o comando rm padrão não requer
uma confirmação do usuário. Na versão interativa do
comando usar a opção -i. O comando del padrão é
interativo e faz o mesmo trabalho que rm -i.
A opção -r remove recursivamente os diretórios e seus
conteúdos.

Página: 89
Comandos UNIX
Permissões de Arquivos
O comando ls com a opção -l pode ser usado para
obter mais informações sobre arquivos em um
diretório.
$ ls -l
drwxrwxr-x 2 aluno01 tre 1024 Aug 12 10:16 c
drwxrwxr-x 2 aluno01 tre 512 Aug 18 09:55 b
-rwxrwxr-x 1 aluno01 tre 320 Feb 22 07:30 j
(1) (2) (3) (4) (5) (6) (7)
1 - mostra as permissões dos arquivos/diretórios
2 - mostra o número de ligações (links)
3 - mostra o nome do usuário dono do arquivo/diretório
4 - mostra o nome do grupo, para o qual há privilégio de
proteção.
5 - mostra a quantidade de bytes do arquivo
6 - mostra a data que o arquivo foi modificado
7 - mostra o nome do arquivo/diretório

Página: 90
Comandos UNIX
Comando touch
O comando touch atualiza a data e hora de acesso e
modificação do arquivo. O comando pode também
ser usado para criar arquivos com tamanho zero.
$ touch arquivo
$ ls -l
-rwxrwxr-x 1 aluno01 tre 320 Feb 22 07:30 suba

$date
Thu Mar 9 11:03:20 1997

$ touch suba newfile


$ ls -l
-rwxrwxr-x 1 aluno01 tre 320 Mar 9 11:03 suba
-rwxrwxr-x 1 aluno01 tre 0 Mar 9 11:03 newfile

Atualiza a data do arquivo suba e cria um arquivo


newfile com tamanho zero.

Página: 91
Comandos UNIX
Proteção/permissões de arquivos
rwx rwx rwx
------ ------ -----
usuários grupos outros
r=leitura w=gravação x=execução
Para arquivos ordinários
r - pode ler o conteúdo dos arquivos
w - pode mudar ou remover o conteúdo de um arquivo
x - pode executar o arquivo como um comando (r é
necessário)
Para um diretório
r - pode listar o conteúdo do diretório
w - pode criar/remover arquivos do diretório
x - tem permissão de estar no diretório(por exemplo: cd
para o diretório ou executar comandos sobre o diretório)
Para remover um arquivo, é necessário ter
permissões x e w no diretório, não é necessário ter
permissões r e w no arquivo.

Página: 92
Comandos UNIX
Comando chmod
Muda as permissões de um arquivo/diretório
$ chmod opções arquivos
Usando a forma simbólica
u = owner
g = group
o = others
a = all
+ = adiciona permissões
- = remove permissões
Exemplos
$ ls -l newfile
-rwxr--r-- 1 aluno01 tre 58 Apr 21 16:06 newfile
$ chmod go+w newfile
$ ls -l newfile
-rwxrw-rw- 1 aluno01 tre 58 Apr 21 16:06 newfile
ou
$ chmod g+w,o+w newfile
$ ls -l newfile
-rwxrw-rw- 1 aluno01 tre 58 Apr 21 16:06 newfile

Página: 93
Comandos UNIX
Comando chmod
Usando a forma octal
As permissões de arquivos e diretórios podem ser
especificadas na forma simbólica por uma sintaxe de
número octal.
User Group Others
Simbólico rwx rw- r--
Binário 111 110 100
4+2+1 4+2+0 4+0+0
Octal 7 6 4
ou seja
0 = nada 1 = execução
2 = gravação 4 = leitura
Exemplo
$ ls -l newfile
-rwxr--r-- 1 aluno01 tre 58 Apr 21 16:06 newfile
$ chmod 664 newfile
$ ls -l newfile
-rw-rw-r-- 1 aluno01 tre 58 Apr 21 16:06 newfile

Página: 94
Comandos UNIX
Comando umask
Seta a máscara de permissões para
arquivos/diretórios
$ umask 022
A máscara especifica quais permissões serão
determinadas em um novo arquivo ou diretório quando
criado. Ele é um número octal que é usado para
determinar quais permissões um arquivo ou diretório
deve ter quando for criado.
O valor dafault da máscara de permissões é 022.
As permissões defaults para arquivos/diretórios novos
são:
Arquivo -rw-r--r-- 644
Diretório drwxr-xr-x 755

Funcionamento da máscara
Diretórios 777 - 022 = 755
Arquivos 666 - 022 = 644

Página: 95
Comandos UNIX
Funções/Permissões Requeridas
Comando Diretório Arquivo Diretório
Fonte Fonte Destino
cd x n/a n/a
ls r n/a n/a
ls -l r,x n/a n/a
mkdir x,w(pai) n/a n/a
rmdir x,w(pai) n/a n/a
cat x r n/a
pg x r n/a
more x r n/a
mv x,w n/w
cp x r x,w
touch x,w n/w
rm x,w n/a

Página: 96
Comandos UNIX
Manual de Comandos
O comando man dá acesso aos manuais on-line contendo uma
descrição completa de todo comando disponível no sistema.
Os manuais são organizados em diversas seções cada qual
cobrindo uma determinada área.
Estando no manual, use a barra de espaço para avançar uma
página e a tecla enter para avançar uma linha. Pressione a tecla
b para voltar uma tela. Use a tecla q ou <ctrl-c> para sair do
man.
Em alguns sistemas o comando
$ man section_number intro
mostra uma descrição sobre a seção informada.
As seções dos manuais no UNIX estão divididas
como segue:
Section ID Description
1 User commands
1M System administration commands
2 System calls
3 Library functions
4 File formats
5 Headers, tables and Macros
7 Special files
l Local Commands

Página: 97
Comandos UNIX
Manual de Comandos
Exemplos
Lista uma descrição da seção 1 do manual.
$ man 1 intro
Pesquisa o manual online por um comando que contenha a
palavra “mail”.
$ man -k mail
Pesquisa o manual online por um comando que contenha a frase
“copy files”.
$ man -k 'copy files'
Lista a descrição online do que o comando faz.
$ whatis more
more, page (1) - browse or page
through a text file
Lista a página do manual do comando cp (copy files)
$ man cp

Normalmente um manual de comando possui as


seguintes divisões:
Name, Synopsis, Description, Options,
Environment, Examples, Files, See Also,
Warnings, Diagnostics, Bugs.

Página: 98
Comandos UNIX

Listagem dos Comandos Mais Usados


at, batch Executa um comando ou um script na hora especificada
awk Linguagem de processamento e pesquisa de padrões.
banner Mostra uma string em letras grandes
basename Mostra o filename de um pathname
cal Mostra um calendário
cat Mostra e concatena arquivos
cd Muda de diretório
chgrp Troca o grupo de um arquivo
chmod Mudas as permissões de arquivos/diretórios
clear Limpa a tela do terminal
cmp Compara byte-a-byte dois arquivos
compress Comprime um arquivo
cp Copia arquivos/diretórios
cpio Copia estrutura de arquivos
date Mostra/atribui a data do sistema
df Lista o espaço de disco livre no file system
diff Mostra linha-a-linha a diferença entre dois arquivos
du Mostra o número de blocos de disco usados por um arquivo
echo Mostra o argumento na saída padrão

Página: 99
Comandos UNIX

Listagem dos Comandos Mais Usados


ed Editor de linha
file Determina o tipo de um arquivo
find Pesquisa por nome ou por outras características
finger Mostra informações sobre os usuários do sistema
ftp File transfer
grep Pesquisa em um arquivo por uma string ou uma regexp
groups Mostra os usuários de um grupo
history Re-usa linha de comandos anteriores
hostname Mostra o nome da máquina
kill Envia um sinal para um processo ou termina um processo
less Oposto do comando more
ln Cria links físicos ou simbólicos para arquivos
login Loga no sistema
lpq Mostra a fila de jobs na impressora
lpr Envia um job para a impressora
lprm Remove um job da file de impressão
ls Lista o conteúdo de um diretório
mail Lê ou envia mensagens de correio
make Mantém, atualiza e regera programas/arquivos relacionados

Página: 100
Comandos UNIX

Listagem dos Comandos Mais Usados


man Mostra o manual online de um comando
mkdir Cria um diretório
more,page Mostra/pagina o conteúdo de um arquivo texto
mv Move ou renomeia arquivos
nice Executa um comando em baixa prioridade
passwd Muda a password do usuário
ps Mostra o status corrente dos processos
pwd Mostra o pathname do diretório corrente
rlogin Login remoto
rm,rmdir Remove arquivos ou diretórios
sed Stream editor
sleep Suspende a execução por um intervalo de tempo
sort Classifica arquivos
su SuperUser, muda temporariamente para um novo User ID
tail Mostra o final de um arquivo
tar Cria um pacote que contém arquivos e diretórios
tee Replica a saída padrão
touch Atualiza a hora de um arquivo
users Mostra uma lista dos usuários ativos

Página: 101
Comandos UNIX

Listagem dos Comandos Mais Usados


wall Envia mensagem para todos os usuários ativos
wc Conta linhas, palavras e caracteres de um arquivo
what Mostra informações de versão de um arquivo
whereis Localiza um comando no sistema
which Localiza um comando mostrando o pathname
who Mostra quem está ativo no sistema
whoami Mostra o nome do usuário corrente
write Escreve uma mensagem para outro usuário

Página: 102
Comandos UNIX

Atividades
Páginas do man
1. Acesse as páginas do man via comando man. Leia o texto
que se seguirá para conhecer as funcionalidades do man.
2. Usando o comando man, pesquise a palavra calendar. Da
lista gerada, encontre o comando que mostra o calendário.
3. Tendo encontrado o comando cal na etapa anterior, use o
man sem opções para verificar a sintaxe correta deste
comando.
Manipulação de Arquivos
4. Usando o comando pwd, verifique se você está no seu
diretório home, /home/alunoxx, o diretório onde você é
colocado logo após o login.
5. Muda o diretório corrente para o diretório raiz (/).

Página: 103
Comandos UNIX

Atividades
6. Verifique se você está no diretório raiz e liste o seu conteúdo.
7. Execute o comando ls com as opções -a e -R. Qual é o efeito
de cada opção? (Nota: O ls -R gera uma listagem intensa.
Quando já tiver visto o bastante, finalize com a sequência
<ctrl-c>)
8. Retorne para o seu diretório home (/home/alunoxx) e liste o
seu conteúdo incluindo os arquivos ocultos.
9. Copie o arquivo /usr/bin/cat para o seu diretório home.
10. Copie o arquivo /usr/bin/cal para o seu home.
11. Liste os arquivos do diretório corrente. Você deve ver os
dois arquivos que foram copiados.
12. Veja o conteúdo do arquivo /etc/passwd. Use os comandos
cat, pg e more para ver como cada comando trata a saída. O
arquivo /etc/passwd contém uma lista de todos os usuários
cadastrados no sistema.
13. Crie um subdiretório no seu diretório home chamado
myscripts.

Página: 104
Comandos UNIX

Atividades
14. Mova e renomeie os dois arquivos copiados para o seu
diretório home (cat e cal) para o novo subdiretório. Chame-
os de mycat e mycal respectivamente.
15. Torne o novo subdiretório o diretório corrente.
16. Liste o conteúdo do diretório para certificar-se de que os
arquivos foram transferidos.
17. Use o comando mycat para listar o conteúdo do arquivo
.profile do seu diretório home.
18. Torne o seu diretório home o diretório corrente.
19. Crie outro subdiretório em seu diretório home chamado
goodstuff.
20. Copie o arquivo /etc/profile para o seu novo diretório e
chame-o de newprofile.
21. Use o comando cat para ver o arquivo. Está difícil de ler?
Tente o comando pg.

Página: 105
Comandos UNIX

Atividades
22. O arquivo newprofile tem um nome muito longo para ser
digitado. Mude o seu nome para np. Liste o conteúdo do
goodstuff para ter certeza de que a tarefa foi cumprida.
23. Começando do seu diretório home, liste recursivamente a
estrutura hierárquica dos seus arquivos e subdiretórios.
24. Certifique-se de estar em seu diretório home. Remova o
diretório goodstuff.
25. Mude para o diretório goodstuff. Liste todos os arquivos do
diretório incluindo os arquivos ocultos. Remova os
arquivos. Liste novamente o diretório. Note que ainda
existem dois arquivos: “.” e “..”. O diretório pode ser
considerado vazio se apenas estes dois arquivos
permanecerem. Remova o diretório.

Página: 106
Comandos UNIX

Atividades
Listando Informações de Arquivos
26. Mude para o diretório myscripts. Gere uma listagem longa
dos arquivos desse diretório. Note o proprietário e as
permissões dos arquivos copiados no exercício anterior.
27. Agora gere uma listagem longa dos arquivos originais cat e
cal no diretório /usr/bin e compare as permissões das cópias
feitas no diretório myscripts. Você é o proprietário das
cópias mas não dos arquivos originais.
28. Altere o horário de modificação dos arquivos mycal e mycat
do diretório myscripts. Certifique-se de que o horário foi
atualizado. Qual a outra utilidade do comando touch?
29. Crie uma referencia para o arquivo mycal no diretório
myscripts chamado home_mycal em seu diretório home.
Compare as informações detalhadas dos dois arquivos. Há
diferença? Qual é o número de links?

Página: 107
Comandos UNIX

Atividades
30. Mude para o seu diretório home. Execute o home_mycal. A
saída é parecida com o auqe? Agora, mude as permissões
do home_mycal para que você, proprietário do arquivo,
tenha apenas permissão para leitura. Tente executar o
comando mycal novamente. Você conseguiu? Porque?
31. Remova o home_mycal. O arquivo myscripts/mycal foi
removido? Porque?

Trabalhando com Permissão de Arquivos


32. Mude para o diretório myscripts. Usando a notação
simbólica do comando chmod, remova a permissão de
leitura para outros no arquivo mycat. Verifique as novas
permissões.
33. Usando a notação octal, altere as permissões no mycat de
forma que o proprietário só tenha permissão de leitura e
ninguém mais tenha permissão alguma. Verifique as novas
permissões.

Página: 108
Comandos UNIX

Atividades
34. Execute o comando mycat novamente no arquivo .profile.
Funcionou? O que aconteceu?
35. Torne o seu diretório home o diretório corrente. Verifique
se você está em seu diretório home.

Trabalhando com Permissão de Diretórios


36. Altere as permissões do diretório myscripts para que você
tenha apenas permissão de leitura.
37. Gere uma lista longa para verificar se as permissões estão
corretas.
39. Tente gerar uma lista simples do conteúdo do diretório.
Tente uma listagem longa. Conseguiu? Porque?
40. Tente executar o mycal. Conseguiu? Porque?
41. Tente remover o mycal. Conseguiu? Porque?
42. Retorne as permissões do myscript para as permissões
originais e remova o mycal.

Página: 109
Comandos UNIX

Atividades - Respostas
Páginas do man
1. Acesse as páginas do man via comando man. Leia o texto
que se seguirá para conhecer as funcionalidades do man.
$ man man
$ <ctrl-c> ou q quando já tiver lido
2. Usando o comando man, pesquise a palavra calendar. Da
lista gerada, encontre o comando que mostra o calendário.
$ man -k calendar
3. Tendo encontrado o comando cal na etapa anterior, use o
man sem opções para verificar a sintaxe correta deste
comando.
$ man cal

Página: 110
Comandos UNIX

Atividades - Respostas
Manipulação de Arquivos
4. Usando o comando pwd, verifique se você está no seu
diretório home, /home/alunoxx, o diretório onde você é
colocado logo após o login.
$ pwd

5. Muda o diretório corrente para o diretório raiz (/).


$ cd /
6. Verifique se você está no diretório raiz e liste o seu conteúdo.
$ pwd
$ ls
7. Execute o comando ls com as opções -a e -R. Qual é o efeito
de cada opção? (Nota: O ls -R gera uma listagem intensa.
Quando já tiver visto o bastante, finalize com a sequência
<ctrl-c>)
$ ls -a
$ ls -R
<ctrl-c>

Página: 111
Comandos UNIX

Atividades - Respostas
8. Retorne para o seu diretório home (/home/alunoxx) e liste o
seu conteúdo incluindo os arquivos ocultos.
$ cd
$ ls -a
9. Copie o arquivo /usr/bin/cat para o seu diretório home.
$ cp /usr/bin/cat /home/aluno01
ou
$ cp /usr/bin/cat .
10. Copie o arquivo /usr/bin/cal para o seu home.
$ cp /usr/bin/cal /home/aluno01
ou
$ cp /usr/bin/cal .
11. Liste os arquivos do diretório corrente. Você deve ver os
dois arquivos que foram copiados.
$ ls

Página: 112
Comandos UNIX

Atividades - Respostas
11. Liste os arquivos do diretório corrente. Você deve ver os
dois arquivos que foram copiados.
$ ls
12. Veja o conteúdo do arquivo /etc/passwd. Use os comandos
cat, pg e more para ver como cada comando trata a saída.
O arquivo /etc/passwd contém uma lista de todos os
usuários cadastrados no sistema.
$ cat /etc/passwd
$ pg /etc/passwd
$ more /etc/passwd
13. Crie um subdiretório no seu diretório home chamado
myscripts.
$ mkdir myscripts

Página: 113
Comandos UNIX

Atividades - Respostas
14. Mova e renomeie os dois arquivos copiados para o seu
diretório home (cat e cal) para o novo subdiretório. Chame-
os de mycat e mycal respectivamente.
$ mv cat myscripts/mycat
$ mv cal myscripts/mycal
15. Torne o novo subdiretório o diretório corrente.
$ cd myscripts
16. Liste o conteúdo do diretório para certificar-se de que os
arquivos foram transferidos.
$ ls
17. Use o comando mycat para listar o conteúdo do arquivo
.profile do seu diretório home.
$ mycat ../.profile
ou
$ mycat /home/aluno01/.profile

Página: 114
Comandos UNIX

Atividades - Respostas
18. Torne o seu diretório home o diretório corrente.
$ cd
19. Crie outro subdiretório em seu diretório home chamado
goodstuff.
$ mkdir goodstuff
20. Copie o arquivo /etc/profile para o seu novo diretório e
chame-o de newprofile.
$ cp /etc/profile goodstuff/newprofile
21. Use o comando cat para ver o arquivo. Está difícil de ler?
Tente o comando pg.
$ cat goodstuff/newprofile
$ pg goodstuff/newprofile

Página: 115
Comandos UNIX

Atividades - Respostas
22. O arquivo newprofile tem um nome muito longo para ser
digitado. Mude o seu nome para np. Liste o conteúdo do
goodstuff para ter certeza de que a tarefa foi cumprida.
$ mv goodstuff/newprofile goodstuff/np
$ ls goodstuff
23. Começando do seu diretório home, liste recursivamente a
estrutura hierárquica dos seus arquivos e subdiretórios.
$ ls -R
24. Certifique-se de estar em seu diretório home. Remova o
diretório goodstuff.
$ pwd
$ rmdir goodstuff

Página: 116
Comandos UNIX

Atividades - Respostas
25. Mude para o diretório goodstuff. Liste todos os arquivos do
diretório incluindo os arquivos ocultos. Remova os
arquivos. Liste novamente o diretório. Note que ainda
existem dois arquivos: “.” e “..”. O diretório pode ser
considerado vazio se apenas estes dois arquivos
permanecerem. Remova o diretório.
$ cd goodstuff
$ ls -a
$ rm np
$ ls -a
$ cd ..
$ rmdir goodstuff
26. Mude para o diretório myscripts. Gere uma listagem longa
dos arquivos desse diretório. Note o proprietário e as
permissões dos arquivos copiados no exercício anterior.
$ cd myscripts
$ ls -l

Página: 117
Comandos UNIX

Atividades - Respostas
27. Agora gere uma listagem longa dos arquivos originais cat e
cal no diretório /usr/bin e compare as permissões das cópias
feitas no diretório myscripts. Você é o proprietário das
cópias mas não dos arquivos originais.
$ ls -l /usr/bin/cat /usr/bin/cal
28. Altere o horário de modificação dos arquivos mycal e mycat
do diretório myscripts. Certifique-se de que o horário foi
atualizado. Qual a outra utilidade do comando touch?
$ touch mycal mycat
$ ls -l

Página: 118
Comandos UNIX

Atividades - Respostas
29. Crie uma referencia para o arquivo mycal no diretório
myscripts chamado home_mycal em seu diretório home.
Compare as informações detalhadas dos dois arquivos. Há
diferença? Qual é o número de links?
$ ln mycal /home/alunoxx/home_mycal
ou
$ ln mycal ../home_mycal
$ ls -l mycal
$ ls -l /home/alunoxx/home_mycal
ou
$ ls -l ../home_mycal

Página: 119
Comandos UNIX

Atividades - Respostas
30. Mude para o seu diretório home. Execute o home_mycal. A
saída é parecida com o auqe? Agora, mude as permissões
do home_mycal para que você, proprietário do arquivo,
tenha apenas permissão para leitura. Tente executar o
comando mycal novamente. Você conseguiu? Porque?
$ cd
$ home_mycal
$ chmod 455 home_mycal
$ ls -l home_mycal
$ myscripts/mycal
31. Remova o home_mycal. O arquivo myscripts/mycal foi
removido? Porque?
$ rm home_mycal
$ ls -l myscripts/mycal

Página: 120
Comandos UNIX

Atividades - Respostas
Trabalhando com Permissão de Arquivos
32. Mude para o diretório myscripts. Usando a notação
simbólica do comando chmod, remova a permissão de
leitura para outros no arquivo mycat. Verifique as novas
permissões.
$ cd myscripts
$ chmod o-r mycat
$ ls -l mycat
33. Usando a notação octal, altere as permissões no mycat de
forma que o proprietário só tenha permissão de leitura e
ninguém mais tenha permissão alguma. Verifique as novas
permissões.
$ chmod 400 mycat
$ ls -l mycat

Página: 121
Comandos UNIX

Atividades - Respostas
Trabalhando com Permissão de Arquivos
34. Execute o comando mycat novamente no arquivo .profile.
Funcionou? O que aconteceu?
$ mycat ../.profile
ou
$ mycat /home/alunoxx/.profile
35. Torne o seu diretório home o diretório corrente. Verifique
se você está em seu diretório home.
$ cd
$ pwd
Trabalhando com Permissão de Diretórios
36. Altere as permissões do diretório myscripts para que você
tenha apenas permissão de leitura.
$ chmod u-wx myscripts
ou
$ chmod 455 myscripts

Página: 122
Comandos UNIX

Atividades - Respostas
Trabalhando com Permissão de Arquivos
37. Gere uma lista longa para verificar se as permissões estão
corretas.
$ ls -l /home/alunoxx
ou
$ ls -ld myscripts
39. Tente gerar uma lista simples do conteúdo do diretório.
Tente uma listagem longa. Conseguiu? Porque?
$ ls myscripts
$ ls -l myscripts
40. Tente executar o mycal. Conseguiu? Porque?
$ myscripts/mycal
41. Tente remover o mycal. Conseguiu? Porque?
$ rm myscripts/mycal

Página: 123
Comandos UNIX

Atividades - Respostas
42. Retorne as permissões do myscript para as permissões
originais e remova o mycal.
$ chmod 755 myscripts
$ rm myscripts/mycal

Página: 124
MÓDULO 3

COMANDOS BÁSICOS
Parte 2

Página: 125
Comandos Unix

Objetivos
Após o término desta unidade
os alunos serão capazes de:

• Ativar programas nos modos


de Foreground / Background
• Monitorar / Encerrar /
Controlar a execução de
processos
• Trabalhar com o editor de
textos vi
• Elaborar scripts de
comandos

Página: 126
Comandos Unix (cont.)
Monitorando Processos (comando ps)

O comando ps permite-nos observar os processos que estão em


execução no Unix.

$ ps -f
UID PID PPID TTY STIME COMMAND
joe 1000 984 tty1 23:43:38 ksh
joe 1001 1000 tty1 23:43:42 ps -f
$

Página: 127
Comandos Unix (cont.)
Modos de Operação
No Unix os processos possuem dois modos de operação:

Foreground - se caracterizam por manterem a sessão de trabalho


(shell) em estado de espera (também referidos como 1o. Plano).

$ ls -RcF
y/ file1

y:
file2
$

Background - se caracterizam por executarem em paralelo com a


sessão de trabalho (também referidos como 2o. Plano).

$ ls -RcF /usr > bigfile &


$ ps -f
$

Página: 128
Comandos Unix (cont.)
Gerenciando jobs em background

A maioria dos shells, com exceção do Bourne Shell mantém


comandos built-in para manusear jobs em background.

Listando os jobs ativos


$ jobs -l
[1] + 3584 Running processo1
[2] - 3587 Running processo2

Alternando entre Background e Foreground


$ ./simpled
<ctrl-d>
[1]+ Stopped
./simpled
$ jobs
[1]+ Stopped ./simpled
$ ps -lf
F S UID PID PPID C PRI WCHAN STIME TTY TIME CMD
100 S root 551 545 0 67 wait4 00:05 pts/1 00:00:00 ksh
040 T root 646 551 0 65 do_sig 00:13 pts/1 00:00:00 ksh
000 T root 647 646 0 65 do_sig 00:13 pts/1 00:00:00 sleep 5
100 R root 648 551 0 74 - 00:13 pts/1 00:00:00 ps -lf
$ bg
[1]+ ./simpled &
$ ps -lf
F S UID PID PPID C PRI WCHAN STIME TTY TIME CMD
100 S root 551 545 0 67 wait4 00:05 pts/1 00:00:00 ksh
040 S root 646 551 0 68 wait4 00:13 pts/1 00:00:00 ksh
000 S root 650 646 0 68 nanosl 00:13 pts/1 00:00:00 sleep 5
100 R root 651 551 0 71 - 00:13 pts/1 00:00:00 ps -lf
$ fg
./simpled
<ctrl-C>
$

Página: 129
Comandos Unix (cont.)
Edição de texto - vi
O editor vi está disponível em todas as distribuições de sistemas
UNIX enquanto os outros editores não obrigatoriamente. Estando
apto a utilizar o vi garante que você sempre terá um editor
disponível

É um editor de textos capaz de operar com toda a tela e não


apenas na edição de linhas.

Conceitos Básicos do vi
• Buffer de Textos

• Modos de Operação

Página: 130
Comandos Unix (cont.)
Buffer de Texto
Enquanto utilizamos o vi para editar um arquivo existente
estamos trabalhando em um buffer temporário. Se invocarmos o
vi com um nome de arquivo inexistente, o conteúdo do arquivo
existirá apenas no buffer.
Salvando gravamos o conteúdo do buffer para um arquivo
permanente, sobrescrevendo seu conteúdo. Podemos escrever o
buffer para um novo arquivo ou sob outro arquivo existente.

Modos de Operação
Existem três modos de operação no vi.

Modo de Comando
Modo em que nos encontramos sempre que iniciamos o vi.
Permite comandos para mover o cursor no texto e altera-lo.

Modo de Inserção
Este é o modo utilizado para digitação (inserção) de texto no
buffer.

Modo Estendido
Caracteriza-se pelos comandos começarem com : (dois pontos).

Página: 131
Comandos Unix (cont.)
Iniciando o vi

Para iniciar o vi :
$ vi [ arquivo ... ]

Terminando a sessão com o vi


Existem várias maneiras de encerrar uma sessão retornando ao
shell.
Ação Comando
-------------------------------------------
Saindo do vi :q
Salvando a mudanças ZZ ou :wq
Sem salvar as mudanças :q!
Salvando em outro arquivo :w outro
:q

Página: 132
Comandos Unix (cont.)
Comandos do vi
Enquanto não estivermos digitando texto estaremos usando o vi
no modo de comando e digitando comandos de edição
consistindo de um ou mais caracteres.

A sintaxe de um comando de edição é :


operador objeto
O operador é um caractere (como d para deletar) que descreve a
ação a ser aplicada sobre o objeto (uma letra, palavra, sentença,
parágrafo, sessão).
Para retornara ao modo de comando, quando estiver no modo de
inserção, tecle ESC. Caso já esteja no modo de comando o
terminal irá acionar o “beep” (ou similar).

Comandos para entrar no modo de inserção


Ação Comando
-------------------------------------------
Inserir após o cursor a
Inserir antes do cursor i
Adicionar no fim da linha atual A
Inserir no início da linha atual I
Abrir uma linha abaixo da atual o
Abrir uma linha acima da atual O

Página: 133
Comandos Unix (cont.)
Movimentação do cursor

Movendo o cursor na linha atual


Ação Comando
------------------------------------------
próximo caractere l
caractere anterior h
próxima palavra w
próximas n palavras wn
palavra anterior b
n palavras anteriores bn
fim da palavra atual e
início da linha 0
fim da linha $

Movendo o cursor entre linhas


Ação Comando
------------------------------------------
linha abaixo (mesma coluna) j
início da linha abaixo +
linha acima(mesma coluna) k
início da linha acima -

Página: 134
Comandos Unix (cont.)
Movimentação do cursor

Movendo o cursor entre blocos de texto


Ação Comando
------------------------------------------
início da próxima sentença )
início da sentença anterior (
início do próximo parágrafo }
início do parágrafo anterior {

Movendo o cursor pelo arquivo


Ação Comando
------------------------------------------
Início do arquivo 1G
Final do arquivo G

Página: 135
Comandos Unix (cont.)
Movimentação do cursor

Movendo o cursor na tela


Ação Comando
------------------------------------------
topo da tela H
meio da tela M
ultima linha da tela L
ultima linha menos n nL

Movendo o cursor entre telas


Ação Comando
------------------------------------------
avança uma tela ^F
retrocede uma tela ^B
avança meia tela ^D
retrocede meia tela ^U

Página: 136
Comandos Unix (cont.)
Repetindo partes do texto
Pode-se armazenar parte do texto em um buffer temporário
utilizando o comando y e copiar o conteúdo deste buffer em
outra parte do arquivo utilizando o comando p.
Ação Comando
------------------------------------------
Do cursor ao fim da sentença y)
Do cursor ao início do parágrafo y{
Recuperar o texto p

Excluindo texto
Para excluir o texto podemos combinar os comandos de deleção
x e d com o tipo de objeto a ser deletado.
Ação Comando
------------------------------------------
caractere atual x
caractere anterior dh
palavra atual dw
palavra anterior db
linha atual dd
até o final da linha d$
até o início da linha d0
as próximas n linhas ndd
Recuperar o texto deletado p

Página: 137
Comandos Unix (cont.)
Substituindo texto

Para substituir texto podemos combinar os comandos de troca s e c


com o tipo de objeto a ser trocado.

Ação Comando
------------------------------------------
caractere atual s
linha inteira S
palavra atual cw
palavra anterior cb
até o final da linha c$
até o início da linha c0

padrão1 :s/padrão1/padrão2/
por padrão2

todas ocorrências :g/padrão1/s//padrão2/g


do padrão1
pelo padrão2

Página: 138
Comandos Unix (cont.)
Mostrando as opções do vi
Para mostrar as opções do vi:
:set all

Alterando as opções do vi
:set nome_de_opção
:set nome_de_opçao=valor

Exemplos:

:set tabstop=4 (:set ts=4)


:set ignorecase (:set ic)
:set autoident (:set ai)
:set showmode (:set sm)
:set number

Página: 139
Comandos Unix (cont.)
Manipulando blocos de texto

Alguns comandos são utilizados para trabalho com varias linhas


(blocos) de texto.

Ação Comando
------------------------------------------
copiar da linha n ate m :n,m co .
para a linha atual

mover da 1a. linha até :1,10 mo $


a 10 para o fim do arquivo

marcar o inicio do bloco ma


no buffer a

marcar o final do bloco mx


no buffer x

copiar o bloco para o :’a,’x co 1


início do arquivo

Página: 140
Comandos Unix (cont.)
Acionando comandos Unix do vi

Para executar um comando simples use:


:!Comando_Unix

Para obter a saída do comando Unix dentro do vi use:

!!Comando_Unix
:r!Comando_Unix

Para iniciar um novo shell (mantendo a sessão vi) use:

:sh

Retorne ao vi digitando exit ou <ctrl-d>.

Página: 141
Comandos Unix (cont.)
Importando e Exportando dados no vi

Para exportar dados:

Ação Comando
------------------------------------------
Salvar com outro_nome :w outro_nome
Salvar com outro_nome :w!outro_nome
já existente
Salvar da linha atual :.,$ w xyz
no arquivo xyz

Para importar dados:


Ação Comando
------------------------------------------
inserir arquivo xyz :.r xyz
na posição atual
inserir arquivo /tmp/abc
no início do arquivo :0r /tmp/abc

Página: 142
Comandos Unix (cont.)
Utilizando a disciplina de linha do vi no ksh

Normalmente, com o ksh, podemos instruir o shell a utilizar uma


disciplina de linha que simule os comandos mais comuns do vi
para edição do histórico de comandos já digitados.
Alguns SO`s utilizam a variavel EDITOR (HP-UX) para guardar
qual o editor irá ser utilizado, outros (AIX) utilizam o comando
set para informar o editor.

$ export EDITOR=vi (HP-UX)


$ set -o vi (AIX)

A partir de então podemos editar a linha de comando utilizando a


tecla ESC seguida dos comandos de movimentação h, +, -, l.

+, - variam o histórico para a instrução anterior / posterior

Página: 143
Utilização do Sistema
Atividades
Exercício 4
• Após o término deste exercício, o aluno estará apto a:
• Monitorar os processos utilizando o comando ps
• Iniciar e terminar um processo em background
• Editar arquivos com o editor vi
• Editar linhas de comando com a disciplina do vi

Página: 144
Utilização do Sistema
Atividades
Foreground / Background
1. Entre no sistema com seu usuário.
2. Execute o comando sleepdate em foreground.
3. Force o término do comando sleepdate.
4. Execute o comando sleepdate em background gerando a saída para o
arquivo sleepdate.out .
5. Digite o comando necessário para observar o id do processo sleepdate.
6. Force o processo acima para foreground.
7. Envie o processo corrente para background.
8. Force o encerramento do comando sleepdate.

Editor vi
1. Inicie o editor vi.
2. Coloque o vi em modo de inserção.
3. Digite o nome do seu usuário (login).
4. Coloque o vi em modo de comando.
5. Salve o arquivo com o nome meulogin.txt.
6. Saia do editor vi retornando ao shell.

Página: 145
Utilização do Sistema
Atividades
Editor vi (continuação)
7. Inicie o editor vi abrindo o arquivo teste.txt
8. Posicione o cursor no início da 3a. linha.
9. Coloque o vi em modo de edição no final da linha
10. Digite seu nome de login.
11. Coloque o vi em mode de comando
12. Salve seu arquivo com o nome meulogin.txt

13. Abra o arquivo texto.txt


14. Siga os exercícios do instrutor ...

Página: 146
Utilização do Sistema
Atividades
Estrutura do Processo
1. Entre no sistema com seu usuário.
Login: alunoxx (no prompt do login)
Password: password
2. Execute o comando sleepdate em foreground.
$ ./sleepdate
3. Force o término do comando sleepdate.
<ctrl-c>
4. Execute o comando sleepdate em background gerando a saída para o
arquivo sleepdate.out .
$ ./sleepdate > sleepdate.out &
5. Digite o comando necessário para observar o id do processo sleepdate.
$ jobs -l
6. Force o processo acima para foreground.
$ fg
7. Envie o processo corrente para background.
<ctrl-z>
$ bg
8. Force o encerramento do comando sleepdate.
$ jobs -l
[1] + XXXX Running ./sleepdate > sleepdate.out &
$ kill XXXX

Página: 147
Utilização do Sistema
Atividades
Editor vi
1. Inicie o editor vi.
$ vi
2. Coloque o vi em modo de inserção.
Digite i
3. Digite o nome do seu usuário (login).
alunoxx
4. Coloque o vi em modo de comando.
<ESC>
5. Salve o arquivo com o nome meulogin.txt.
:w meulogin.txt
6. Saia do editor vi retornando ao shell.
:q
7. Inicie o editor vi abrindo o arquivo teste.txt
$ vi teste.txt
8. Posicione o cursor no início da 3a. linha.
2+
9. Coloque o vi em modo de edição no final da linha
A
10. Digite seu nome de login.
alunoxx

Página: 148
Utilização do Sistema
Atividades
Editor vi (continuação)
11. Coloque o vi em mode de comando
<ESC>
12. Salve seu arquivo com o nome meulogin.txt
:w! meulogin.txt
13. Abra o arquivo texto.txt
$ vi texto.txt
14. Siga os exercícios do instrutor ...

Página: 149
MÓDULO 4

Técnicas básicas de
operação
Parte 1

Página: 150
Técnicas básicas de
operação

Objetivos
Após o término desta unidade
os alunos serão capazes de:

• Listar os principais file


descriptors
• Descrever o funcionamento
de um pipe
• Descrever o funcionamento
de um filtro

Página: 151
Técnicas básicas de
operação
File Descriptors
• Todo programa possui um file descriptor associado
• Três descritores são associados pelo shell quando o
programa é inicializado (STDIN, STDOUT, STDERR)
• Outros descritores são associados pelo programa quando
ele abre arquivos.

STANDARD < 0
STANDARD > 1
STANDARD 2> 2

Exemplos
$ mail aluno01 < letter
$
Redirecionamento de entrada de um arquivo:<
0 (modificado) letter
1(não modificado) STDOUT
2(não modificado) STDERR

Página: 152
Técnicas básicas de
operação
Exemplos
$ ls > ls.out
$
Redirecionamento da saída de um arquivo: >
0 (não modificado) STDIN
1(modificado) ls.out
2(não modificado) STDERR

$ cat filea fileb 2> errfile


Saída do arquivo A
$
Redirecionamento da saída de erro para um arquivo: 2>
0 (não modificado) STDIN
1(não modificado) STDOUT
2(modificado) errfile

$ cat filea fileb 2> /dev/null


/dev/null é um arquivo especial. Ele possui uma propriedade
única de sempre ficar vazio.

Página: 153
Técnicas básicas de
operação
Redirecionamento Combinado
$ comando < arquivo_entrada > arquivo_saída 2> errfile
$ comando >> appendfile 2>> errfile <
arquivo_de_entrada
Associação
$ comando > arquivo_saída 2>&1
Este comando redireciona a saída de erro para o mesmo
arquivo que a saída padrão.
ATENÇÃO: Isto não é o mesmo que o seguinte:
$ comando 2>&1 > outfile
$ ls -l > ls.file 2>&1
0 (não modificado) STDIN
1 (modificado) ./ls.file
2 (modificado) ./ls.file

$ ls -l 2>&1 >ls.file
0 (não modificado) STDIN
1 (modificado) ./ls.file
2 (modificado) STDOUT

Página: 154
Técnicas básicas de
operação
Pipes
A sequência de um ou mais comandos separados
por uma barra vertical “|” é chamado pipe. A saída
padrão de cada comando torna-se a entrada padrão
do próximo comando.
$ ls | wc -w
40
é equivalente a seguinte entrada:
$ ls > tempfile
$ wc -w tempfile
41 tempfile
$ rm tempfile

Arquivo1
arquivo2 Wc -l 4
ls arquivo3
arquivo4

Página: 155
Técnicas básicas de
operação
Filtros
O termo filtro é frequentemente usado no UNIX
para se referir a qualquer programa que pode ler a
entrada padrão, efetuar algum processamento, e
gravar na saída padrão. Ou seja, um filtro é
qualquer comando que possa ser utilizado entre dois
outros programas em um pipeline.
Assim, wc é considerado um filtro. ls não é
considerado um filtro, uma vez que, ele não lê da
entrada padrão.
Como outros exemplos, cat, tee e sort são filtros
enquanto who, dat, cd pwd, echo, rm, mv e cp não
são.
$ ls | tee ls.out | wc -l

Neste caso, o comando lê a entrada padrão e envia


os dados tanto para a saída padrão como para um
arquivo.

Página: 156
Técnicas básicas de
operação
Atividades
1. Usando o comando ls, liste os arquivos do seu diretório corrente.
Anote o número de arquivos encontrados:
2. Liste os arquivos do seu diretório corrente mas desta vez
redirecione a saída para o arquivo temp.
3. Use o comando apropriado para contar o número de palavras do
arquivo temp. O número confere com o encontrado na instrução 1?
Se não, por que não? Mostre o conteúdo do temp. Remova o
arquivo.
4. Agora use o pipe para contar o número de arquivos no seu
diretório corrente. O resultado obtido foi o esperado? Ele está de
acordo com o resultado da instrução 1?
5. Use o comando que você criou na instrução 4 mas agora adicione
um tee no meio para gravar o resultado da listagem num arquivo
chamado junk2. Você obteve um número na tela? Verifique o
conteúdo do arquivo junk2 para certificar-se de que ele contém o
resultado esperado.
6. Liste em ordem reversa o conteúdo do diretório corrente. Direcione
a lista para um arquivo chamado junk3 e para um programa que
faça a contagem do número de palavras da lista reversa. Adicione a
contagem no final do arquivo junk3. Lembre-se de utilizar a opção
de append de redirecionamento. Neste caso em particular, você terá
surpresas desagradáveis se não tomar esta precaução. Como o
arquivo está sendo usado duas vezes, o redirecionamento com o
overwrite eliminará o conteúdo anterior do arquivo. Teste esta
outra opção para ver o resultado.

Página: 157
Técnicas básicas de
operação
Atividades - Respostas
1. Usando o comando ls, liste os arquivos do seu diretório corrente.
Anote o número de arquivos encontrados:
$ ls
2. Liste os arquivos do seu diretório corrente mas desta vez
redirecione a saída para o arquivo temp.
$ ls > temp
3. Use o comando apropriado para contar o número de palavras do
arquivo temp. O número confere com o encontrado na instrução 1?
Se não, por que não? Mostre o conteúdo do temp. Remova o
arquivo.
$ wc -w temp
$ cat temp
$ rm temp
4. Agora use o pipe para contar o número de arquivos no seu
diretório corrente. O resultado obtido foi o esperado? Ele está de
acordo com o resultado da instrução 1?
$ ls | wc -w

Página: 158
Técnicas básicas de
operação
Atividades - Respostas
5. Use o comando que você criou na instrução 4 mas agora adicione
um tee no meio para gravar o resultado da listagem num arquivo
chamado junk2. Você obteve um número na tela? Verifique o
conteúdo do arquivo junk2 para certificar-se de que ele contém o
resultado esperado.
$ ls | tee junk2 | wc -w
6. Liste em ordem reversa o conteúdo do diretório corrente. Direcione
a lista para um arquivo chamado junk3 e para um programa que
faça a contagem do número de palavras da lista reversa. Adicione a
contagem no final do arquivo junk3. Lembre-se de utilizar a opção
de append de redirecionamento. Neste caso em particular, você terá
surpresas desagradáveis se não tomar esta precaução. Como o
arquivo está sendo usado duas vezes, o redirecionamento com o
overwrite eliminará o conteúdo anterior do arquivo. Teste esta
outra opção para ver o resultado.
$ ls -r | tee junk3 | wc -w >> junk3

Página: 159
MÓDULO 4

Técnicas básicas de
operação
Parte 2

Página: 160
Técnicas básicas de
operação

Objetivos
Após o término desta unidade
os alunos serão capazes de:
Passar parâmetros para um
shell script
• Usar o comando test
• Usar a declaração if
• Implementar shell scripts
interativos
• implementar loop dentro de
scripts

Página: 161
Técnicas básicas de
operação
O que é um Shell Script?
Um shell script é uma coleção de comando armazenado em
um arquivo texto.
Exemplo
$ date
$ pwd
$ ls -l
$ cat script1
date
pwd
ls -l
<ctrl-d>
$
O ksh chama um script em um subshell
Usa-se o comando chmod para tornar um script executável.
chmod a+x script1
Usa-se o comando . (ponto) para executar o script no shell
corrente.

Página: 162
Técnicas básicas de
operação
Return Code de Comandos
Um comando retorna um valor para o processo pai. Por
convenção, zero significa sucesso e qualquer número
diferente de zero significa que um erro ocorreu.
Comando em pipeline retornam um único valor para o
processo pai.
A variável de ambiente $? Contém o return code do último
comando executado.
Exemplo
$ date
$ echo $?
0
$ (Isto mostra que foi concluído com sucesso)

Página: 163
Técnicas básicas de
operação
Variávei Especiais Pré-definidas
$$ contém o id do processo que está sendo
executado.
$0 contém o nome do shell script que está sendo
executado.
$# é o número de parâmetros posicionais passados
para o shell, sem considerar a declaração do
nome do script.
$* contém o valor de todos os parâmetros passados
para o shell, sem incluir a declaração do nome do
script.
$? É o valor de exit do último comando executado.
$! É o número do último processo executado em
background.

Página: 164
Técnicas básicas de
operação
Parâmetros Posicionais
Parâmetros podem ser passados para shell scripts como
argumentos na linha de comando
Eles são tratados no script por:
$1 até $9 para os nove primeiros
${10} até ${n} para dez ou mais (somente para ksh)
Exemplo
$ cat ascript
echo primeiro $1
echo segundo $2
echo terceiro $3
<ctrl-d>
$ ascript A B C
primeiro A
segundo B
terceiro C
$

Página: 165
Técnicas básicas de
operação
O comando expr
Use o comando expr para executar cálculos aritméticos com
inteiros.
Para agrupar expressões use: \(\) define a ordem de avaliação -
caso contrário as regras normais de precedência se aplicam.
Operadores
\* multiplicação
/ divisão
% resto
+ adição
- subtração
Os operadores estão em ordem de precedência: da mais alta para
a mais baixa.
São necessários espaços entre operadores e expressões - exceto
para representar números negativos.
Exemplos
$ var1=6; var2=3
$ expr $var1 / $var2
Arquivo1
2 arquivo2
$ expr $var1 - $var2 arquivo3
arquivo4
3
$ expr \( $var1 + $var2 \) \* 5
45

Página: 166
Técnicas básicas de
operação
Execução Condicional
O return code de um comando ou grupo de comandos pode ser
usado para determinar se o próximo comando deve ser
executado ou não.
Comando1 && comando2
Se o comando1 for bem sucedido então, execute o comando 2
$ ls s* && rm s*
rm s* é executado se o return code de ls s* for zero
comando1 || comando2
Se o comando1 não for bem sucedido então, execute o
comando2
$ cd /dir1 || echo Não posso acessar /dir1
echo é executado se o return code do comando cd for diferente
de zero.

Página: 167
Técnicas básicas de
operação
Comando test
O comando test permite o teste de um determinada condição.
test expressão ou
test [ expressão ]
O comando test pode ser utilizado para teste de status de
arquivos. Alguns dos operadores mais comuns para arquivos
são:
-f arquivo1 arquivo1 é um arquivo ordinário
-d arquivo1 arquivo1 é um diretório
-r arquivo1 arquivo1 é legível por este processo
-w arquivo1 arquivo1 é gravável por este processo
-x arquivo1 arquivo1 é executável por este processo
-s arquivo1 arquivo1 possui tamanho não zero
-n string string possui tamanho não zero
-z string string possui tamanho zero
OBS: Se os colchete [] são usados, deve ser deixado um expaço
em branco entre cada colchete e a expressão.
Exemplo
$ test [ -d /usr/bin1 ]
$ echo $?

Página: 168
Técnicas básicas de
operação
Comando if
A estrutura básica da declaração if é:
if [ condição verdadeira ]
then
execute este conjunto de ações
else
execute etste conjunto de ações alterantivas
fi

Exemplo
$ cat dia
if [ “$1” = “segunda” ]; then
echo “Dia de ir trabalhar”
else
exit 0
fi
<ctrl-d>
$ dia segunda
Dia de ir trabalhar

Página: 169
Técnicas básicas de
operação
Comando read
O comando read lê uma linha da entrada padrão e carrega os
valores de cada campo da linha de entrada para uma variável shell.
Se houver mais argumentos do que variáveis para recebe-los via
read, a última variável receberá todos os argumentos restantes
passados pelo usuário.

$ cat delfile
echo “Digite o nome do arquivo:”
read nome
if test -f $nome
then
rm $nome
else
echo “$nome não existe ou não eh um arquivo ordinario”
exit 1
fi
<ctrl-d>
$ delfile
Digite o nome do arquivo:_

Página: 170
Técnicas básicas de
operação
Comando for
A estrutura do loop for é:
for identificador in lista
do
comandos a serem executados
done

O comando for usa a variável identificador para cada valor,


palavra ou parâmetro posicional recebido individualmente, e
executa o bloco de comandos. A execução termina quando a lista
de parâmetros posicionais ou palavras chega ao fim.

Exemplo

for arquivo in /tmp/*


do
mv $arquivo $arquivo.old
done

Página: 171
Técnicas básicas de
operação
Comando while
A estrutura do loop while é:
while expressao
do
comandos a serem executados
done

O loop while será executado somente se a expressão for


verdadeira. Usando o argumento true com o while, forçamos a
execução dos comandos até que o script seja interrompido, por
exemplo, via <ctrl-c>

Exemplo

while true
do
echo “Hoje e `date`”
echo “Ha `ps -e | wc -l ` processos em execucao”
echo “Há `who | wc -l `usuarios logados”
sleep 6
done

Página: 172
Técnicas básicas de
operação
Atividades
1. Crie um shell script chamado parameters que deve ecoar as cinco
linhas a seguir usando variáveis especiais pré-definidas da shell
para preencher os espaços em branco. Execute o script usando os
parâmetros 10 100 1000.
O nome deste shell script eh
O primeiro paramatro passado foi o número
O segundo parametro passado foi o numero
O terceiro parametro passado foi o numero
ao todo foram passados ____ parametros opcionais.
2. Usando execução condicional, crie um shell script chamado
checkfile que irá checar a existência do arquivo parameters no seu
diretório, se ele existir, deve ser utilizado um comando para listar o
seu conteúdo. Execute o script
3. Modifique o script checkfile e altere o nome do arquivo parameters
para noname (certifique-se de que você não tem nenhum arquivo
com este nome no seu diretório corrente). Também, usando
execução condicional, se o comando ls não for bem sucedido,
exiba uma mensagem de erro, “Arquivo não enocntrado”. Execute
o script.
4. Modifique o script checkfile para que a mensagem de erro do
comando ls não apareça na tela. Execute o script.
5. Modifique o script checkfile para que ele aceite um único
parâmetro na linha de comando para os comandos ls e cat. Execute
o script duas vezes uma vez usando o nome parameters e depois
usando o noname

Página: 173
Técnicas básicas de
operação
Atividades
6. Usando um loop for, modifique o script checkfile para aceitar
múltiplos arquivos na linha de comando. Se os arquivos forem
encontrados, mostre todos eles. Se os arquivos não forem
encontrados, mostre uma mensagem de erro indicando quais os
arquivos que não foram encontrados. Veja no seu diretório alguns
nomes de arquivos que possam ser usados. Execute o script usando
nomes válidos e inválidos.
7. Modifuqe o script checkfile para utilizar a declaração if e o
comando test para se a execução do comando ls foi bem sucedida.
Execute o script como foi feito na etapa anterior. ( Dica: Os return
code são tratados neste script.)
8. Crie um loop infinito com o while que fique exibindo na tela a
mensagem “Fora para o Jantar” a cada 5 segundos num arquivo
chamado dinner. Execute o scipt. Quando já tive visto o bastante,
cancele o programa.
9. Na linha de comando, mostre o resultado da multiplicação de 5 por
6.
10. Agora, usando o expr crie um shell script chamado math para
multiplar dois números quaisquer passado como parâmetros na
linha de comando. Execute o script multiplicando 5 por 6.
Experimente com outros números.

Página: 174
Técnicas básicas de
operação
Atividades - Respostas
1. Crie um shell script chamado parameters que deve ecoar as cinco
linhas a seguir usando variáveis especiais pré-definidas da shell
para preencher os espaços em branco. Execute o script usando os
parâmetros 10 100 1000.
O nome deste shell script eh
O primeiro paramatro passado foi o número
O segundo parametro passado foi o numero
O terceiro parametro passado foi o numero
Ao todo foram passados ____ parametros opcionais.
$ vi parameters
echo “O nome deste shell script eh $0”
echo “O primeiro parametro passado foi o numero $1”
echo “O segundo parametro passado foi o numero $2”
echo “O terceiro parametro passado foi o numero $3”
echo “Ao todo foram passados $# parametros opcionais”
$ chmod a+x parameters
$ parameters 10 100 1000

Página: 175
Técnicas básicas de
operação
Atividades - Respostas
2. Usando execução condicional, crie um shell script chamado
checkfile que irá checar a existência do arquivo parameters no seu
diretório, se ele existir, deve ser utilizado um comando para listar o
seu conteúdo. Execute o script
$ vi checkfile
ls parameters $$ cat parameters
$ chmod a+x checkfile
$ checkfile
3. Modifique o script checkfile e altere o nome do arquivo parameters
para noname (certifique-se de que você não tem nenhum arquivo
com este nome no seu diretório corrente). Também, usando
execução condicional, se o comando ls não for bem sucedido,
exiba uma mensagem de erro, “Arquivo não enocntrado”. Execute
o script.
$ vi checkfile
ls noname && cat noname || echo “Arquivo não encontrado”
$ checkfile
4. Modifique o script checkfile para que a mensagem de erro do
comando ls não apareça na tela. Execute o script.
$ vi checkfile
ls noname 2> /dev/null && cat noname || echo “Arquivo não
encontrado”
$ checkfile

Página: 176
Técnicas básicas de
operação
Atividades - Respostas
5. Modifique o script checkfile para que ele aceite um único
parâmetro na linha de comando para os comandos ls e cat. Execute
o script duas vezes uma vez usando o nome parameters e depois
usando o noname
$ vi checkfile
ls $1 2> /dev/null && cat $1 || echo “Arquivo $1 não
encontrado”
$ checkfile parameters
$ checkfile noname
6. Usando um loop for, modifique o script checkfile para aceitar
múltiplos arquivos na linha de comando. Se os arquivos forem
encontrados, mostre todos eles. Se os arquivos não forem
encontrados, mostre uma mensagem de erro indicando quais os
arquivos que não foram encontrados. Veja no seu diretório alguns
nomes de arquivos que possam ser usados. Execute o script usando
nomes válidos e inválidos.
$ vi checkfile
for x in $*
do
ls $x 2> /dev/null && cat $x || echo “$x não foi encontrado”
done
$ ls
$ checkfile nome1 nome2 nome3 (Usando nomes válidos e
inválidos)

Página: 177
Técnicas básicas de
operação
Atividades - Respostas
7. Modifuqe o script checkfile para utilizar a declaração if e o
comando test para se a execução do comando ls foi bem sucedida.
Execute o script como foi feito na etapa anterior. ( Dica: Os return
code são tratados neste script.)
$ vi checkfile
for x in $*
do
ls $x 2> /dev/null
if [ “$?” -eq 0 ]; then
cat $x
else
echo “$x não foi encontrado”
fi
done
$ checkfile nome1 nome2 ...

Página: 178
Técnicas básicas de
operação
Atividades - Respostas
8. Crie um loop infinito com o while que fique exibindo na tela a
mensagem “Fora para o Jantar” a cada 5 segundos num arquivo
chamado dinner. Execute o scipt. Quando já tive visto o bastante,
cancele o programa.
$ vi dinner
while true
do
echo “Fora para o Jantar”
sleep 5
done
$ chmod a+x dinner
$ dinner
<ctrl-c>
9. Na linha de comando, mostre o resultado da multiplicação de 5 por
6.
$ expr 5 \* 6
10. Agora, usando o expr crie um shell script chamado math para
multiplar dois números quaisquer passado como parâmetros na
linha de comando. Execute o script multiplicando 5 por 6.
Experimente com outros números.
$ vi math
expr $1 \* $2
$ chmod a+x math
$ math 5 6

Página: 179