Você está na página 1de 86

Introduo ao LINUX

e
Programao em Script-Shell

Programa de Educao Tutorial


Telecomunicaes

PET
TELE )))
Universidade Federal Fluminense
Niteri-RJ
2004

Prefcio
O Programa de Educao Tutorial (PET) possui como objetivo maior realizar atividades de pesquisa,
ensino e extenso de forma no dissociada, isto , desenvolver projetos que integrem em si estes trs
aspectos. Neste contexto, o grupo PET-Tele desenvolve diversas apostilas, no como um m em si
mesmas, mas como forma de realizar tambm outras atividades.
O desenvolvimento dessas apostilas iniciado com um trabalho de pesquisa sobre o tema escolhido.
Aps este perodo inicial, produz-se material didtico sobre o assunto, visando transmitir o conhecimento adquirido para os alunos do curso de graduao e outros interessados. Eventualmente, quando
ocorre alguma solicitao, os alunos do grupo fornecem cursos sobre os assuntos abordados na apostila.
At o momento, as seguintes apostilas esto disponveis no site do PET:

HTML Linguagem de programao para hipertextos, principalmente empregada na construo de


pginas da Internet (webpages ).

LaTeX Sistema de edio de texto largamente utilizado em meios acadmicos e cientcos, bem como
por algumas editoras nacionais e internacionais.

LINUX e Script-Shell Introduo ao sistema operacional GNU/Linux e programao em utilizando


o shell.

MATLAB Ambiente de simulao matemtica, utilizado em diversas reas prossionais.


SPICE Ambiente de simulao de circuitos eltricos (analgicos e digitais), utilizado em projeto de
circuitos discretos e integrados.

Nota desta Apostila


Esta apostila visa introduzir o usurio ao ambiente do sistema operacional Linux da famlia UNIXLike, explicando seu sistema de arquivos, seus processos caractersticos e seus comandos. Alm disso,
tem por objetivo apresentar programao Script-Shell, ensinando a criar e executar programas, apresentando os comandos mais utilizados na construo de scripts, alm de manipulao de variveis, uso
de estruturas bsicas de deciso e controle e exemplos diversos.
A apostila est dividida em 3 partes:
O contedo da primeira parte abrange um breve histrico, alguns conceitos e caractersticas dos
Sistemas Operacionais, hardware e software havendo maior destaque para o Sistema Operacional
UNIX.
i

A segunda contm os aspectos bsicos do Linux, assim como os principais comandos utilizados
para realizar tarefas no Linux.
A ltima parte da apostila envolve os principais conceitos de programao utilizando o shell do
Linux.
O principal motivo da abordagem desses 3 temas em uma nica apostila foi o de levar o usurio
iniciante a ter uma viso mais ampla do funcionamento de um sistema operacional quando um comando
digitado na tela de um terminal ou quando executado um script.
No se pretende com este manual apresentar todos os comandos do Linux e suas aplicaes mais
usadas. Cada usurio usar mais um conjunto de comandos do que outros dependendo de seus
objetivos. Existem comandos especcos para redes, para manipulao de arquivos, para congurao
de dispositivos, etc. Um livro seria pouco para esgotar todas as facilidades e funes que o Linux
oferece.
Espera-se que com essa apostila o usurio iniciante conhea o bsico do Linux de forma clara e o
usurio mais experiente a use como referncia.
Quanto ao aspecto de programao, vale lembrar que um usurio no se tornar um grande programador apenas lendo uma apostila ou um livro. preciso prtica, fazer programas, testar funes,
estudar programas prontos para entender seu funcionamento, etc. Uma grande vantagem do Linux
que suas distribuies vm com os scripts abertos, para que o usurio possa ler, entender e adaptar
s suas necessidades, podendo at mesmo fazer uma nova distribuio com base na outra. Bastando
para isso, vontade de aprender e curiosidade. As man pages do Unix e dos interpretadores de comandos como o bash possuem tudo o que for necessrio para entender os comandos de uma forma mais
completa.
No m da apostila, se encontra um guia de sites, livros e apostilas usados como base para a
construo desta. E outras referncias importantes contendo um amplo e importante contedo para
o leitor usar am de aprimorar seu conhecimento no Linux e programao utilizando o shell.

Universidade Federal Fluminense

ii

PETTELE)))

Sumrio
Prefcio

1 Conceitos Gerais

1.1

1.2

1.3

Introduo ao Hardware . . . . . . . . . . . . . . . . . . . . . . .
1.1.1 Resoluo de problemas X Mapeamento de domnios . . .
1.1.2 Funes lgicas e aritmticas bsicas . . . . . . . . . . . .
1.1.3 Implementao de funes matemticas por circuitos . . .
1.1.4 Computador X Mquina de nveis . . . . . . . . . . . . . .
Introduo ao software . . . . . . . . . . . . . . . . . . . . . . . .
1.2.1 Computador X Sistema Operacional . . . . . . . . . . . .
1.2.2 Interface de comunicao com o Sistema Operacional (SO)
1.2.3 Interpretador de comandos (shell ) de um SO . . . . . . . .
Famlia UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.1 Sistemas UNIX . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2 Interfaces do UNIX . . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

2 Introduo ao Linux
2.1

2.2

2.3

Aspectos bsicos do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . .


2.1.1 Startup e shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.1.2 Abertura de seo no Linux . . . . . . . . . . . . . . . . . . . . . .
2.1.3 Usurio, superusurio (root ), grupos, acesso, proteo . . . . . . . .
2.1.4 Sesso, login, password, logout . . . . . . . . . . . . . . . . . . . . .
2.1.5 Consoles virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2.1 Sistema hierrquico, rvore de diretrios, montagem de ramicaes
2.2.2 Tipos bsicos de arquivos: plain les, directory . . . . . . . . . . .
2.2.3 Permisses para acesso a arquivos . . . . . . . . . . . . . . . . . . .
2.2.4 Diretrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 Processos e subprocessos . . . . . . . . . . . . . . . . . . . . . . . .
2.3.2 Controle de processos . . . . . . . . . . . . . . . . . . . . . . . . . .

3 Comandos
3.1
3.2

Comandos de ajuda . . . . . . . . . . . . . . .
Comandos e utilitrios bsicos . . . . . . . . .
3.2.1 Comandos de manipulao de arquivos
3.2.2 Redirecionamento de entrada e sada .
iii

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

2
2
2
3
3
4
4
5
5
5
5
7

10
10
10
10
11
11
11
11
12
12
14
15
15
16

18

18
19
19
34

Sumrio
3.3

Sumrio
Expresses Regulares e Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Introduo ao script-shell para LINUX


4.1
4.2
4.3
4.4
4.5
4.6
4.7

Aspectos bsicos . . . . . . . . . . . . . .
4.1.1 Script e Script Shell . . . . . . . .
Execuo do programa . . . . . . . . . . .
4.2.1 Erros na execuo . . . . . . . . . .
4.2.2 Quoting . . . . . . . . . . . . . . .
Comentrios . . . . . . . . . . . . . . . . .
Impresso na tela . . . . . . . . . . . . .
Passagem de parmetros e argumentos . .
4.5.1 Leitura de parmetros . . . . . . .
Funes . . . . . . . . . . . . . . . . . . .
4.6.1 Execuo de script por outro script
Depurao . . . . . . . . . . . . . . . . . .

5 Manipulao de variveis
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8

Palavras Reservadas . .
Criao de uma varivel
Deleo de uma varivel
Visualizao de variveis
Proteo de uma varivel
Substituio de variveis
Variveis em vetores . .
Variveis do sistema . .

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

6 Testes e Comparaes em Script-Shell


6.1
6.2
6.3
6.4
6.5
6.6

Cdigo de retorno . . . .
Avaliao das expresses
Operadores booleanos . .
Testes Numricos . . . .
6.4.1 O Comando let
Testes de Strings . . . .
Testes de arquivos . . . .

7 Controle de uxo
7.1
7.2
7.3

Deciso simples . . . . .
Deciso mltipla . . . .
7.2.1 O comando case
Controle de loop . . . . .
7.3.1 While . . . . . .
7.3.2 Until . . . . . . .
7.3.3 For . . . . . . . .

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

A O Projeto GNU e o Linux

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.

A.1 Software Livre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Universidade Federal Fluminense

iv

44

46

46
46
47
48
48
49
50
51
53
55
57
59

60

60
60
62
62
62
62
63
63

66

66
66
67
67
68
69
71

72

72
73
73
74
74
75
75

78

78

PETTELE)))

Sumrio

Sumrio

B Editor de textos vi
B.1 Comandos internos - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2 Comandos da ltima linha - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Referncias Bibliogrcas

Universidade Federal Fluminense

80

80
81
82

PETTELE)))

Captulo 1
Conceitos Gerais
1.1 Introduo ao Hardware
1.1.1 Resoluo de problemas X Mapeamento de domnios
Como j foi visto em outras disciplinas, possvel descrever situaes atravs de equaes. Por
exemplo, na Fsica, temos as leis da natureza mapeadas por equaes, permitindo que antecipemos
os resultados. Conhecendo a equao que descreve o problema, que pode estar em um domnio
complicado, podemos transport-la para outro domnio mais simples (que j pode ter uma soluo
conhecida), onde obtemos resultados que podem ser levados de volta ao domnio inicial. A resoluo
do problema pode ser denida em quatro etapas:
1. Mapeamento do problema real em um problema matemtico;
2. Equacionamento do problema matemtico;
3. Mapeamento do equacionamento em um algoritmo;
4. Adequao do algoritmo a uma linguagem de programao.

1.1.2 Funes lgicas e aritmticas bsicas


possvel a representao de todo um sistema numrico utilizando apenas "zeros"e "uns". Chamamos
esse sistema de sistema binrio e foi desenvolvida com ele uma lgica, a lgica BOOLEANA. Atravs
dela, podemos implementar solues num domnio de fcil manipulao, uma vez que podemos considerar, por exemplo, uma lmpada acesa como nvel lgico '1' e uma apagada como '0'. Do mesmo
modo, podemos trabalhar com tenso eltrica:

com tenso - '1';


sem tenso - '0'.
Tabela das funes lgicas:

Captulo 1. Conceitos Gerais


A
0
0
1
1

B
0
1
0
1

1.1. Introduo ao Hardware

AND
0
0
0
1

OR
0
1
1
1

XOR
0
1
1
0

NAND
1
1
1
0

NOR
1
0
0
0

XNOR
1
0
0
1

NOT A
1
1
0
0

Tabela 1.1: Tabela de Funes Lgicas

1.1.3 Implementao de funes matemticas por circuitos


Uma vez conhecida a Lgica Booleana podemos, atravs da combinao de OR's, AND's, etc, construir
circuitos capazes de somar, multiplicar, subtrair, enm, realizar toda e qualquer operao matemtica.

1.1.4 Computador X Mquina de nveis


Um computador uma mquina digital capaz de solucionar problemas atravs de instrues que lhe
so fornecidas. Cada computador tem sua linguagem de mquina, que consiste em todas as instrues
primitivas que a mquina pode executar. Na verdade, pode ser dito que uma mquina dene uma
linguagem e uma linguagem dene uma mquina.
Essas instrues mais bsicas do computador geralmente se resumem a adicionar, vericar se um
nmero zero ou mover um dado. E estas so realizadas pelo circuito eletrnico. Seria complicado
para um humano escrever um programa com base nestas simples instrues. Uma soluo para esse
problema escrever o programa em uma linguagem (que chamaremos de L2) diferente da linguagem
de mquina (L1). Ento a execuo de um programa escrito em L2 dever acontecer em duas etapas.
Primeiro L2 transformada 1 em L1. Em seguida L1 executada diretamente. Assim, poderamos
pensar na existncia de uma mquina virtual cuja linguagem de mquina L2. Estentendo esse
exemplo, poderiam ser criadas outras linguagens L3, L4, L5, etc..., at atingir um nvel de linguagem
conveniente ao ser humano. Como cada linguagem utiliza sua anterior como base, podemos pensar no
computador como sendo composto por vrias camadas ou nveis, uma mquina multinvel.
Em grande parte dos computadores atuais h cerca de 7 nveis. A seguir h uma breve apresentao
de cada um desses nveis. Veja Fig. 1.1.

Figura 1.1: Esquema de nveis de um computador.

Nvel 0 - o hardware da mquina. Consiste nas portas lgicas formando os circuitos.


Nvel 1 - o nvel onde esto os microprogramas. o verdadeiro nvel de linguagem de
mquina. Esses microprogramas interpretam as instrues do nvel 2, para o nvel 0 executar.
1 Entende-se

por transformao de uma linguagem em outra como traduo ou interpretao.

Universidade Federal Fluminense

PETTELE)))

Captulo 1. Conceitos Gerais

1.2. Introduo ao software

Nvel 2 - Nvel de mquina convencional. Contm o conjunto de instrues que sero interpretados pelo microprograma.
Nvel 3 - um nvel hbrido pois possui instrues do nvel 2 e outras caractersticas novas.
chamado de sistema operacional.
Nvel 4 - Nvel de montagem.
Nvel 5 - Contm as linguagens usadas pelos programadores para resolver programas.
Nvel 6 - Consiste nos programas feitos para trabalhar em determinada aplicao. Ex: editores
de texto, simuladores matemticos, eltricos, etc.

1.2 Introduo ao software


O software de um computador pode ser dividido, basicamente, em duas categorias:

Programas de sistema - Gerenciam a operao do computador. O mais importante destes o


Sistema Operacional.
Programas de aplicao - So aqueles que o usurio trabalha usualmente para resolver determinados problemas como editores de imagem, texto, jogos, etc.

1.2.1 Computador X Sistema Operacional


O Sistema Operacional controla todos os recursos do computador e fornece a base sobre a qual os
programas e aplicativos so escritos. Ele a interface do usurio e seus programas com o computador e
responsvel pelo gerenciamento de recursos e perifricos (como memria, discos, arquivos, impressoras,
CD-ROMs, etc.) e a execuo de programas.
A parte mais baixa desta interface com o hardware considerada o Kernel do sistema operacional,
traduzindo: Cerne do SO. no kernel que esto denidas funes para operao com perifricos
(mouse, disco, impressora, interfaces serial/paralela), gerenciamento de memria, entre outros.
O kernel a parte mais importante do sistema operacional, pois, sem ele, a cada programa novo que
se criasse seria necessrio que o programador se preocupasse em escrever as funes de entrada/sada,
de impresso, entre outras, em baixo nvel. Por isso, quando h perifricos que o kernel no tem
funo pronta, necessrio escrever a interface para eles.

1.2.2 Interface de comunicao com o Sistema Operacional (SO)


O SO pode ser visto como uma mquina estendida, quando apresenta ao usurio uma mquina virtual
equivalente ao hardware, porm muito mais simples de programar. Ele isola o usurio dos detalhes de
operao do disco.
Ele tambm pode ser visto como gerente de recursos ao passo que ele gerencia os usurios de cada
um dos recursos da mquina, combinando o tempo de uso de cada um e garante o acesso ordenado
de usurios a recursos atravs da mediao dos conitos entre as requisies dos diversos processos
usurios do sistema. Por exemplo, o controle que o sistema operacional faz com os pedidos de diferentes
usurios, em uma rede, para utilizar a impressora.

Universidade Federal Fluminense

PETTELE)))

Captulo 1. Conceitos Gerais

1.3. Famlia UNIX

1.2.3 Interpretador de comandos (shell ) de um SO


No caso do SO UNIX, o interpretador de comandos chamado Shell e exerce a funo de um programa
que conecta e interpreta os comandos digitados por um usurio. a interface que o usurio utiliza
para enviar comandos para o sistema.
Dos vrios programas Shell existentes, o Bourne Shell, o Korn Shell e o C Shell se destacam por
serem os mais utilizados e conhecidos. Mas qualquer programador pode fazer o seu Shell. Estes shells
tornaram-se conhecidos pois j vinham com o sistema, exceto o Korn que tinha que ser adquirido
separadamente. O Bourne Shell vinha com o System V e o C Shell com o BSD. O Korn Shell uma
melhoria do Bourne Shell. H tambm o Bash (Bourne Again Shell ). Mais informaes sobre estes
shells podem ser vistas no captulo 4.
Os comandos podem ser enviados de duas maneiras para o interpretador: de forma interativa e
no-interativa.

Interativa: os comandos so digitados no prompt de comando e passados ao interpretador de comandos um a um. Neste modo, o computador depende do usurio para executar uma tarefa ou
prximo comando.

No-interativa: so usados arquivos de comandos criados pelo usurio (scripts ) para o computador

executar os comandos na ordem encontrada no arquivo. Neste modo, o computador executa os


comandos do arquivo um por um e dependendo do trmino do comando, o script pode checar
qual ser o prximo comando a ser executado. O captulo 4 descreve a construo de scripts.

1.3 Famlia UNIX


1.3.1 Sistemas UNIX
O UNIX um sistema operacional multitarefa, ou seja, permite a utilizao do processador entre vrias
tarefas simultaneamente, multiusurio, disponvel para diversos hardwares. Ele possui a capacidade
de criar opes especcas para cada usurio, as quais so ativadas quando o usurio se loga ao
computador.
As razes do UNIX encontraram-se na necessidade, na dcada de 70, de um sistema multitarefa
convel e aplicvel ao ambiente dominante na poca, um mainframe (um grande computador central)
e uma srie de terminais ligados a ele. No meio da programao, costuma-se dizer que o UNIX foi
projetado por programadores para programadores j que possui certas caractersticas desejadas por
eles como o de ser um sistema simples com grande exibilidade.

Histrico do UNIX
Abaixo temos um cronograma da criao do UNIX:

Dcadas de 40 e 50:
Todos os computadores eram pessoais quanto a forma de utilizao. O usurio reservava um
horrio para utiliz-lo.

Dcada de 60:
Atravs dos sistemas Batch , o usurio enviava ao centro de processamento de dados um job
em cartes perfurados para que esse fosse processado pelo computador. Aproximadamente uma
Universidade Federal Fluminense

PETTELE)))

Captulo 1. Conceitos Gerais

1.3. Famlia UNIX

hora depois da submisso, o usurio podia buscar os resultados de seu programa. Porm, se
houvesse algum erro no programa escrito, o usurio s saberia horas depois, perdendo seu tempo.
Para resolver esse problema, foi criado um sistema de compartilhamento de tempo, o CTSS, no
MIT, onde cada usurio tinha um terminal on-line sua disposio.
Aps o CTSS, os Laboratrios Bell com o MIT e a General Eletric comearam um programa
grandioso de criar um novo sistema operacional que suportasse centenas de usurios simultaneamente em regime de compartilhamento de tempo (timesharing ). Tal sistema foi denominado
MULTICS (MULTiplexed Information and Computing Service), que seria multi-usurio, multitarefa e teria um sistema de arquivos hierrquico.

Dcada de 70:
A AT&T, controladora da Bell Labs, insatisfeita com o progresso do MULTICS cortou o projeto
e alguns programadores da Bell que trabalharam no projeto, como Ken Thompson, implementaram a verso monousurio do MULTICS em linguagem de montagem em um minicomputador,
o PDP-7. Brian Kernighan, outro programador da Bell, deu o nome do novo sistema de UNICS
como deboche ao nome do sistema anterior. Mais tarde o nome foi mudado para o conhecido
UNIX.
Em seguinda, o UNIX foi escrito para mquinas do tipo PDP-11. E como era necessrio reescrever o sistema toda vez que ele fosse transportado para outra mquina, Thompson reescreveu
o UNIX em uma linguagem de alto nvel desenvolvida por ele, a Linguagem B. Para corrigir
algumas imperfeies, Denni Ritchie, que tambm trabalhava na Bell Labs, desenvolveu a Linguagem C. Juntos, em 1973, eles reescreveram o UNIX em C. Dessa forma, foi garantida a
portabilidade.
Em 1974, Thompson e Ritchie publicaram um artigo sobre o novo sistema operacional UNIX,
o que gerou um grande entusiasmo no meio acadmico. Como a AT&T era um monoplio
controlado atuante na rea das telecomunicaes, no foi permitida sua entrada no ramo da
computao. Assim, a Bell Labs no colocou objees para licenciar o UNIX para as universidades e empresas.
Em 1977 existiam cerca de 500 computadores com UNIX no mundo todo.
Pelo fato do UNIX ser fornecido com seu cdigo fonte completo, muitas pessoas passaram a
estud-lo e organizar seminrios para trocas de informaes, visando a eliminao de Bugs e
incluso de melhoramentos. A primeira verso padro do UNIX foi denominda Verso 6 pois
estava descrita na sexta edio do Manual do Programador UNIX.

Dcada de 80:
Com a diviso da AT&T em vrias companhias independentes, imposta pelo gorverno americano
em 1984, foi possvel a criao de uma subsidiria dela no ramo da computao. Ento foi
lanado pela AT&T a primeira verso comercial do UNIX, o System III, seguida pelo System
V , sendo que cada verso era maior e mais complicada que a antecessora.
Auxiliada pela DARPA (Defense Advanced Research Projects Agency ), a Universidade de Berkeley passou a distribuir uma verso melhorada da Verso 6, chamada 1BSD (First Berkeley Software Distribution ), seguida pela 2BSD, 3BSD e 4BSD. Esta ltima possuindo muitos melhoramentos, sendo o principal, o uso de memria virtual e da paginao, permitindo que programas

Universidade Federal Fluminense

PETTELE)))

Captulo 1. Conceitos Gerais

1.3. Famlia UNIX

fossem maiores que a memria fsica. Tambm, a ligao de mquinas UNIX em rede, desenvolvida em Berkeley, fez com que o padro de rede BSD, o TCP/IP, se tornasse padro universal.
Essas modicaes zeram com que fabricantes de computadores, como a Sun Microsystems e
a DEC, baseassem suas verses no UNIX de Berkeley.
Em 1984 j existiam cerca de 100.000 computadores com UNIX rodando em diferentes plataformas.
No nal da dcada, estavam circulando duas verses diferentes e incompatveis, a 4.3BSD e o
System V Release 3. Isso tornou praticamente impossvel aos fornecedores de software ter a
certeza de que seus programas pudessem rodar em qualquer sistema UNIX.
Ento, o Comit de Padronizao do IEEE fez a primeira tentativa de unicao dos dois
padres. O nome escolhido do projeto foi POSIX (Portable Operating System). Foi criado
aps grandes discusses o padro denominado 1003.1, contendo a interseo das caractersticas
tanto da 4.3 BSD quanto do System V. Porm, um consrcio, denominado OSF (Open Software
Foundation ), foi formado principalmente pela IBM (que comercializava o sistema AIX ), DEC,
Hewlett-Packard com o intuito de formar um sistema de acordo com o padro 1003.1, alm de
caractersticas adicionais. Em reao, em 1988 a AT&T e Sun se unem no consrcio UI (UNIX
International) para desenvolver Solaris e UNIXWare.
Com isso, passaram a existir, novamente, verses diferentes oferecidas pelos consrcios, tendo
como caracterstica comum o fato de serem grandes e complexas, contrariando a idia principal
do UNIX
Uma tentativa de fuga desses sistemas foi a criao de uma nova verso UNIX-like mais simples
e menor, o sistema do tipo MINIX.

Em 1997, foram vendidos cerca de 4 milhes de sistemas UNIX no mundo todo.


Alguns dos Sistemas Operacionais UNIX atuais so: BSD (FreeBSD, OpenBSD e NetBSD), Solaris (anteriormente conhecido por SunOS), IRIX, AIX, HP-UX, Tru64, Linux (nas suas milhares de
distribuies), e at o Mac OS X (baseado num kernel Mach BSD chamado Darwin).

1.3.2 Interfaces do UNIX


H 3 tipos de interface do sistema UNIX que podem ser identicadas:

Interface de chamadas de sistema;


Interface de biblioteca de procedimentos;
Interface formada pelo conjunto de programas utilitrios, considerada erroneamente por alguns
usurios como sendo a verdadeira interface do UNIX.

Universidade Federal Fluminense

PETTELE)))

Captulo 2
Introduo ao Linux
Diferentemente do que se levado a pensar, o Linux uma implementao independente do sistema
operacional UNIX. O Linux propriamente dito um kernel, no um sistema operacional completo.
Sistemas completos construdos em torno do kernel do Linux usam o sistema GNU que oferece um
shell, utilitrios, bibliotecas, compiladores e ferramentas, bem como outros programas como os editores
de texto. Por essa razo, Richard M. Stallman, do projeto GNU, pede aos usurios que se reram ao
sistema completo como GNU/Linux. No apndice, h mais informaes sobre o projeto GNU.
O desenvolvimento do Linux iniciou a partir de um projeto pessoal de um estudante da Univeridade
de Helsinki, na Finlndia, chamado Linus Torvalds. Ele pretendia criar um sistema operacional mais
sosticado do que o Minix, um UNIX relativamente simples cujo cdigo fonte ele tinha disponvel. O
Linux obedece ao padro estabelecido pelo governo norte americano, POSIX. O POSIX o padro da
API (Application Programming Interface ) UNIX, referncias para desenvolvedores da famlia UNIXlike. Desde a apresentao do Linux em 5 de outubro de 1991, por Linus Torvalds, um grande nmero
de pessoas envolvidas com programao comeou a desenvolver o Linux. O nome Linux deriva da
juno Linus + UNIX = Linux.

Portabilidade
Linux hoje um dos kernels de sistema operacional mais portados, rodando em sistemas desde o
iPaq (um computador porttil) at o IBM S/390 (um massivo e altamente custoso mainframe), embora
este tipo de portabilidade no fosse um dos objetivos principais de Linus Torvalds. Seu esforo era
tornar seu sistema porttil no sentido de ter habilidade de facilmente compilar aplicativos de uma
variedade de fontes no seu sistema. Portanto, o Linux originalmente se tornou popular em parte
devido ao esforo para que as fontes GPL ou outras favoritas de todos rodassem no Linux.

Distribuies
O sistema operacional completo (GNU/Linux) considerado uma Distribuio Linux. uma
coleo de softwares livres (e s vezes no-livres) criados por indivduos, grupos e organizaes ao redor
do mundo, e tendo o kernel como seu ncleo. Atualmente, companhias como a Red Hat, a SuSE,a
MandrakeSoft ou a Conectiva, bem como projetos de comunidades com a Debian ou a Gentoo,
compilam o software e fornecem um sistema completo, pronto para instalao e uso. Alm disso, h
projetos pessoais como o de Patrick Volkerding que fornece uma distribuio Linux, a Slackware e
Carlos E. Morinoto que lanou a distribuio chamada Kurumin. Est ltima roda em CD, bastando
as conguraes do computador aceitarem o boot pelo drive do CD.
8

Captulo 2. Introduo ao Linux

2.1. Aspectos bsicos do Linux

Logo que Linus Torvalds passou a disponibilizar o Linux, ele apenas disponibilizava o Kernel com alguns comandos bsicos. O prprio usurio devia arrumar os outros programas, compil-los e congurlos. Para evitar esse trabalho, comeou ento a disponibilizao de programas pr-compilados para
o usurio apenas instalar. Foi assim que surgiu a MCC (Manchester Computer Centre), a primeira
distribuio Linux, feita pela Universidade de Manchester. Algumas distribuies so maiores, outras
menores, dependendo do nmero de aplicativos e sua nalidade. Algumas distribuies de tamanhos
menores cabem em um disquete com 1,44 MB, outras precisam de vrios CDs. Todas elas tem seu
pblico e sua nalidade, as pequenas (que ocupam poucos disquetes) so usadas para recuperao de
sistemas danicados ou em monitoramentos de redes de computadores. O que faz a diferena como
esto organizados e pr-congurados os aplicativos.

2.1 Aspectos bsicos do Linux


2.1.1

Startup e shutdown

Correspondem respectivamente aos procedimentos de ligar e desligar o computador. O primeiro diz


respeito basicamente ao fornecimento de energia para o funcionamento dos circuitos eletrnicos da
mquina e no requer do usurio grandes precaues. Por outro lado o processo de Shutdown requer
cuidado, uma vez que o desligamento inadequado do computador pode causar danos ao sistema operacional destruindo as tabelas internas de que ele necessita para funcionar. Quando o computador
"trava", portanto, deslig-lo deve ser a ltima escolha. Uma opo iniciar outra sesso, vericar
onde est o problema e encerrar a sesso travada com um comando apropriado.

2.1.2 Abertura de seo no Linux


Para usar o Linux preciso em primeiro lugar, que o usurio digite seu nome e sua senha, que so lidos
e vericados pelo programa login. No UNIX um arquivo de senha usado para guardar informaes
possuindo uma linha para cada usurio, contendo sua identicao alfabtica e numrica, sua senha
criptografada, seu diretrio home, alm de outras informaes. Quando o usurio se identica, o
programa login criptografa a senha que acabou de ser lida do terminal e a compara com a senha
do arquivo de senhas para dar permisso ao usurio. Esse arquivo com as informaes dos usurios
normalmente encontrado no arquivo: /etc/passwd. As senhas criptografadas cam no arquivo
/etc/shadow.

2.1.3 Usurio, superusurio (root ), grupos, acesso, proteo


O princpio da segurana do sistema de arquivo UNIX est baseado em usurios, grupos e outros
usurios.

Usurio : a pessoa que criou o arquivo. O dono do arquivo.


Grupo : uma categoria que rene vrios usurios. Cada usurio pode fazer parte de um ou mais

grupos, que permitem acesso a arquivos que pertencem ao grupo correspondente. Por padro, o
grupo de usurios inicial o mesmo de seu nome de usurio. A identicao do grupo chamada
de gid (group id ).

Outros : a categoria de usurios que no se encaixam como donos ou grupos do arquivo.


Universidade Federal Fluminense

PETTELE)))

Captulo 2. Introduo ao Linux

2.2. Sistema de arquivos

As permisses de acesso para donos, grupos e outros usurios so independentes uma das outras,
permitindo assim um nvel de acesso diferenciado.
A conta root tambm chamada de super usurio. Este um login que no possui restries de
segurana. A conta root somente deve ser usada para fazer a administrao do sistema. Utilize a
conta de usurio normal ao invs da conta root para operar seu sistema. Uma razo para evitar usar
privilgios root devido facilidade de se cometer danos irreparveis ao sistema.

2.1.4 Sesso, login, password, logout


No Linux, a entrada no sistema feita com um login e um password, onde login o nome do usurio
e password uma senha de segurana. Uma vez efetuado o login, o usurio entra em sua conta e
aberta uma sesso onde se interage diretamente com o Shell. O logout (para nalizar a conta)
efetuado atravs do comando 'exit'.

2.1.5 Consoles virtuais


Terminal (ou console ) o teclado e tela conectados em seu computador. O Linux faz uso de sua
caracterstica multi-usurio usando principalmente "terminais virtuais". Um terminal virtual uma
segunda sesso de trabalho completamente independente de outras que pode ser acessado no computador local ou remotamente via telnet, rsh, rlogin, etc.
No Linux, em modo texto, voc pode acessar outros terminais virtuais segurando a tecla <ALT>
e pressionando <F1> a <F6>. Cada tecla de funo corresponde a um nmero de terminal do 1 ao 6
(o stimo usado por padro pelo ambiente grco X). O Linux possui mais de 63 terminais virtuais,
mas apenas 6 esto disponveis inicialmente por motivos de economia de memria RAM. Se estiver
usando o modo grco, voc deve segurar <CTRL>+<ALT> enquanto pressiona uma tecla de <F1>
a <F6>.
Um exemplo prtico: se voc estiver usando o sistema no Terminal 1 com um login qualquer e
desejar entrar como root para instalar algum programa s abrir um terminal virtual e realizar a
tarefa desejada.

2.2 Sistema de arquivos


Arquivos so centrais para o UNIX de uma maneira no encontrada em outros sistemas operacionais.
Comandos so arquivos executveis, usualmente encontrados em locais previsveis na rvore de diretrios. Privilgios do sistema e permisses so controlados em grande parte atravs de arquivos.
Dispositivos I/O e arquivos I/O no so distinguidos nos nveis mais altos. At mesmo a comunicao entre processos ocorre atravs de entidades similares a arquivos. Toda a segurana do sistema
depende, em grande parte, da combinao entre a propriedade e protees setadas em seus arquivos
e suas contas de usurios.

2.2.1 Sistema hierrquico, rvore de diretrios, montagem de ramicaes


O UNIX tem uma organizao de diretrios hierrquica em formato conhecido como lesystem . A
base desta rvore um diretrio chamado `root directory `. Em sistemas UNIX, todo espao em disco
disponvel combinado em uma nica rvore de diretrio abaixo do /, sendo que o local fsico onde
um arquivo reside no faz parte da especicao do UNIX.
Universidade Federal Fluminense

10

PETTELE)))

Captulo 2. Introduo ao Linux

2.2. Sistema de arquivos

2.2.2 Tipos bsicos de arquivos: plain les, directory


Os arquivos so onde os dados esto gravados. Um arquivo pode conter um texto, uma msica,
programa, etc. Todo sistema UNIX reconhece pelo menos trs tipos de arquivos:

Arquivos comuns: Usados para armazenar dados. Os usurios podem acrescentar dados
diretamente em arquivos comuns, como, por exemplo, atravs de um editor. Os programas
executveis tambm so guardados como arquivos comuns.
Arquivos de diretrio: Um arquivo de diretrio contm uma lista de arquivos. Cada insero
na lista consiste em duas partes: o nome do arquivo e um ponteiro para o arquivo real em disco.
Por outro lado, os diretrios se comportam exatamente como arquivos comuns, exceto pelo fato
de que alguns comandos usados para manipulao de arquivos comuns no funcionarem para
arquivos de diretrio.
Arquivos especiais: Estes arquivos so usados para fazer referncia a dispositivos fsicos como
os terminais, as impressoras, os discos. Eles so lidos e gravados como arquivos comuns, mas
tais associaes causam a ativao do dispositivo fsico ligado a ele.
O Linux case sensitive, ou seja, ele diferencia letras maisculas e minsculas nos arquivos. O
diretrio, como qualquer outro arquivo, tambm case sensitive. Em um mesmo diretrio, no podem
existir dois arquivos com o mesmo nome ou um arquivo com mesmo nome de um subdiretrio. Os
diretrios no Linux so especicados por uma "/".
OBS: Estamos habituados a ver os nomes de arquivos como sendo: nome.ext, onde ext a extenso
do tipo de arquivo, por exemplo .txt, .html, .doc. Porm, no Linux os nomes no precisam seguir
essa regra. Os nomes podem podem ser formados por vrias extenses, como: lista.ord.txt,
nomes.maius.classe, livros.meu.ord.txt.
O Linux organiza seu lesystem atravs de inodes. Inodes so estruturas de dados em disco que
descrevem e armazenam os atributos do arquivo, incluindo sua localizao. Campos de um inode : user,
group, tipo do arquivo, tempo de criao, acesso, modo (modicao), nmero de links, tamanho e
endereo no disco.
Existem mecanismos que permitem que vrios lenames reram-se a um nico arquivo no disco.
Esses mecanismos so os links. Existem dois tipos de links : hard link (ou simblico) ou soft link.

hard link : associa dois ou mais lenames como mesmo inode. Os hard links compartilham o
mesmo bloco de dados embora funcionando como entradas de diretrio independentes.
soft link : estes so pointers les que apontam para outro lename no lesystem.

2.2.3 Permisses para acesso a arquivos


O sistema UNIX fornece um meio fcil de controlar o acesso que os usurios do sistema possam ter
aos trs tipos de arquivos. Isso feito para permitir ou restringir o acesso a arquivos importantes do
sistema e para garantir a privacidade de cada usurio que possua uma conta no sistema. O sistema
diferencia trs classes de usurios. Primeiro, todo arquivo possui um dono, um proprietrio, designado
no sistema por user . O proprietrio tem controle total sobre a restrio ou permisso de acesso ao
arquivo a qualquer hora. Alm da posse individual do arquivo, possvel que um ou mais usurios do
sistema possuam o arquivo coletivamente, em um tipo de propriedade de grupo. O usurio que no for
proprietrio do arquivo pode ter acesso a ele caso pertena ao grupo de usurios que tem permisso
Universidade Federal Fluminense

11

PETTELE)))

Captulo 2. Introduo ao Linux

2.2. Sistema de arquivos

para isso. Porm esse usurio no pode restringir ou permitir o acesso ao arquivo. Os usurios que
no so nem proprietrios nem pertenam a um grupo que tenha acesso ao arquivo formam a ltima
categoria, conhecida simplesmente como "outros".

Proprietrio (designado por u, de user ): quem criou o arquivo.


Grupo (designado por g, de group ): o grupo formado por um ou mais usurios que podem
ter acesso ao arquivo.
Outros (designado por o, de others ): refere-se a qualquer outro usurio do sistema.
O sistema Unix permite ainda trs modos de acesso aos arquivos: leitura, escrita e execuo. Os
trs modos de acesso so relativamente lgicos, porm o signicado desses trs modos de acesso
diferente para arquivos de diretrios. O usurio com permisso de leitura pode ler o contedo do
diretrio, por exemplo com o comando "ls". O usurio com permisso de escrita pode usar alguns
programas privilegiados para gravar em um diretrio. A permisso de gravao necessria para criar
ou remover arquivos do diretrio.
Um usurio deve ter permisso de execuo em um diretrio para ter acesso aos arquivos ali
alocados. Se um usurio tem permisso para leitura e escrita em um arquivo comum que est listado
em um diretrio mas no tem permisso de execuo para aquele diretrio, o sistema no o deixa ler
nem gravar o contedo daquele arquivo comum.
Assim temos:

Figura 2.1: Permisses de Arquivos


Um arquivo que tiver suas permisses como as do exemplo acima poderia ser lido, escrito ou
executado pelo dono ou por qualquer outra pessoa. J no exemplo abaixo, o dono poder ler e
escrever, os outros s podero ler e ningum poder execut-lo.

User
r w -

Group
r - -

Others
r - -

Para alterar essas permisses, utliza-se o comando chmod. Veja explicao do uso desse comando
no prximo captulo.

2.2.4 Diretrios
Chamamos de rvore de diretrios organizao dos arquivos de diretrios, fazendo uma aluso s
suas ramicaes, semelhantes aos galhos de uma rvore. Damos o nome de "raiz " ao diretrio
principal que contm todos os outros subdiretrios.

Diretrio corrente o diretrio em que o usurio se encontra naquele determinado momento.


Universidade Federal Fluminense

12

PETTELE)))

Captulo 2. Introduo ao Linux

2.2. Sistema de arquivos

Diretrio "home" onde a conta do usurio est registrada.


Diretrio ascendente o diretrio onde determinado arquivo ou diretrio est contido.
Diretrio descendente o diretrio contido em outro diretrio.
O "path " consiste na lista de diretrios que precisa ser atravessada, desde o diretrio raiz at o
arquivo, com barras separando os componentes. Path absoluto o caminho completo desde a raiz
at o arquivo. Se o caminho completo desde a raiz at o arquivo for /UFF/pet/cursos/Linux e o
diretrio de trabalho do usurio fosse pet no momento, bastaria que ele digitasse cursos/Linux.
Este nome chamado caminho relativo.

Figura 2.2: Padro dos principais diretrios do UNIX.


Os diretrios principais, alm de outros, com seu contedo esto listados abaixo:
/etc - Arquivos para administrao do sistema.

/bin - Comandos UNIX mais comumente usados.


/usr - Todas as contas de usurios e alguns comandos.
/dev - Arquivos de dispositivos de entrada e sada.
/lib - Arquivos bibliotecas para programao em C.
/tmp - Armazenamento de arquivos temporrios.
/mmt - Montagem de discos e perifricos.
/sbin - Diretrio usado na inicializao do sistema. Demais pacotes para a administrao do
sistema devem car em /usr/sbin ou /usr/local/sbin.
/var - Diretrio que contm arquivos variveis, tais como spool (las de e-mail, crontab, impresso)
e logs. Este diretrio existe para que os arquivos que necessitem ser modicados quem nele e no no
/usr.
/home - Contm os diretrios pessoais dos usurios.
/root - o diretrio que contm os arquivos do administrador (seu home ). Porm alguns sistemas
Unix-like utilizam /home/root.

Universidade Federal Fluminense

13

PETTELE)))

Captulo 2. Introduo ao Linux

2.3. Processos

/proc - Diretrio virtual onde o kernel armazena suas informaes.


/boot - Contm a imagem do kernel e tudo o que for necessrio ao processo de boot, menos conguraes.

2.3 Processos
2.3.1 Processos e subprocessos
Um processo um simples programa que est rodando em seu espao de endereamento virtual prprio.
distinto de um 'job ' ou comando, que, em sistemas UNIX, pode ser composto de muitos processos
realizando uma nica tarefa. Comandos simples como `ls' so executados como simples processos. Um
comando composto, contendo pipes, ir executar um processo por segmento pipe. Para acompanhar o
status de cada processo o sistema cria um PID (Process ID) para cada processo aberto.
Existem elementos chamados guias de controle de execuo que ajudam a controlar a execuo do
programa.

Fork : a chamada de sistema cuja execuo cria um processo (lho) idntico quele que o chamou.
Processo pai : processo que gera um novo processo.
Processo lho : Processo gerado pelo processo pai.
Pid (Process ID) : um nmero que identica unicamente cada processo e usado para referir-se
a ele.

PPid (Parent Process ID ) : o Pid do processo pai.

2.3.2 Controle de processos


Aqui sero apresentados alguns tpicos que permitiro ao usurio realizar algumas tarefas interessantes
como:

executar mais de um processo ao mesmo tempo;


rodar um processo em baixa prioridade.
Se voc estiver usando um programa que ir demorar muito para terminar e voc quer comear
a trabalhar em outra tarefa voc pode chamar seu programa para ser executado no que conhecido
como segundo plano (background ). Isso pode ser feito colocando no nal da linha de comando o
smbolo `&'. Pode-se tambm, enquanto o programa est sendo executado, teclar CTRL + Z. Com isso
o comando ser suspenso e o sistema largar o prompt.
Chamamos de foreground o ato de fazer com que um programa rode em primeiro plano. Neste
modo os processos podem interagir com os usurios e exibem a execuo no monitor.
Quando o comando nice colocado antes de uma linha de comando, o tempo dedicado pela CPU
para execuo daquela tarefa reduzido, fazendo com que ele no atrase tanto outros processos mais
importantes. Ou seja, a prioridade daquele processo reduzida. Esse comando deve ser usado quando
h outros processos mais importantes rodando no sistema.
Universidade Federal Fluminense

14

PETTELE)))

Captulo 2. Introduo ao Linux

2.3. Processos

Outros comandos relacionados a processos:

jobs lista os jobs em background.


fg [job] leva o job para foreground.
bg [job] leva o job para background.
ps mostra os processos que esto sendo rodados no computador.
top mostra continuamente o status de cada processo que est rodando no computador.
kill [Pid] encerra o processo.
O exemplo abaixo ilustra o uso de alguns desses comandos. Existe o seguinte script rodando no
sistema:

#!/bin/bash
#Aviso
sleep 10m
echo T na Hora de Sair!!
date
Este programa emite um aviso aps 10 minutos de ter sido colocado para rodar, em seguida mostra
a data e a hora. No teria sentido deixar esse programa rodando travando o terminal enquanto voc
poderia estar fazendo outras coisas, ento ele pode ser colocado em background para liberar o terminal.
Aps 10 minuntos a mensagem aparece. O programa se chama trava.sh.

$ ./trava.sh &
[1] 2906
$ jobs
[1]+ Running
./trava.sh &
$ ps
PID TTY
TIME CMD
1916 ttyp1
00:00:00 bash
2906 ttyp1
00:00:00 trava.sh
2907 ttyp1
00:00:00 sleep
2909 ttyp1
00:00:00 ps
$
$ fg 1
./trava.sh
aqui foi digitado: ctrl + z
[1]+ Stopped
./trava.sh
$ jobs
[1]+ Stopped
./trava.sh
$ jobs
Universidade Federal Fluminense

15

PETTELE)))

Captulo 2. Introduo ao Linux

2.3. Processos

[1]+ Stopped
./trava.sh
$ bg 1
[1]+ ./trava.sh &
$ jobs
[1]+ Running
./trava.sh &
$ ... comandos diversos do usurio enquanto ele espera a mensagem aparecer ...
$ T na Hora de Sair!!
Ter Jan 10 16:01:51 BRST 2006
aqui foi digitado: enter
[1]+ Done
./trava.sh
$ jobs
$ ps
PID TTY
TIME CMD
1916 ttyp1
00:00:00 bash
2935 ttyp1
00:00:00 ps
$
Como pode ser visto, o programa foi executado em background. O comando jobs mostrou o job
trava.sh em todos os seus estados: rodando, suspenso e executando, assim como fez o comando ps.

Universidade Federal Fluminense

16

PETTELE)))

Captulo 3
Comandos
Os sistemas operacionais UNIX e os que so derivados do UNIX (FreeBSD, Linux, etc) possuem muitos
comandos e aplicativos. Em geral a sintaxe de uma comando da seguinte forma:

$ comando -opes argumentos


Podem ser inseridos comandos seguidos na mesma linha separando-os por ponto-vrgula.
Ex: $ cd;pwd

3.1 Comandos de ajuda


As distribuies UNIX j vem com manuais incorporados ao sistema. Esses manuais de comandos se
localizam no diretrio /usr/man. A utilizao da pgina de manual bem simples, digite, por exemplo:
Sintaxe: $ man [opo] <comando>
Ex:

$ man ls exibe o manual do comando `ls'


Um modo de procura por palavra-chave pode ser usado para encontrar o nome do comando que
execute determinada tarefa. Para isso digite:

$ man -k palavra-chave
Outros comandos so: info, whatis, apropos. Consulte o manual para informaes sobre esses
comandos. .
apropos : procura por comandos/programas pela descrio
Sintaxe: apropos <descrio>
til quando precisamos fazer alguma coisa mas no sabemos qual comando usar. Ele faz sua
pesquisa nas pginas de manual e suas descries e lista os comandos/programas que atendem
consulta.

17

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

3.2 Comandos e utilitrios bsicos


Os comandos sero exemplicados supondo haver inicialmente um diretrio chamado teste contendo os seguinte arquivos: arqu1.txt, arqu2.txt, cap2.tex, parI.tex, parII.tex, parIII.tex,
imag.jpg, page.html.

3.2.1 Comandos de manipulao de arquivos


cat concatena e/ou exibe arquivos na sada default.
Tambm pode exibir o contedo de vrios arquivos em sucesso.
Sintaxe: cat [opo] <arquivo>
As principais opes so:

-n  Numera as linhas.
-E  Exibe $ ao nal de cada linha.
-A  Exibe todo o contedo incluindo caracteres especiais, como acentos e espaos na forma de
cdigos.
Ex: Mostra o contedo do arquivo com as linhas numeradas.

$ cat -n arqu1.txt
1
2 "Software Livre" uma questo
3 de liberdade, no de preo.
4 Para entender o conceito,
5 voc deve pensar em
6 "liberdade de expresso",
7 no em "cerveja grtis".
8
Ex: Concatena na sada padro o contedo dos dois arquivos.

$ cat

arqu1.txt arqu2.txt

"Software Livre" uma questo


de liberdade, no de preo.
Para entender o conceito,
voc deve pensar em
"liberdade de expresso",
no em "cerveja grtis".
Universidade Federal Fluminense

18

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

=> A liberdade de executar o programa, para qualquer


propsito (liberdade no. 0)
=> A liberdade de estudar como o programa funciona,
e adapt-lo para as suas necessidades
(liberdade no. 1). Aceso ao cdigo-fonte
um pr-requisito para esta liberdade.
=> A liberdade de redistribuir cpias de modo
que voc possa ajudar ao seu prximo
(liberdade no. 2).
=> A liberdade de aperfeioar o programa e
liberar os seus aperfeioamentos, de modo
que toda a comunidade se beneficie.
(liberdade no. 3). Acesso ao cdigo-fonte
um pr-requisito para esta liberdade.
tac - Semelhante ao comando cat, porm exibe o contedo em ordem reversa.
Sintaxe: tac [opo] <arquivo>

file - Identica o contedo e mostra na tela o tipo de arquivo.


realizado um exame dos primeiros bytes do arquivo, seguido de uma comparao com as regras
denidas nos arquivos:

/usr/share/misc/magic ou /etc/magic
O segundo arquivo, /etc/magic, pode ser editado pelo prprio usurio para identicar seus
arquivos.
Ex:

$ file arqu1.txt
arqu1.txt: ISO-8859 text
$ file image.jpg
image.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI),
100 x 100 $ file h264 h264: directory
Pelo exemplo acima, vemos que os tipos de arquivos foram: text, image e directory. Alm desses
podem haver: executable, (para arquivos executveis resultado da compilao de um programa),
data (contendo dados geralmente no imprimveis).
Veja mais opes no manual do sistema.

cp (copy) Copia arquivos ou diretrios.


Sintaxe: cp [opes] <arqfont> <arqdest>
Onde:
Universidade Federal Fluminense

19

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

arqfont o arquivo a ser copiado;


arqdest o nome da cpia a ser criada. O nome do arqdest deve ser diferente do arqfont
caso se esteja fazendo uma cpia para o mesmo diretrio. Se o arquivo destino no existir,
ele criado com o nome arqdest. E caso exista e no seja um diretrio, seu contedo ser
sobrescrito.
As opes podem ser:

-i  Pede conrmao para copiar o arquivo.


-p  Mantm os dados, como por exemplo permisses e datas do arquivo original.
-r  Copia os arquivos e diretrios recursivamente.
Ex:

$ cp arqu1.txt
$ ls -l
total 44
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rwxrwxrwx
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--rw-r--r--

novoarq.txt
1
1
1
1
1
1
1
1
1
1

kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin

kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin
kurumin

395
167
606
0
5684
167
5740
113
125
214

2005-03-08
2005-03-08
2005-03-08
2005-03-08
2005-03-05
2005-03-08
2005-03-08
2005-03-08
2005-03-08
2005-03-08

21:46
22:53
22:43
20:09
19:29
23:23
20:08
21:42
21:41
21:40

apend.tex
arqu1.txt
arqu2.txt
cap2.tex
imag.jpg
novoarq.txt
page.html
parIII.tex
parII.tex
parI.tex

Como pode ser visto no exemplo, foi criado um arquivo chamado novoarq.txt

rm (remove) Remove arquivos ou diretrios


Sintaxe: rm [opes] <arq1> <arq2>
Onde cada arquivo separado por espaos em branco.
Algumas das opes podem ser:

-f  Remove todos os arquivos mesmo no tendo permisso de escrita sem pedir conrmao
do usurio.
-i  Remove o arquivo interativamente, ou seja, pede a conrmao do usurio.
Universidade Federal Fluminense

20

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

-r  Remove um diretrio e todo o seu contedo recursivamente.


Obs: Cuidado ao apagar os arquivos, pois uma vez usado o comando rm no possvel recuperar
o arquivo.
Ex: Supondo o mesmo diretrio exemplo com os arquivos descritos. Agora vamos apagar o
arquivo cap2.tex.

$ rm -i cap2.tex
rm: remove arquivo comum `cap2.tex'? y
$ ls
apend.tex arqu2.txt novoarq.txt parIII.tex
arqu1.txt imag.jpg page.html
parII.tex
$

parI.tex

Foi pedida conrmao para a excluso do arquivo, a letra y foi digitada para conrmar, em
seguida foi usado o comando ls para listar os arquivos. Como pode ser visto, o arquivo foi
apagado.

mv (move) Move ou renomeia arquivos


Sintaxe: mv [opcao] <origem> <destino>
Remove o arquivo da origem para destino ou renomeia arquivo origem para arquivo destino.
A opo -i pede conrmao antes de mover um arquivo que ir sobrescrever. Exemplo:

$mv

imag.jpg nova.jpg Renomeia o arquivo imag.jpg para nova.jpg.

$mv

list.tex

~/teste/ Move o arquivo list.tex para o diretrio ~/teste/.

$ls
apend.tex arqu2.txt nova.jpg
page.html
parII.tex
arqu1.txt list.tex novoarq.txt parIII.tex parI.tex
ln Cria links entre arquivos.
Sintaxe: ln [opo] arquivo1 arquivo2
Sem opo, o comando ln d um outro nome para um mesmo arquivo na memria. Ou seja,
um mesmo arquivo pode ser referenciado de duas maneiras diferentes.
J usando a opo -s criado um link simblico, ou seja, um arquivo que aponta para a rea
onde est o arquivo original.
Ex: Tendo o arquivo chamado arq2.txt, ser criado um link de hardware e simblico para
ele. Observe a diferena no tamanho dos arquivos criados. O link simblico apenas um
"atalho"para o arquivo original, por isso seu tamanho menor. Atente tambm para o fato do
uso do comando ln sem opo no igual ao comando cp como pode parecer, pois os arquivos
continuam interligados. A modicao de um implica na modicao do outro.
Universidade Federal Fluminense

21

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

$ ls -l
total 4
-rw-r--r-1 kurumin kurumin
$ ln original.txt hard.txt
$ ls -l
total 8
-rw-r--r-2 kurumin kurumin
-rw-r--r-2 kurumin kurumin
$ cat hard.txt
Esse o arquivo original

27 2006-02-03 10:36 original.txt

27 2006-02-03 10:36 hard.txt


27 2006-02-03 10:36 original.txt

$ cat >> hard.txt


Primeira modificao
$ cat hard.txt
Esse o arquivo original
Primeira modificao
$ cat original.txt
Esse o arquivo original
Primeira modificao
$ ls -l
total 8
-rw-r--r-2 kurumin kurumin
-rw-r--r-2 kurumin kurumin
$ ln -s original.txt simb.txt
$ ls -l
total 9
-rw-r--r-2 kurumin kurumin
-rw-r--r-2 kurumin kurumin
lrwxrwxrwx
1 kurumin kurumin
$ cat simb.txt
Esse o arquivo original

49 2006-02-03 10:38 hard.txt


49 2006-02-03 10:38 original.txt

49 2006-02-03 10:38 hard.txt


49 2006-02-03 10:38 original.txt
12 2006-02-03 10:39 simb.txt -> original.txt

Primeira modificao
$ cat >> simb.txt
Segunda modificao
$ cat simb.txt
Esse o arquivo original
Primeira modificao
Universidade Federal Fluminense

22

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Segunda modificao
$ cat original.txt
Esse o arquivo original
Primeira modificao
Segunda modificao
$
diff Exibe a diferena entre dois arquivos.
Sintaxe: di [opo] arquivo1 arquivo2
Algumas das opes so:

-b  Ignora espaos e caracteres de tabulao.


-i  No diferencia maiscula de minscula.
-r  Processa subdiretrios quando diretrios so comparados.
Ex:

$ cat parI.tex
parte um
esta linha esta igual nos dois
mas a linha seguinte no.
$ cat parII.tex
parte dois
esta linha esta igual nos dois
porem a linha seguinte no
$ diff parI.tex parII.tex
1c1
< parte um
--> parte dois
3c3
< mas a linha seguinte no.
--> porem a linha seguinte no
$
Universidade Federal Fluminense

23

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

chmod Altera a permisso de acesso aos arquivos.


Sintaxe: chmod [opo] <permisses> <arquivo>
Algumas das opes podem ser:

-R  Se o arquivo for um diretrio, o comando muda recursivamente o modo de acesso a todos


os seus arquivos e subdiretrios.
-c  Mostra o resultado do uso do comando aps seu uso.
permisses composto pela classe do usurio (u para dono, g para grupo, o para outros tipos e
a todos), pelos caracteres operadores (+ para acrescentar permisses, - para retirar permisses
e = para retirar todas as permisses) e pelos caracteres de permisso (r para leitura, w para
escrita e x para execuo).
Exemplos:

$ ls -l
--wx-wx-wx
1 ze ze
5684 2005-03-05 19:29 nova.jpg
$ chmod -c a+rwx
modo de `nova.jpg' mudado para 0777 (rwxrwxrwx)
$ chmod -c og-x nova.jpg
modo de `nova.jpg' mudado para 0766 (rwxrw-rw-)
A mudana de permisso tambm pode ser feita colocando o cdigo rwx na forma de nmeros
octais. Abaixo segue a equivalncia do cdigo nas letras rwx pra nmeros.
----x
-w-wx
r-r-x
rwrwx

0
1
2
3
4
5
6
7

Ex: Supondo que o arquivo parI.tex.

$ ls -l parI.tex
-r--r--r-1 kurumin
$ chmod 754 parI.tex
$ ls -l parI.tex
-rwxr-xr-1 kurumin

kurumin

10 2005-03-15 15:18 parI.tex

kurumin

10 2005-03-15 15:18 parI.tex

Universidade Federal Fluminense

24

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Comandos para manipulao de diretrios


ls Lista o contedo de um diretrio e informaes relativas aos arquivos.
Deriva da palavra `list `; quando se digita `ls [nome do arquivo]`, o programa procura o arquivo desejado dentro do diretrio corrente.
Ex:

$ ls
apend.tex
arqu1.txt

arqu2.txt imag.jpg
cap2.tex page.html

parIII.tex
parII.tex

parI.tex

O ls sem argumentos mostra apenas os nomes dos arquivos.


Sintaxe: ls [opo] [arquivo]
Os parmetros opcionais podem ser:

-l  lista ordenada pelo nome e em formato longo


-F  mostra barra de diretrios
-R  mostra o contedo de todos os subdiretrios
-x  lista o resultado em vrias colunas na horizontal
-a  lista todos os arquivos, inclusive os ocultos
-i  exibe o nmero do inode na primeira coluna
-t  lista em ordem cronolgica em funo da hora da ltima modicao
-1  lista somente os nomes dos arquivos ordenados.
Obs: podem ser usados vrios parmetros opcionais em conjunto.
Ex:

$ ls -la
total 48
drwxr-xr-x
drwxr-xr-x
-rw-r--r--rw-r--r--

2
31
1
1

ze
ze
ze
ze

ze 4096 2005-03-08 21:46 .


ze 4096 2005-03-08 21:59 ..
ze
395 2005-03-08 21:46 apend.tex
ze
159 2005-03-08 21:34 arqu1.txt

Universidade Federal Fluminense

25

PETTELE)))

Captulo 3. Comandos

-rw-r--r--rw-r--r--rwxrwxrwx
-rw-r--r--rw-r--r--rw-r--r--rw-r--r--

3.2. Comandos e utilitrios bsicos

1
1
1
1
1
1
1

ze
ze
ze
ze
ze
ze
ze

ze
ze
ze
ze
ze
ze
ze

1188
0
5684
5740
113
125
214

2005-03-08
2005-03-08
2005-03-05
2005-03-08
2005-03-08
2005-03-08
2005-03-08

21:36
20:09
19:29
20:08
21:42
21:41
21:40

arqu2.txt
cap2.tex
imag.jpg
page.html
parIII.tex
parII.tex
parI.tex

Segue abaixo a explicao do resultado do comando ls -la:

-la a combinao dos parmetros l e a.

total 48 o nmero de blocos ocupados pelos arquivos no diretrio. Em algumas verses o tamanho
de cada bloco de 512 Bytes e em outras de 1K Byte.

Primeiro Campo Exibe as permisses dos arquivos.


Segundo Campo Exibe o nmero de ligaes dos arquivos.
Terceiro Campo Exibe o proprietrio do arquivo.
Quarto Campo Exibe o grupo do arquivo.
Quinto Campo Exibe o tamanho do arquivo em Bytes.
Sexto Campo Exibe a data e hora da ltima modicao do arquivo.
Stimo Campo Exibe informao sobre o arquivo ou diretrio.
pwd (Present Working Directory) : mostra o diretrio corrente segundo o percurso ab-

soluto de localizao.
Sintaxe: pwd

$ pwd
/home/ze/teste
cd(change directory ) : Troca de diretrio corrente
Sintaxe: cd <diretrio>
Exemplo:

$ cd / Vai para o diretrio raiz.


$ cd .. Vai para o diretrio pai.
$ cd Vai para o diretrio home do usurio.
$ cd - Vai para o ltimo diretrio acessado.
Ex: Suponha que o diretrio atual seja:
Universidade Federal Fluminense

26

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

$ pwd
/home/ze/teste
Fazendo

$ cd /usr/bin
$ pwd
/usr/bin
Vale a pena testar as vrias opes deste comando, pois, conhecendo alguns atalhos, ele agiliza
a navegao dentro do sistema. Veja a seo 3.3. Nela podem ser encontrados os caracteres
especiais mais usados.

mkdir : Cria diretrios


Sintaxe: mkdir [opes] <diretrio>
Exemplo: Ser criado um diretrio chamado teste

$ ls
curso
notas
artigos
$ mkdir teste
$ ls
curso
notas
artigos
teste
rmdir : Remove diretrios vazios
Sintaxe: rmdir <diretrio>
Exemplo: O diretrio teste criado no exemplo anterior ser removido.

$ rmdir teste
$ ls
urso
notas
artigos

Universidade Federal Fluminense

27

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Comando para manipulao de contas e usurios


id : Mostra o nmero de identicao do usurio e dos grupos a que ele pertence.
whoami : Mostra o nome do usurio.
who : Mostra os usurios que esto utilizando os terminais.
w : Mostra os usurios que esto utilizando os terminais com informaes adicionais.
su : Troca o usurio.
Esse comando usado para mudar o usurio no mesmo terminal. Se o comando for executado
sem qualquer nome do usurio, o padro mudar o usurio para root.
Ex:

$ su
Password:
#
$ su user
Password:
/home/user$
sudo : Executa comandos como root.
adduser : Adiciona um usurio ou grupo no sistema
Sintaxe: adduser [opes] <usurio/grupo>
Por padro, quando um usurio adicionado, criado um grupo com o mesmo nome do usurio.

addgroup : adiciona um novo grupo de usurios no sistema


Sintaxe: addgroup <usurio/grupo> [opes]

passwd : Altera a senha do usurio


Sintaxe: passwd <usurio> [opes]

Universidade Federal Fluminense

28

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Se a opo -g for especicada a senha do grupo ser alterada.

Obs: apenas o usurio root pode alterar a senha de outros usurios.


newgrp : Altera a identicao de grupo do usurio
Sintaxe: newgrp <grupo>

Comandos diversos
alias : Cria um apelido para o comando e seus parmetros
Sintaxe: alias <apelido>=`<comando + parmetros>'
Exemplo: Ser criado um apelido para aprimorar o ls

$ alias ls=`ls -al -color -F'


$ ls
RESULTADO
Exemplo: Ser criado um apelido para montar a unidade de disquete e entrar na tela.

$alias a=`mount -t /dev/fd0/mnt/floppy/

cd/mnt/floppy'

cal : Imprime o calendrio para um determinado ms/ano


Sintaxe: cal [ms] [ano]
Exemplo:

$cal 6 2000
$cal 2000
Algumas opes podem ser usadas atravs da sintaxe: cal [opo]

-3 - Mostra o ms atual, o anterior e o seguinte.


-y - Mostra o calendrio do ano inteiro.
Veja o manual para outras opes.

clear : Limpa o terminal


Sintaxe: clear
Quando o terminal estiver cheio de comandos j digitados ou de resultados de outros comandos,
recomendvel utilizar o clear para aumentar o campo visual.

Universidade Federal Fluminense

29

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

date : Mostra a data e a hora atuais do sistema


Sintaxe: date
Se digitarmos `date -u`, o comando ir mostrar o horrio de Greenwich.
Conra o manual para ver como modicar a formatao de apresentao da data.
Para modicar a hora, necessrio estar logado como root

$ date mes/dia/hora/minuto/ano
Ento para mudar a data atual para 25 de dezembro de 2020, s duas e meia da tarde, digite:

$ date 122514302020
df (disk free ) : Mostra o espao livre no disco
Sintaxe: df [opes] ,
onde opes podem ser os parmetros listados abaixo:

-a  mostra o espao ocupado por todos os arquivos


-b  mostra o espao ocupado em bytes
-c  faz uma totalizao de todo o espao listado
-D  no conta links simblicos
-k  mostra o espao ocupado em kbytes
-m  mostra o espao ocupado em Mbytes
-S  no calcula o espao ocupado por subdiretrios

du (disk usage ) : Mostra o espao utilizado por arquivos e diretrios do diretrio atual
Sintaxe: du [opes] ,
onde opes podem ser os parmetros listados abaixo:

-s  relata apenas o nmero de blocos

Universidade Federal Fluminense

30

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

-a  informa o tamanho de cada arquivo


-k  lista o tamanho em Kbytes

echo : Escreve no terminal


Sintaxe: echo [string]
Exemplos do uso do comando echo sero vistos na seo 4.4.

find : Procura arquivos por nome


Sintaxe: find <caminho> [opes]
Exemplos:

$find / -name prova ( procura no diretrio raiz e subdiretrios um arquivo chamado prova)
$find / -name prova -maxdepth 3 (procura no diretrio raiz e subdiretrios, at o 3 nvel,
um arquivo chamado prova)
$find / -mmin 10'' (procura no diretrio raiz e subdiretrios um arquivo modicado h 10
minutos atrs)
$find / -links 4'' (procura no diretrio raiz e subdiretrios, todos os arquivos que possuem
4 links como referncia)
sync : Grava os dados do cache de disco na memria RAM para os disco rgidos e

exveis

Sintaxe: sync
O cache um mecanismo de acelerao que permite que um arquivo seja armazenado na memria
ao invs de ser imediatamente gravado no disco. Quando o sistema estiver ocioso, o arquivo
gravado para o disco. O Linux pode usar toda memria RAM disponvel para o cache de
programas acelerando seu desempenho de leitura/gravao. O uso do sync til em disquetes
quando gravamos um programa e precisamos que os dados sejam gravados imediatamente para
retirar o disquete da unidade.

Opes de compactao
O Linux possui programas de armazenamento de arquivos que podem ou no compactar os mesmos.

tar : armazena vrios arquivos e diretrios dentro de um nico arquivo (*.tar) ou dis-

positivo

Sintaxe: tar [opes] <arquivo> ,


As opes podem ser os parmetros listados abaixo:
Universidade Federal Fluminense

31

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

-c  cria um novo arquivo tar


-h  armazena os arquivos apontados por links, ao invs dos links
-r  inclui arquivos ao nal (append ) de um arquivo tar
-t  lista o contedo de um arquivo tar
-u  somente inclui arquivos que no esto presentes ou so mais novos do que o arquivo tar
-w  pede conrmao para cada ao a ser tomada
-v  mostra na tela o que est sendo feito
-x  extrai arquivos armazenados em um arquivo tar
$ ls
arq1.txt arq2.txt hard.txt original.txt simb.txt
$ tar -cvf junto.tar arq*.txt
arq1.txt
arq2.txt
$ ls
arq1.txt arq2.txt hard.txt junto.tar original.txt
$

simb.txt

A m de reduzir o espao ocupado no disco, o uso da compactao deste arquivo se torna til e
eciente. Para esta tarefa usamos o comando gzip.

gzip : compactador de arquivos mais usado atualmente em sistemas UNIX


Sintaxe: gzip [opes] <arquivo> ,
onde opes podem ser os parmetros listados abaixo:

-c  concatena sada de dados


-h  lista todas as opes
-l  lista os nomes no contedo do arquivo .gz
-r  exibe em modo recursivo
-t  usado para testar arquivos
-v  modo verbose, exibe informaes sobre compactao.
$ ls
arq1.txt arq2.txt hard.txt junto.tar original.txt simb.txt
$ gzip -v junto.tar
junto.tar:
97.6% -- replaced with junto.tar.gz
$ ls
arq1.txt arq2.txt hard.txt junto.tar.gz original.txt simb.txt

Universidade Federal Fluminense

32

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

gunzip : descompactador de arquivos .gz


Sintaxe: gunzip [opes] <arquivo.gz>

$ ls
arq1.txt arq2.txt hard.txt junto.tar.gz original.txt simb.txt
$ gunzip junto.tar.gz
$ ls
arq1.txt arq2.txt hard.txt junto.tar original.txt simb.txt
$
Existem outras opes de compactadores em sistemas UNIX. Cada um dene um arquivo com
uma extenso diferente, como os exemplos:

Compactador Descompactador Extenso


gzip
pack
compress
bzip2
zip

gunzip
unpack
uncompress
unbzip2
uzip

.gz
.z
.Z
.bz2
.zip

Tabela 3.1: Compactadores

3.2.2 Redirecionamento de entrada e sada


O UNIX trata todos os perifricos conectados ao sistema como arquivos. O teclado, por exemplo,
um "arquivo"de entrada; o vdeo um arquivo de sada, assim como a impressora.
O arquivo padro de sada (stdout) o dispositivo no qual o UNIX deseja os resultados por
default. Esse dispositivo geralmente o vdeo. Praticamente todos os programas componentes do
sistema que apresentam dados, o fazem como stdout, como por exemplo, o comando ls. Assim como
o dispositivo padro de entrada (stdin) de dados geralmente o teclado. H, tambm, uma sada
padro para os erros (stderr).

Redirecionando sada padro para um arquivo


Utilizando o smbolo > podemos redirecionar a sada que seria para o vdeo para, por exemplo, um
arquivo em disco.
Abaixo, a sada do comando date gravada para um arquivo de nome datas.
Exemplo:

$ date > datas


$ cat datas
Universidade Federal Fluminense

33

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Qui Mar 17 21:20:06 BRT 2005

Acrescentando dados em um arquivo


O operador > cria um novo arquivo, caso ele no exista. Se ele j existe, o arquivo sobreposto.
Usando , a sada acrescentada ao nal do arquivo se o mesmo j existe ou criado um novo arquivo
caso ele no exista.
Exemplo:

$date > datas


$cat datas
Qui Mar 17 21:22:31 BRT 2005
$echo FIM DO ARQUIVO >> datas
$ cat datas
Qui Mar 17 21:22:31 BRT 2005 FIM DO ARQUIVO
No caso de erros, deve-se utilizar os smbolos 2> ou 2 para direcionar o erro da sada padro
para um determinado arquivo.
Exemplo:

$ write 2> erros


$ cat erros
write: write: you have write permission turned off.
$ cd f 2>> erros
$ cat erros
write: write: you have write permission turned off.
bash: cd: f: No such file or directory
$
Da mesma forma que a sada de um comando pode ser direcionada para um arquivo, um arquivo
pode ser direcionado como entrada de um comando. Isso feito utilizando o smbolo < . Na prxima
seo teremos um exemplo de como fazer isso.
Tambm possvel fazer redirecionamento de entrada utilizando o sinal  . Este smbolo indica ao
shell que o escopo de um comando comea na linha seguinte e termina quando ele encontrar o label
que o segue. Este comando muito usado para exibir um texto em vrias linhas, sem precisar de car
usando o comando echo para cada linha.
Exemplo:

Universidade Federal Fluminense

34

PETTELE)))

Captulo 3. Comandos

$
>
>
>
>
1
2
3
$

3.2. Comandos e utilitrios bsicos

cat <<FIM
1 - Opo UM
2 - Opo DOIS
3 - Opo TRS
FIM
- Opo UM
- Opo DOIS
- Opo TRS

Organizando dados em um arquivo


O "sort" um programa que classica alfabeticamente as linhas de um arquivo texto. Ele obtm sua
entrada em stdin e apresenta a sada em stdout. Se quisermos ordenar os nomes contidos no arquivo
nomes utilizando sort, podemos fazer:

$cat nomes
Deri
Cod
Pato
Brunaldo
KK
$
$sort < nomes
Brunaldo
Cod
Deri
KK
Pato
$
A sada poderia ser redirecionada ao mesmo tempo para um arquivo, como mostrado abaixo:

$sort < nomes >


$cat nomesord
Brunaldo
Cod
Deri
KK
Pato
$

nomesord

O sort leu o contedo do arquivo "nomes", classicou-os e a sada, que seria feita na tela, foi
jogada para um novo arquivo chamado "nomesord". Um detalhe importante: os arquivos de entrada
e sada devem ser diferentes, pois a primeira parte do comando a criao do arquivo de sada. Se
este for igual ao de entrada, ele zerado.
Universidade Federal Fluminense

35

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Filtros
Os chamados programas "ltro "pegam sua entrada de stdin, fazem alguma modicao nesses dados
e colocam a sada em um stdout (tela do terminal).
O mais simples programa ltro o cat, que faz uma cpia el da entrada na sada. Outros
programas desse tipo so: sort, wc, que conta as linhas, caracteres e palavras, grep, que mostra as
linhas de um arquivo contendo uma seqncia de caracteres, e muitos outros comandos UNIX.
No so programas ltro: ls, who, date, cal, pois, embora a sada seja para stdout, a entrada no
stdin.

uniq : Remove linhas duplicadas dos arquivos.


Mas h uma condio: a lista deve estar ordenada.
A opo -d faz com que sejam listados somente os nomes repetidos.
Ex: Observe que o comando uniq no d resultado quando a lista no est ordenada.

$ cat lista
Alexandre
Jos
Felipe
Tatiana
Beatriz
Eduardo
Enrico
Aline
Erica
Jos
$ uniq lista
Alexandre
Jos
Felipe
Tatiana
Beatriz
Eduardo
Enrico
Aline
Erica
Jos
$ sort lista | uniq
Alexandre
Aline
Beatriz
Eduardo
Enrico
Universidade Federal Fluminense

36

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

Erica
Felipe
Jos
Tatiana
$ sort lista | uniq -d
Jos
$
split : Divide o arquivo em partes.
As principais opes so:

-bn  Divide o arquivo em partes com n bytes de tamanho. A unidade de n pode ser em k
(kilobytes ) ou M (Megabytes).
-ln  Divide o arquivo em partes com n linhas de tamanho.
Sintaxe: split [opes] <arquivo> [prefixo]
Ex: O arquivo arqu2.txt ser dividido em arquivos de 3 linhas cada.

$ split -l3 arqu2.txt arqlin


$ ls -l
total 1080
-rw-r--r-1 kurumin kurumin
139 2006-01-11
-rw-r--r-1 kurumin kurumin
131 2006-01-11
-rw-r--r-1 kurumin kurumin
111 2006-01-11
-rw-r--r-1 kurumin kurumin
130 2006-01-11
-rw-r--r-1 kurumin kurumin
89 2006-01-11
-rwxrwxrwx
1 kurumin kurumin
161 2005-04-09
-rwxrwxrwx
1 kurumin kurumin
600 2006-01-11
-rwxrwxrwx
1 kurumin kurumin
10 2005-03-27
-rwxrwxrwx
1 kurumin kurumin
5615 2005-03-27
-rwxrwxrwx
1 kurumin kurumin
71 2005-03-27
-rwxrwxrwx
1 kurumin kurumin
10 2005-03-27
-rwxrwxrwx
1 kurumin kurumin
69 2006-01-10
-rwxr-xr-1 kurumin kurumin
67 2006-01-10
-rwxrwxrwx
1 kurumin kurumin
161 2005-04-09
$ cat arqlinaa
=> A liberdade de executar o programa, para qualquer
propsito (liberdade no. 0)
=> A liberdade de estudar como o programa funciona,
$ cat arqlinab
e adapt-lo para as suas necessidades
(liberdade no. 1). Aceso ao cdigo-fonte
um pr-requisito para esta liberdade.
Universidade Federal Fluminense

37

11:36
11:36
11:36
11:36
11:36
21:42
11:27
12:57
13:02
13:00
12:58
16:42
16:40
21:42

arqlinaa
arqlinab
arqlinac
arqlinad
arqlinae
arqu1.txt
arqu2.txt
cap2.tex
image.jpg
page.html
parIII.tex
parII.tex
parI.tex
texto.txt

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

$
cut : Extrai colunas ou campos de um arquivo.
Sintaxe: cut [opes] <arquivo>
As opes podem ser:

-b  Seleciona campos por bytes.


-c  Seleciona campos por caracteres.
-f campos  Seleciona lista de campos, onde podem ser nmeros separados por vrgula ou faixas
de nmeros (n1-n2), ou combinao de ambas.
-d  Especica o delimitador de campo.
E: O delimitador de campo informado no exemplo abaixo um espao em branco. Veja o
resultado da escolha do campo 4 do comando date.

$ date
Qua Jan 11 14:04:49 BRST 2006
$ date|cut -d" " -f 4
14:06:31
$ date|cut -c 5
J
$
tr : Substitui caracteres
Pode ser usado para trocar as letras de maisculas para minsculas.
Sintaxe: tr [opes] <string1> <string2>
As opes principais so:

-c  Realiza a troca de todos os caracteres, exceto da string1.


-d  Elimina os caracteres especicados em string1, ignorando string2.
-s  Comprime a seqncia de caracteres repetidos da string2.
Ex: Converte as letras minsculas para maisculas.

Universidade Federal Fluminense

38

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

$ cat capital.txt|tr "[a-z]" "[A-Z]"


RIO DE JANEIRO
SO PAULO
VITRIA
BELO HORIZONTE
$
Ex: Converte mltiplos espaos em branco em um nico espao.

$ cat capital.txt
Rio
de
Janeiro
So
Paulo
Vitria
Belo
Horizonte
$ cat capital.txt|tr -s " "
Rio de Janeiro
So Paulo
Vitria
Belo Horizonte
$
paste : Exibe lado a lado contedo de arquivos.
Sintaxe: paste [opes] <arquivo1> <arquivo2>
As opes so:

-s  exibe as linhas de um arquivo em srie em vez de uma abaixo da outra.


-d c  Especica o delimitador de campos como sendo o caracter c em vez da tabulao.
Ex: Sejam os arquivos estado.txt e capital.txt. O estado ser colocado ao lado da capital,
separados por ": ".

$ cat estado.txt
Rio de Janeiro
So Paulo
Esprito Santo
Minas Gerais
$ cat capital.txt
Rio de Janeiro
So Paulo
Vitria
Belo Horizonte
Universidade Federal Fluminense

39

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

$ paste -d: estado.txt capital.txt


Rio de Janeiro:Rio de Janeiro
So Paulo:So Paulo
Esprito Santo:Vitria
Minas Gerais:Belo Horizonte
$
wc : Conta o nmero de linhas.
Com as opes:

-l  Mostra apenas o nmero de linhas.


-w  Apenas o nmero de palavras
-c  Apenas o nmero de caracteres.
Sintaxe: wc [opes] <arquivo>

$ wc arqu2.txt
14
90
$ wc -l arqu2.txt
14 arqu2.txt
$ wc -w arqu2.txt
90 arqu2.txt
$ wc -c arqu2.txt
600 arqu2.txt
$

600 arqu2.txt

tail : Exibe as ltimas linhas de um arquivo


Sintaxe: tail [opes] <arquivo>
Exemplo:

$ tail -n 5 arqu1.txt
Para entender o conceito,
voc deve pensar em
"liberdade de expresso",
no em "cerveja grtis".
$
As opes so semelhantes a do comando head, porm sero mostradas as ltimas m linhas ou
ltimos m bytes.
Universidade Federal Fluminense

40

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

grep : Localiza cadeias de caracteres em uma entrada denida.


Essa localizao baseada em expresses regulares. A entrada do comando grep pode ser um
arquivo ou a sada de outro comando.
Sintaxe: grep [opes] "expresso"[arquivo]
Exemplo: Sero listadas todas as linhas dos arquivos .txt que contm a palavra "liberdade".

$ grep liberdade *.txt


arqu1.txt: de liberdade, no de preo.
arqu1.txt:"liberdade de expresso",
arqu2.txt:=> A liberdade de executar o programa, para qualquer
arqu2.txt: propsito (liberdade no. 0)
arqu2.txt:=> A liberdade de estudar como o programa funciona,
arqu2.txt: (liberdade no. 1). Aceso ao cdigo-fonte
arqu2.txt: um pr-requisito para esta liberdade.
arqu2.txt:=> A liberdade de redistribuir cpias de modo
arqu2.txt: (liberdade no. 2).
arqu2.txt:=> A liberdade de aperfeioar o programa, e
arqu2.txt: (liberdade no. 3). Acesso ao cdigo-fonte
arqu2.txt: um pr-requisito para esta liberdad
Exemplo: Sero listadas as informaes referentes aos arquivos .jpg do diretrio corrente.

$ grep ls|grep *.jpg


-rwxrwxrwx
1 ze ze

5615 2005-03-27 13:02 image.jpg

H tambm comandos variantes do grep: o egrep e o fgrep. O primeiro tem como caracterstica
adicional a possibilidade do uso de metacaracteres. O segundo no apresenta essa funcionalidade.
A vantagem deste ltimo sobre o comando grep sua rapidez.
Exemplo: Sero localizadas as linhas que comeam com um caracter qualquer seguido das letras
S ou P do arquivo arq1.txt.

$ egrep '^.(S|P)' arqu1.txt


"Software Livre" uma questo
Para entender o conceito,

Observe que foram usados apstrofos ' para limitar a expresso procurada. Seu uso importante
para evitar erros de interpretao pelo shell, j que h caracteres com signicado especial.
O caracter '' foi usado para indicar o incio da linha, o ponto . para indicar um caracter qualquer
e a barra | foi usada para representar ou lgico. A expresso ^.(S|P), ento, signica incio de
linha com qualquer caracter seguido das letras S ou P. As expresses com uso desses caracteres
Universidade Federal Fluminense

41

PETTELE)))

Captulo 3. Comandos

3.2. Comandos e utilitrios bsicos

especiais so chamadas de expresses regulares. A seo 3.3 tem mais sobre o uso de expresses
regulares.
As principais opes do grep so listadas abaixo:

-i  Ignora a diferena entre maisculas e minsculas


-c  Mostra o nmero de linhas em que a expresso foi encontrada
Exemplo: Voltando ao exemplo anterior, vamos ver em quantas linhas ocorreu a palavra liberdade.

$ grep -c liberdade *.txt


arqu1.txt:2
arqu2.txt:10
nome.ord.txt:0

-l  Lista somente o nome dos arquivos que contm a expresso


-n  Numera cada linha que contm a expresso procurada
head : Mostra as linhas iniciais de um arquivo
Sintaxe: head [opes] <arquivo>
As opes podem ser:

-c m  Mostra o texto que ocupa o tamanho de m bytes.


-n m  Mostra o texto das m primeiras linhas. Por padro, so mostradas as 10 primeiras linhas
se no for especicada nenhuma opo.
Exemplo:

$ head -c 23 arqu1.txt
"Software Livre" uma
$
more : Mostra arquivos texto tela a tela
Sintaxe: more [opo] <arquivo>

Universidade Federal Fluminense

42

PETTELE)))

Captulo 3. Comandos

3.3. Expresses Regulares e Metacaracteres

As principais opes so:


+n : exibe o arquivo a partir da linha n especicada.
-s : exibe mltiplas linhas em branco como sendo apenas uma.
As teclas associadas ao more so:

<espao>: para visualizar a prxima tela.


<return>: para visualizar a prxima linha.
<b>: para visualizar a tela anterior.
<f>: para avanar uma tela.
<q>: sair do comando.

less : Mostra arquivos texto pgina a pgina com rolagem


Sintaxe: less <arquivo>
Tem a mesma funo do comando more.

Pipes
Os Pipes so a forma pela qual podemos construir uma conexo de dados entre a sada de um comando
e a entrada de outro. A sada do comando anterior serve de entrada para o posterior.
Forma de um comando pipe: comando1 | comando2 | ...
Comandos conectados por pipe formam um pipeline.
Por exemplo: `ls -la|more`. Este comando faz a listagem longa de arquivos, que enviada ao
comando more. O comando more tem a funo de efetuar uma pausa a cada 25 linhas do arquivo.

Comando tee
Envia o resultado do programa para a sada padro do terminal e, ao mesmo tempo, para uma sada
escolhida, por exemplo, um arquivo. Este comando deve ser usado com o comando pipe.
Exemplo:

ls -la|tee listagem.txt
A sada do comando ser mostrada normalmente no terminal e, ao mesmo tempo, gravada no arquivo
listagem.txt.

3.3 Expresses Regulares e Metacaracteres


Expresso Regular uma seqncia de caracteres que simboliza diversas outras seqncias sem precisar list-las. Nestas expresses, alguns caracteres recebem um signicado especial, sendo chamados
de metacaracteres. atravs da utilizao destes caracteres que podemos simbolizar uma quantidade
enorme de palavras ou frases com uma expresso bem simples.
A Tabela 3.2 mostra alguns caracteres e seus signicados. Os mais utilizados so os colchetes, o
asterisco, o ponto e a interrogao.
Universidade Federal Fluminense

43

PETTELE)))

Captulo 3. Comandos

3.3. Expresses Regulares e Metacaracteres

Caracter Descrio
.

[ ]
[^]
?
*
+
{}
^
$
\b
\
|
()
.*
*?
+?
{}?

Exemplos

Coringa de um caracter
Coincide com qualquer um dos caracteres listados
Coincide com qualquer um dos caracteres, exceto os listados
O caracter anterior pode aparecer ou no
O caracter anterior pode aparecer em qualquer quantidade
O caracter anterior deve aparecer no mnimo uma vez
O caracter anterior deve aparecer na quantidade indicada
Coincide com o comeo da linha
Coincide com o m da linha
Limita uma palavra (letras, nmeros e sublinhado)
Torna os metacaracteres caracteres comuns.
Atua como operador "ou".
Faz com que vrios caracteres sejam vistos como um s.
Qualquer caracter, em qualquer quantidade.
Semelhante ao asterisco.
Semelhante ao sinal de mais.
Semelhante s chaves simples.

vi.a

[gpr]ato
[^mf]ato
meios?
go*gle
go+gle
go{1,5}gle
^rio
mente$
\b(meu)
srio\?
(co|fu)mo
(sai)?rei
eu.*voc

Tabela 3.2: Expresses Regulares

Universidade Federal Fluminense

44

PETTELE)))

Captulo 4
Introduo ao script-shell para LINUX
4.1 Aspectos bsicos
4.1.1 Script e Script Shell
O shell um interpretador de comandos que possui uma linguagem utilizada por diversas pessoas para
facilitar a realizao de inmeras tarefas administrativas no Linux (como efetuar backup regularmente,
procurar textos, criar formataes), e at mesmo para criar programas um pouco mais elaborados. A
linguagem shell interpretada, no havendo necessidade de compilar para gerar um arquivo executvel.
Um script shell , ou simplesmente script , um arquivo contendo uma seqncia de um ou mais
comandos. Este arquivo diretamente executvel quando chamado pelo nome.
O Shell foi escrito em diferentes verses. Dos vrios programas Shell existentes, o Bourne Shell, o
Korn Shell e o C Shell se destacam por serem os mais utilizados e conhecidos.
O Bourne Shell conhecido como Shell padro, sendo o mais utilizado e estando na maioria dos
sistemas Unix like.
O Korn Shell uma verso melhorada do Bourne Shell.
O C Shell possui uma estrutura bastante parecida com a linguagem C e tambm uma verso
modicada do Bourne Shell.
Alm desses, h um shell padro do Linux, chamado Bourne-Again Shell. Este pode ser considerado
o mais completo, sendo compatvel com todos os shells citados anteriormente.
Mas qualquer programador pode fazer o seu Shell. Estes shells tornaram-se conhecidos pois j
vinham com o sistema, exceto o Korn, que tinha que ser adquirido separadamente. O Bourne Shell
vinha com o System V e o C Shell com o BSD.
Algumas caractersticas:
Shell
Bourn Shell
Bourn-Again Shell
Korn Shell
C shell

Prompt
$
$
$
%

Representao

sh
bash
ksh
csh

45

Captulo 4. Introduo ao script-shell para LINUX

4.2. Execuo do programa

4.2 Execuo do programa


Um programa pode ser escrito em um editor de sua preferncia como vi, kWrite, KEdit entre outros.
O arquivo salvo como texto comum. No nicio do arquivo deve vir escrito:

#!/bin/bash
Os caracteres especiais #! (chamados hash-bang ) informam ao kernel que o prximo argumento
o programa utilizado para executar este arquivo. No caso, /bin/bash o shell que utilizamos. O
kernel l o hash-bang no incio da linha, ento ele continua lendo os caracteres seguintes e inicia o bash.
Quando o shell l o hash-bang, ele o interpreta como uma linha de comentrio e a ignora, iniciando a
execuo do programa.
preciso mudar a permisso do arquivo para executvel para ele funcionar. Isso feito pelo
comando chmod. Para que o programa seja executvel de qualquer parte do sistema necessrio salvlo em algum diretrio que esteja no PATH (varivel do sistema que contm a lista de diretrios onde
o shell procura pelo comando digitado). Entretanto, permitido salv-lo em um diretrio qualquer
(como o diretrio home do usurio), porm na hora de execut-lo pelo prompt, necessrio que seja
indicado todo o caminho desde a raiz, ou, estando no mesmo diretrio do arquivo, digitar no prompt:
./nomearquivo.
OBS: Tambm possvel modicar o PATH para incluir um diretrio de sua escolha.
Por exemplo: vamos supr que o usurio criou uma pasta em seu diretrio para salvar seus scripts
com o nome de scripts. Para tornar esse diretrio como parte do PATH faa o seguinte:
Digite no prompt:
$ echo $PATH
Esse seu PATH atual. Em seguida digite:
$ PATH=$HOME/scripts:$PATH
e
$ echo $PATH
Esse seu novo PATH, com seu diretrio de exemplos includo. Agora seus scripts podem ser
executados de qualquer diretrio. Porm, dessa forma, a mudana da varivel PATH s vale enquanto
o shell corrente estiver aberto. Se for aberto outro shell, a mudana no ter efeito.
Existem arquivos que so inicializados assim que o shell aberto:
/etc/profile : Tem as conguraes bsicas do sistema e vale para todos os usurios. Somente
o root tem permisso para modicar esse arquivo.

.bash_profile ou .bash_login ou .profile ou .bashrc : Estes arquivos cam no diretrio


home do usurio. As modicaes feitas nesse arquivo s valem para o prprio usurio. Podemos,
ento, abrir o arquivo .bashrc e colocar nele o novo PATH. Alm disso, podemos incluir tambm
aliases.
Ex: Se tivssemos um diretrio chamado scripts e quisssemos coloc-lo no PATH, bastaria
acrescentar a linha abaixo ao arquivo .bashrc. Tambm foram colocados alguns aliases.

PATH=$PATH:~/scripts
alias c='clear'
alias montar='mount /dev/fd0'
Universidade Federal Fluminense

46

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.2. Execuo do programa

Vamos fazer um exemplo passo-a-passo agora para criar e executar um programa.


Escreva em seu editor de texto o programa abaixo e salve como um.sh.

#!/bin/bash
echo "Programa UM!"
Agora no prompt, mude as permisses do arquivo.

$ chmod a+x um.sh


Agora s chamar o programa no prompt.

$ sh um.sh
Neste caso o arquivo estava no mesmo diretrio de trabalho. E se o arquivo estivesse em um
diretrio diferente? Lembre-se de mudar o PATH!

4.2.1 Erros na execuo


Para o usurio iniciante, bem provvel que ele se depare com alguns erros bem comuns e fceis de
resolver. Os principais so:

"command not found - Esse quer dizer que o shell no encontrou seu programa.
A razo para isso pode ser que o nome do comando foi digitado de forma diferente do nome do
arquivo. Certique-se de que o nome est igual. Outra razo possvel que o arquivo est em
um local diferente do PATH padro. Nesse caso, deve-se proceder conforme explicado na seo
anterior, que explica como salvar o arquivo.

"Permission denied - A permisso para execuo do arquivo foi negada. O usurio deve mudar
a permisso do arquivo para executvel.
Outro erro comum o de sintaxe. Nesse caso o shell encontra o script e indica a linha onde
ocorreu o erro no programa.

4.2.2

Quoting

Denomina-se quoting a funo de remover a predenio ou signicado especial dos metacaracteres.


Dessa forma, possvel escrever os caracteres literalmente.
H 3 tipos de mecanismos para quoting :
1. Barra invertida (\) - Chamada de caracter de escape, ela remove o signicado especial do
caracter seguinte ela.
Exemplo:
Universidade Federal Fluminense

47

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.3. Comentrios

$ echo O # um caracter especial


O
$ echo O \# um caracter especial
O # um caracter especial

Observe a diferena que o uso da barra provoca.

$
>
>
>
>

echo agora a barra est sendo\


usada para que seja possvel\
continuar escrevendo em outra linha\
Veja que apareceu um prompt secundrio \
Mas na hora da impresso as linhas saem seguidas.
agora a barra est sendousada para que seja possvelcontinuar
escrevendo em outra linhaVeja que apareceu um prompt
secundrio Mas na hora da impresso as linhas saem seguidas.

Neste exemplo a barra suprimiu o signicado de m de linha.


2. Aspas simples (') - Todos os caracteres que vem entre estas aspas tem seu signicado removido.
Exemplo:

$ echo 'Com aspas simples no necessrio colocar\


> barra para cada caracter # $ * !'
Com aspas simples no necessrio colocar barra para
cada caracter # $ * !
3. Aspas duplas (") - semelhante anterior, porm no remove o signicado de $, \, ", ' e
{varivel}.

4.3 Comentrios
Para deixar seu programa mais claro e fcil de entender, o usurio no s pode como deve acrescentar
comentrios em seu cdigo-fonte utilizando o caracter # no incio da linha. Esta linha no ser
executada pelo shell quando ele o encontrar. Isso bastante til para permitir a leitura posterior do
arquivo, correo de erros, mudanas no programa entre outras tarefas.
Por exemplo, no incio de um script poderia ser escrita a sua funo.

# Script para administrar as contas dos novos usurios


<comandos>

Universidade Federal Fluminense

48

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.4. Impresso na tela

Um bom cdigo-fonte deve ter um cabealho identicando o autor e as funes do programa.


importante lembrar que, independentemente da linguagem usada, comentrios so essenciais para um
bom entendimento do programa escrito, tanto pelo autor como por outros usurios.
Abaixo segue uma lista de recomendaes que um programador deve seguir:

Escreva os comentrios no momento em que estiver escrevendo o programa.


Os comentrios devem acrescentar algo e no apenas descrever o funcionamento do comando.
Utilize espaos em branco para aumentar a legibilidade.
Coloque um comando por linha, caso a situao permita.
Escolha nomes representativos para as variveis.

4.4 Impresso na tela


O comando echo permite mostrar na tela seus argumentos.
Ex:

$echo Escrevendo seu argumento


Escrevendo seu argumento
Existem caracteres especiais que so interpretados pelo comando echo. Em algumas verses do
Linux deve ser usado o parmetro opcional -e. Esta opo habilita a interpretao dos caracteres de
escape listados abaixo.

\\ - Barra invertida (backslash ).


\nnn - Escreve o caracter cujo octal nnn.
\xHH - Escreve o caracter cujo hexadecimal HH.
\a - Caracter de alerta sonoro (beep ).
\b - Backspace.
\c - Suprime newline, forando a continuao na mesma linha.
\f - Alimentao de formulrio.
\n - Inicia um nova linha.
\r - Carriege return. Retorna ao incio da linha.
\t - Equivale a um espao de tabulao horizontal.
\v - Equivale a um espao de tabulao vertical.
Ex:

Universidade Federal Fluminense

49

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.5. Passagem de parmetros e argumentos

$ echo -e "Este exemplo mostra o uso de alguns dos caracteres mostrados:


> Comeando pela contra-barra \\
> Caracter hexadecimal \100
> Usando backspace\b
> iniciando \n nova linha
> apagando o que foi \r escrito anteriormente na linha
> e tabulando \t horizontalmente e \v verticalmente."
Este exemplo mostra o uso de alguns dos caracteres mostrados:
Comeando pela contra-barra \
Caracter hexadecimal @
Usando backspace
iniciando
nova linha
escrito anteriormente na linha
e tabulando
horizontalmente e
verticalmente.
OBS: Para saber a representao octal e hexadecinal correspondente ao caracter desejado, consulte
a tabela ASCII no manual: man ascii.
Quando o usurio no desejar que a sada do comando echo pule de linha, ele deve usar a opo
-n.

4.5 Passagem de parmetros e argumentos


Parmetros so variveis passadas como argumentos para o programa ou variveis "especiais"que
guardam certas informaes.
Quando um programa recebe argumentos em sua linha de comando, estes so chamados de
parmetros posicionais. Eles so numerados de acordo com a ordem em que foram passados.
Exemplo:

$ cat local.sh
#Programa recebe e mostra dados
echo Cidade: $1
echo Estado: $2
echo Pas: $3
$ ./local.sh Niteri "Rio de Janeiro" Brasil
Cidade: Niteri
Estado: Rio de Janeiro
Pas: Brasil
Como pode ser visto no exemplo, o programa chamado local recebe 3 argumentos. O primeiro,
Cidade, guardado na varivel $1, o segundo, Estado, em $2 e o terceiro, Pas, em $3. Porm, o shell
limita em 9 o nmero de argumentos. Para trabalhar com essa limitao, existe o comando shift n
que faz com que os primeiros n argumentos passados no faam parte na contagem de argumentos.
Universidade Federal Fluminense

50

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.5. Passagem de parmetros e argumentos

Exemplo: Sero passados mais de 9 argumentos para o programa, mas atravs do uso do comando
shift ser possvel listar todos.

$ cat shift.sh
#Programa recebe e mostra dados usando shift
echo Argumento1: $1
echo Argumento2: $2
echo Argumento3: $3
echo Argumento4: $4
echo Argumento5: $5
echo Argumento6: $6
echo Argumento7: $7
echo Argumento8: $8
echo Argumento9: $9
shift 9
echo Argumento10: $1
echo Argumento11: $2
$ ./shift.sh a b c d e f g h i j l m n
Argumento1: a
Argumento2: b
Argumento3: c
Argumento4: d
Argumento5: e
Argumento6: f
Argumento7: g
Argumento8: h
Argumento9: i
Argumento10: j
Argumento11: l

H tambm os parmetros especiais que podem ser usados pelo programa:

$ * - Este parmetro informa uma string com todos os argumentos passados para o programa, onde
cada argumento aparece separado pelo IFS (veja a seo 5.8, que fala de variveis de sistema).

$ @ - Este parmetro semelhante ao anterior, porm os argumentos aparecem separados por espaos
em branco.

$# - Este informa o nmero de argumentos passados na chamada do programa.


$? - Este guarda o valor de retorno do ltimo comando executado. Quando a execuo do programa

acontece normalmente, retornado 0, e se tiver ocorrido algum erro retornado um valor


diferente de zero.

$$ - Informa o nmero do processo de um determinado programa (PID).


Universidade Federal Fluminense

51

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.5. Passagem de parmetros e argumentos

$! - Informa o nmero do processo do ltimo programa sendo executado em background.


$0 - Informa o nome do shell script executado.
Exemplo: Ser visto o uso de alguns desses parmetros especiais.

$ cat parametros.sh
# Mostra os dados relativos aos parametros passados
echo Foram passados $# argumentos.
echo Os argumentos foram: $@.
$ ./parametros.sh um dois trs quatro
Foram passados 4 argumentos.
Os argumentos foram: um dois trs quatro.

4.5.1 Leitura de parmetros


Quando for necessrio passar algum dado para o programa, usa-se o comando read, que l a entrada
escrita no terminal.
Exemplo:

$ cat read.sh
# uso do comando read
echo Digite uma palavra:
read algo
echo Voc digitou: \"$algo\"
$ ./read.sh
Digite uma palavra:
Por que no uma frase?
Voc digitou: "Porque no uma frase?"

Este comando permite ainda a passagem de uma lista de variveis, desde que estas venham separadas entre espaos em branco.
Exemplo: Agora o programa read sofreu uma modicao para receber uma lista de variveis.

$ cat read.sh
# uso do comando read
echo Digite umas palavras:
read prim segun ter
echo Voc digitou:
Universidade Federal Fluminense

52

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

echo
echo
echo

4.5. Passagem de parmetros e argumentos

\"$prim\"
\"$segun\"
\"$ter\"

$ ./read.sh
Digite umas palavras:
Mas agora eu quero digitar uma frase!
Voc digitou:
"Mas"
"agora"
"eu quero digitar uma frase!"

Se forem passadas mais variveis do que o comando read vai ler, a varivel excedente interpretada
como se zesse parte da ltima varivel. Como pode ser visto pelo exemplo anterior, onde foram
passadas mais variveis do que as 3 que o programa leria. Ento, a terceira varivel cou com uma
frase.
Algumas opes podem ser usadas com o comando read. So elas:

-p  Nos exemplos acima foi preciso usar o comando echo toda vez antes do comando read.
Porm, isso no necessrio, basta usar esta opo. O prximo exemplo mostra como.
Exemplo:

$ cat read.sh
# uso do comando read
read -p "Digite umas palavras:" prim segun ter
echo Voc digitou:
echo
\"$prim\"
echo
\"$segun\"
echo
\"$ter\"
$ ./read.sh
Digite umas palavras:Dessa vez o echo no foi usado antes
Voc digitou:
"Dessa"
"vez"
"o echo no foi usado antes"

-s  Esse parmetro serve para no ecoar o que foi digitado. Seu uso principal na leitura de
senhas.
-n  Este parmetro permite limitar o nmero de caracteres que sero lidos pelo read. Sua
sintaxe : read -n N string. Ler apenas os N caracteres da string digitada.
Universidade Federal Fluminense

53

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.6. Funes

4.6 Funes
Funes so estruturas que renem comandos na forma de blocos lgicos, permitindo a separao do
programa em partes. Quando o nome de uma funo chamado dentro do script como um comando,
todos os comandos associados a esta funo so executados.
A sintaxe para o uso de funes da forma:

function nome () {
...
<comandos>
...
}
Onde nome o nome que ser dado funo criada. E comandos denem o corpo da funo.
A principal vantagem de usar funes a possibilidade de organizar o cdigo do programa em
mdulos.
O exemplo a seguir demonstra o uso de funes em script. Um menu de opes mostrado, sendo
que cada opo leva execuo de uma funo diferente.

#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
#
#
#
clear
menu()
{
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo
echo

"
Calculadora Bsica
"
"
Operao apenas com inteiros
"
"|-----------------------------------|"
"| Escolha uma das opes abaixo: |"
"|-----------------------------------|"
"| 1) Soma
|"
"| 2) Subtrao
|"
"| 3) Multiplicao
|"
"| 4) Diviso
|"
"| 5) Sair
|"
"|-----------------------------------|"
"|-----------------------------------|"

read opcao
case $opcao in
Universidade Federal Fluminense

54

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.6. Funes

1)
2)
3)
4)
5)
*)

soma ;;
subtra ;;
mult ;;
div ;;
exit ;;
"Opo Inexistente" ;
clear ;
menu ;;
esac
}

soma()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "+" $num2`"
menu
}
subtra()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "-" $num2`"
menu
}
mult()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "*" $num2`"
menu

Universidade Federal Fluminense

55

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.6. Funes

}
div()
{

clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "/" $num2`"
menu

menu
Repare no script acima que a funo menu foi colocada no nal do programa. Experimente chamar
a funo menu no incio e veja o que acontece.

4.6.1 Execuo de script por outro script


possvel executar um script de outro arquivo com se ele fosse uma funo qualquer dentro de outro
programa. Para isso, basta escrever: . nomescript no lugar onde ele deve ser executado.
Tendo como base o exemplo anterior, podemos mostrar a execuo de scripts dentro de outros.
O primeiro programa o script principal referente ao menu de opes. Observe como as operaes
so chamadas.

#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
# PARTE -> MENU
#
#
clear
menu(){
echo
echo
echo
echo
echo

"
Calculadora Bsica
"
"
Operao apenas com inteiros
"
"|-----------------------------------|"
"| Escolha uma das opes abaixo: |"
"|-----------------------------------|"

Universidade Federal Fluminense

56

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

echo
echo
echo
echo
echo
echo
echo

4.6. Funes

"| 1) Soma
|"
"| 2) Subtrao
|"
"| 3) Multiplicao
|"
"| 4) Diviso
|"
"| 5) Sair
|"
"|-----------------------------------|"
"|-----------------------------------|"

read opcao
case $opcao in
1) . soma.sh ;;
2) . subtra ;;
3) . mult ;;
4) . div ;;
5) exit ;;
*) "Opo Inexistente" ;
clear ;
menu ;;
esac
}
menu
O script seguinte refere-se a operao de soma.

#!/bin/bash
#
#
# Este script executa as funes bsicas de uma calculadora:
# Soma, Subtrao, Multiplicao e Diviso.
#
# PARTE -> SOMA
soma()
{
clear
echo "Informe o primeiro nmero"
read num1
echo "Informe o segundo nmero"
read num2
echo "Resposta = `expr $num1 "+" $num2`"
menu
}
soma

Universidade Federal Fluminense

57

PETTELE)))

Captulo 4. Introduo ao script-shell para LINUX

4.7. Depurao

4.7 Depurao
Para vericar os problemas e possveis causas de erros que acontecem nos scripts, basta rodar o
programa da seguinte forma:

$ sh -x programa
A opo -x faz com que o programa seja executado passo-a-passo, facilitando a identicao de
erros.

Universidade Federal Fluminense

58

PETTELE)))

Captulo 5
Manipulao de variveis
Varivel uma posio nomeada de memria, usada para guardar dados que podem ser manipulados
pelo programa.
Em shell no necessrio declarar a varivel como em outras linguagens de programao.

5.1 Palavras Reservadas


Palavras reservadas so aquelas que possuem um signicado especial para o shell.
O Shell possui comandos prprios (intrnsecos) como:

! case do done elif else esac


select then
until while {
}

fi for function
time [[
]]

if

in

Alm disso, o Unix possui outros comandos, vistos nos captulos anteriores.
Em programao, geralmente trabalhamos com manipulao de variveis. Dessa forma, importante lembrar que o uso dessas palavras deve ser evitado, tanto no nome dado s variveis quanto no
nome dado ao script.

5.2 Criao de uma varivel


Uma varivel criada da seguinte forma:

$ nomevar=valor
Uma varivel reconhecida pelo shell quando ela vem precedida pelo smbolo $. Quando este
smbolo encontrado, o shell substitui a varivel pelo seu contedo. nomevar o nome da varivel e
valor o contedo que ser atribudo varivel. importante assegurar que no haja espao antes
e depois do sinal "="para evitar possveis erros de interpretao. No exemplo acima, foi criada uma
varivel local. Para criar um varivel global, usado o comando export.
$ export nomevar
ou
$ export nomevar=valor
Exemplo: Ser atribudo um valor varivel chamada var, e em seguida este valor ser mostrado
pelo comando echo.

59

Captulo 5. Manipulao de variveis

5.2. Criao de uma varivel

$ var=Pensamento
$ echo "O contedo o $var"
O contedo o Pensamento
Vale lembrar algumas regras para a nomenclatura de variveis que se aplicam s linguagens de
programao:

O nome da varivel s pode comear com letras ou underline.


So permitidos caracteres alfanumricos.
No devem haver espaos em branco nem acentos.
Exemplo: Veja o uso de aspas simples, duplas e crases com variveis:

$ variavel="Meu login : $user"


$ echo $variavel
Meu login : ze
$ variavel='Meu hostname : $HOSTNAME'
$ echo $variavel
Meu hostname : $HOSTNAME
$ variavel="O diretorio de trabalho : `pwd`"
$ echo $variavel
O diretorio de trabalho : /home/ze
Quando vamos executar um script ou comando, um outro shell chamado, executa os comandos
e ento retorna ao shell original onde foi feita a chamada. Por isso importante lembrar de exportar
suas variveis para que elas sejam reconhecidas pelo "shell lho".

$ cat dir.sh
#!/bin/bash
echo "Veja que o diretrio vai mudar"
echo "Inicialmente o diretrio era: $PWD"
# neste ponto o diretorio mudou
cd /usr/bin
echo "Agora o diretrio atual $PWD"
echo "Mas terminado o programa parece que nada aconteceu.
O diretrio continua sendo o inicial."
$ sh dir.sh
Veja que o diretrio vai mudar
Inicialmente o diretrio era: /home/kurumin/scripts
Agora o diretrio atual /usr/bin
Mas terminado o programa parece que nada aconteceu.
O diretrio continua sendo o inicial.
$
Universidade Federal Fluminense

60

PETTELE)))

Captulo 5. Manipulao de variveis

5.3. Deleo de uma varivel

5.3 Deleo de uma varivel


Uma varivel apagada quando for usado o comando unset.
$unset nomevar
Exemplo: Vamos ver o que acontece quando a varivel var, criada anteriormente, for deletada.

$ unset var
$ echo "O contedo o $var"
O contedo o

5.4 Visualizao de variveis


Utilizando o comando set possvel visualizar as variveis locais e com o comando env as variveis
globais podem ser vistas.

5.5 Proteo de uma varivel


Para evitar alteraes e deleo de uma determinada varivel usa-se o comando readonly. Dessa
forma, a varivel ganha atributo de somente leitura.

$ readonly nomevar
Todas as variveis readonly, uma vez declaradas, no podem ser "unsetadas"ou ter seus valores
modicados. O nico meio de apagar as variveis readonly declaradas pelo usurio saindo do shell
(logout).

5.6 Substituio de variveis


Alm de substituio de variveis (varivel pelo seu contedo, visto em exemplos anteriores), outros
tipos de substituies so possveis no shell. As principais so:

Substituio de comando - Nesse caso, o nome do comando substitudo pelo resultado de


sua operao quando ele for precedido pelo smbolo $ e entre () ou vier entre sinais de crase (`).

$(comando)
ou
`comando`

Geralmente este tipo de manipulao utilizada na passagem do resultado de um comando para


uma varivel ou para outro comando.
Exemplo:
Universidade Federal Fluminense

61

PETTELE)))

Captulo 5. Manipulao de variveis

5.7. Variveis em vetores

$ dir=`pwd`
$ echo "O diretrio atual tem o seguinte caminho: $dir"
O diretrio atual tem o seguinte caminho: /home/kurumin/scripts

5.7 Variveis em vetores


O shell permite o uso de variveis em forma de array. Ou seja, vrios valores podem ser guardados
em uma varivel seguindo a ordem de uma indexao. Assim como no necessrio declarar o tipo
de varivel no incio do programa, tambm no preciso declarar que uma varivel ser usada como
vetor.
Um array criado automaticamente se for atribudo um valor em uma varivel da seguinte forma:
nomevar[indice]=valor, onde ndice um nmero maior ou igual a zero.
Exemplo:

$ camada[0]=Fsica
$ camada[1]=Enlace
$ camada[2]=Redes
$ echo "As 3 camadas mais baixas da internet so: ${camada[*]}"
As 3 camadas mais baixas da internet so: Fsica Enlace Redes
Outra forma de se atribuir valores em array :
nomevar=(valor1, valor2, ..., valorn).

$ camada=(Fsica, Enlace, Redes)


$ echo "As 3 camadas mais baixas da internet so: ${camada[*]}"
As 3 camadas mais baixas da internet so: Fsica, Enlace, Redes
Para fazer referncia a um elemento do array s fazer: ${nomevar[indice]}.
Para ver toda a lista de valores do array basta fazer ${nomevar[*]} ou ${nomevar[@]}. A
diferena entre o uso do * ou @ semelhante a diferena vista no uso de parametros especiais.

5.8 Variveis do sistema


Existem algumas variveis que so prprias do sistema e outras que so inicializadas diretamente pelo
shell.
Algumas dessas variveis, denominadas variveis do shell so explicadas abaixo:

HOME  Contm o diretrio home do usurio.


LOGNAME  Contm o nome do usurio atual.
IFS  Contm o separador de campos ou argumento (Internal Field Separator ). Geralmente, o IFS
um espao, tab, ou nova linha. Mas possvel mudar para outro tipo de separador.
Exemplo:

Universidade Federal Fluminense

62

PETTELE)))

Captulo 5. Manipulao de variveis

5.8. Variveis do sistema

$ num=(1 2 3 4 5)
$ echo "${num[*]}"
1 2 3 4 5
$ echo "${num[@]}"
1 2 3 4 5
$ OLDIFS=$IFS
$ IFS='-'
$ echo "${num[*]}"
1-2-3-4-5
$ echo "${num[@]}"
1 2 3 4 5
$ echo $IFS
$ echo "$IFS"
$ IFS=$OLDIFS
$ echo "$IFS"

Vamos entender o que foi feito: foi criado um vetor para ilustrar o IFS quando forem usados
os caracteres e * para listar o array. O IFS inicial um espao em branco, ento tanto pelo
uso do como pelo uso do *, os elementos foram listados separados por um espao em branco.
Em seguida uma varivel chamada OLDIFS recebeu o contedo de IFS e IFS recebeu um hfen
(-). A separao na listagem dos elementos saiu diferente, ou seja, o novo separador foi usado
quando foi usado o asterisco. Finalmente, o IFS recebeu seu valor inicial, espao em branco.
Essa mudana permanece somente na seo em que foi modicada e at que ela seja fechada.

PATH  Armazena uma lista de diretrios onde o shell procurar pelo comando digitado.
PWD  Contm o diretrio corrente.
PS1  Esta denominada Primary Prompting String. Ou seja, ela a string que est no prompt que
vemos no shell. Geralmente a string utilizada : \u@\h:\w $. O signicado desses caracteres e
de outros principais est explicado abaixo:

\s O nome do shell.
\u Nome do usurio que est usando o shell.
\h O hostname
\w Contm o nome do diretrio corrente desde a raiz.
\d Mostra a data no formato: dia_da_semana ms dia.
\nnn Mostra o caracter correspondente em nmeros na base octal.
\t Mostra a hora atual no formato de 24 horas, HH:MM:SS.
\T Mostra a hora atual no formato de 12 horas, HH:MM:SS.
Universidade Federal Fluminense

63

PETTELE)))

Captulo 5. Manipulao de variveis

5.8. Variveis do sistema

\W Contm somente o nome do diretrio corrente.

PS2  Esta denominada Secondary Prompting String. Ela armazena a string do prompt secundrio.
O padro usado o caracter >. Mas pode ser mudado para os caracteres mostrados acima.

MAIL  o nome do arquivo onde cam guardados os e-mails.


COLUMNS  Contm o nmero de colunas da tela do terminal.
LINES  Contm o nmero de linhas da tela do terminal.
Existem muitas outras variveis que so descritas na pgina do manual do Bash, na seo Shell
Variables.

Universidade Federal Fluminense

64

PETTELE)))

Captulo 6
Testes e Comparaes em Script-Shell
6.1 Cdigo de retorno
Antes de falar sobre testes e comparaes importante que o usurio entenda como as decises so
tomadas dentro de um programa.
Todo comando do UNIX retorna um cdigo e este chamado cdigo de retorno. Quando o comando
executado sem erros, o cdigo retornado vale 0. Porm, se houver alguma falha, retornado um
nmero diferente de 0.
O caracter especial ? funciona como uma varivel que guarda o cdigo de retorno do comando
anterior. O exemplo abaixo mostra o resultado da operao de alguns comandos.
Exemplo: Quando acontece algum erro na execuo do comando, o cdigo de retorno diferente
de zero.

$ echo "$PS1"
\u@\h:\w\$
$ echo $?
0
$ rm documento.txt
rm: cannot lstat `documento.txt': No such file or directory
$ echo $?
1

6.2 Avaliao das expresses


As expresses so avaliadas no shell atravs do comando test ou pelo uso da expresso entre colchetes
[ ], uma maneira mais prtica do uso do comando test.

$
$
$
1
$
$
0

var=Z
test $var = w
echo $?
[ $var = Z ]
echo $?

65

Captulo 6. Testes e Comparaes em Script-Shell

6.3. Operadores booleanos

O resultado da expresso retornado 0 para verdadeiro ou no 0 para falso.

6.3 Operadores booleanos


Os operadores booleanos so relacionados lgica e, ou, negao entre outras relaes. Os operadores
que podem ser usados em expresses no shell so:

-a - e (and ).
-o - ou (or).
! - negao (not).
A combinao desses 3 operadores pode gerar outras funes lgicas.
Vrias condies tambm podem ser agrupadas com o uso de condio".
Ex:

$ cat boole.sh
#!/bin/bash
read -p "Informe um nmero e uma letra: " num letra
if [ \( "$num" -gt 0 -a "$num" -lt 10 \) -o \( $letra = v \) ]
then
echo "Acertou a faixa do numero ou a letra."
else
echo "Errou as duas informaes."
fi
$ sh boole.sh
Informe um nmero e uma letra: 15 v
Acertou o faixa do numero ou a letra.
$

6.4 Testes Numricos


As relaes utilizadas para testes numricos so as descritas abaixo:

-eq  Igual (equal to ).


-gt  Maior que (greater than ).
-ge  Maior ou igual (greater or equal ).
-lt  Menor que (less than ).
-le  Menor ou igual (less or equal ).
-ne  No-igual a (not equal to ).
Universidade Federal Fluminense

66

PETTELE)))

Captulo 6. Testes e Comparaes em Script-Shell

6.4. Testes Numricos

A sintaxe para teste :

[ var/nmero relao var/nmero ]


onde var/nmero indica o contedo da varivel ou um nmero.
Exemplo:
$
$
1
$
1
$
0

num=10
[ $num -eq 9 ]; echo $?
[ $num -le 9 ]; echo $?
[ $num -ge 9 ]; echo $?

Outra maneira de realizar o teste colocando var/nmero entre aspas. Dessa forma evitamos a
ocorrncia de erros.

[ "var/nmero" relao "var/nmero" ]


Exemplo: Observe o que acontece quando a expresso comparada com o valor nulo sem aspas

$ [ $num -ge ]; echo $?


bash: [: 10: unary operator expected
2
$ [ "$num" -ge " " ]; echo $?
0

6.4.1 O Comando let


Este comando permite outra maneira de fazer testes numricos. Em vez de usar as relaes citadas
anteriormente, so usados os smbolos:

==  Igual
>  Maior que
>=  Maior ou igual
<  Menor que
<=  Menor ou igual
!=  No-igual
A sintaxe :

let expresso
Exemplo:

$ let "0 != 1"


$ echo $?
0

Universidade Federal Fluminense

67

PETTELE)))

Captulo 6. Testes e Comparaes em Script-Shell

6.5. Testes de Strings

Uma variao desse comando o uso de parnteses duplo:

((expresso))

$ ((0 <= 5)) ; echo $?


0
Essa uma sintaxe semelhante a da linguagem C. Outro uso comum no incremento de variveis:

let var++

# equivalente a "var=$[ $var + 1 ]"

let var--

# equivalente a "var=$[ $var - 1 ]"

Exemplo:

$ num=102
$ let num++
$ echo $num
103
$ num=$[$num + 1]
$ echo $num
104
$ num=$((num+1))
$ echo $num
105
$ let num=num+1
$ echo $num
106
$ let num+=4
$ echo $num
110

6.5 Testes de Strings


O tamanho de uma string pode ser obtido pelo uso do comando expr length string .
Ex:

$ expr length palavra


7
$
Ex:

#!/bin/bash
echo "Digite a senha: "
read -s senha
Universidade Federal Fluminense

68

PETTELE)))

Captulo 6. Testes e Comparaes em Script-Shell

6.5. Testes de Strings

comp=$(expr length $senha)


if [ "$comp" -lt 6 -o "$comp" -gt 9 ]
then
echo "Senha Invlida."
echo "Por segurana no so aceitas senhas com menos de
6 caracteres ou mais que 9."
echo "Informe uma nova senha."
else
echo "Senha aceita."
fi
Os operadores para testes de string podem ser:

Binrios
= - Retorna verdadeiro se as duas strings forem iguais.

$ str=palavra
$ [ "$str" = "cadeia" ]
$ echo $?
1

!= - Retorna verdadeiro se as duas strings forem diferentes.

Unrios
-z - Retorna verdadeiro se o comprimento da string igual 0.
-n - Retorna verdadeiro se o comprimento da string diferente de 0.

$ [ -n $str ]
$ echo $?
0

A sintaxe para a comparao de string segue o mesmo modelo para a comparao numrica:

["var/string" relao "var/string"]


A preferncia para o uso de aspas foi dada porque geralmente as strings contm espaos em branco.
Assim, so evitados erros de interpretao pelo shell.

Universidade Federal Fluminense

69

PETTELE)))

Captulo 6. Testes e Comparaes em Script-Shell

6.6. Testes de arquivos

6.6 Testes de arquivos


Sempre que vamos trabalhar com arquivos necessrio realizar testes como os mesmos para evitar
erros. Para testar arquivos existem as opes:

-d  O arquivo um diretrio.
-e  O arquivo existe.
-f  um arquivo normal.
-s  O tamanho do arquivo maior que zero.
-r  O arquivo tem permisso de leitura.
-w  O arquivo tem permisso de escrita.
-x  O arquivo tem permisso de execuo.
A sintaxe usada deve ser:

[ opo arquivo ]
Ex:

$ ls -l arqu1.txt data
-rwxrwxrwx
1 pet linux
-rw-r--r-1 pet linux
drwxr-xr-x
3 pet linux
$ [ -d scripts ]
$ echo $?
0
$ [ -d arqu1.txt ]
$ echo $?
1
$ [ -e arqu1.txt ]
$ echo $?
0
$ [ -f arqu1.txt ]
$ echo $?
0
$ [ -r data ]
$ echo $?
0
$ [ -x data ]
$ echo $?
1

161
95
1312

Universidade Federal Fluminense

2005-04-09 21:42
2005-04-07 22:00
2005-01-07 22:57

70

arqu1.txt
data
scripts

PETTELE)))

Captulo 7
Controle de uxo
Para as linguagens de programao, uma das mais importantes estruturas o controle de uxo. Com
o shell no diferente. Com ele, a execuo do programa pode ser alterada de forma que diferentes
comandos podem ser executados ou ter sua ordem alterada de acordo com as decises tomadas. So
realizados saltos, desvios ou repeties. Nas prximas sees explicaremos cada tipo de estrutura.

7.1 Deciso simples


A estrutura de deciso simples aquela que realiza desvios no uxo de controle, tomando com base o
teste de uma condio dada, uma opo entre duas que podem ser escolhidas.
Uma deciso simples uma construo com os comandos if/then. Isso representa se condio
ento realiza determinado comando.
Sintaxe:

if[expresso]; then
fi

comando

Ex: Este programa bem simples mostra o uso do if. H um arquivo chamado livro.txt cujo
contedo segue abaixo:

#LIVRO
#EXEMPLARES
###########################
eletromagnetismo 5
redes
4
clculo
8
fsica
6
eletrnica
7
O programa abaixo mostra o nmero de exemplares de um determinado assunto. Mas, primeiro,
vericado se o livro est na lista.

#!/bin/bash
echo -n

"Qual livro voc deseja? "


71

Captulo 7. Controle de uxo

7.2. Deciso mltipla

read Livro
if grep $Livro livro.txt>>/dev/null
then echo "O livro $Livro possui `grep $Livro livro.txt|cut -f2` exemplares."
else echo "Este livro no est na lista"
fi
Obs: O diretrio /dev/null um lugar para onde redirecionamos a sada de um comando quando
no desejvel que ela aparea no prompt.

7.2 Deciso mltipla


Este tipo de estrutura engloba, alm dos comandos vistos anteriormente, os comandos elif e else.
Neste caso, se a condio dada no for satisfeita, h outro caminho a ser seguido, dado pelo elif, que
seria a combinao de else com if (seno se...). A diferena entre o uso de elif e else if que, se
fosse usado o ltimo, seria necessrio usar o fi.
Sintaxe:

if [expresso]; then
comando
elif [expresso]; then
comando
elif [expresso]; then
...

comando

else
comando
fi

7.2.1 O comando case


Outra forma de fazer desvios mltiplos pelo uso do comando case . Ele semelhante ao if pois
representa tomada de deciso, mas permite mltiplas opes. Esta estrutura bastante usada quando
necessrio testar um valor em relao a outros valores pr- estabelecidos, onde cada um desses valores
tem um bloco de comando associado.
Ex: Este exemplo d o Estado de acordo com o DDD digitado.
Universidade Federal Fluminense

72

PETTELE)))

Captulo 7. Controle de uxo

7.3. Controle de loop

echo "Insira o cdigo DDD: "


read cod
case $cod in
21) echo "Rio de Janeiro";;
11) echo "So Paulo";;
3[0-8]) echo "Minas Gerais";;
*) Echo "Insira outro cdigo";;
esac

Deciso com && e || Esses caracteres permitem a tomada de decises de uma forma mais reduzida.
A sintaxe usada :

comando1 && comando2


comando1 || comando2
O && faz com que o comando2 s seja executado se comando1 retornar 0, ou seja, se comando1
retornar verdadeiro o comando2 executado para testar se a condio toda verdadeira.
O || executa o comando2 somente se o comando1 retornar uma valor diferente de 0, ou seja, somente
se comando1 retornar falso que comando2 ser executado para testar se a condio toda verdadeira.
Ex: Se o arquivo livro.txt realmente existir ser impresso na tela: O arquivo existe.

[ -e livro.txt ] && echo "Arquivo Existe"


Ex: Se o diretrio NovoDir no existir criado um diretrio com o mesmo nome.

cd NovoDir 2> /dev/null || mkdir NovoDir

7.3 Controle de loop


Existem 3 tipos de estruturas de loop, que sero vistas na prxima seo. Esse tipo de estrutura
usada quando preciso executar um bloco de comandos vrias vezes.

7.3.1

While

Nesta estrutura feito o teste da condio, em seguida ocorre a execuo dos comandos. A repetio
ocorre enquanto a condio for verdadeira.

while <condio> do
<comandos>
done
Universidade Federal Fluminense

73

PETTELE)))

Captulo 7. Controle de uxo

7.3. Controle de loop

condio pode ser um teste, uma avaliao ou um comando.


Ex:
#!/bin/bash
echo "Tabela de Multiplicao do 7: "
i=7;
n=0;
while [ $n -le 10 ]
do
echo $i x $n = $(($i * $n))
let n++
done

7.3.2

Until

Neste caso, a repetio ocorre enquanto a condio for falsa. Ou seja, primeiramente a condio
testada, se o cdigo de retorno for diferente de zero os comandos so executados. Caso contrrio, a
execuo do programa continua aps o loop.

until <condio> do
<comandos>
done
condio pode ser um teste, uma avaliao ou um comando.
Ex: Este exemplo semelhante ao exemplo anterior do comando while. O que mudou foi a
condio de teste.
#!/bin/bash
echo "Tabela de Multiplicao do 7: "
i=7;
n=10;
until [ $n -eq 0 ]
do
echo $i x $n = $(($i * $n))
let n-done

7.3.3

For

A sintaxe da estrutura for a seguinte:

Universidade Federal Fluminense

74

PETTELE)))

Captulo 7. Controle de uxo

7.3. Controle de loop

for variavel in lista do


<comandos>
done
Seu funcionamento segue o seguinte princpio: variavel assume os valores que esto dentro da lista
durante os loops de execuo dos comandos. As listas podem ser valores passados como parmetros,
dados de algum arquivo ou o resultado da execuo de algum comando. Com o exemplo abaixo ca
mais fcil de entender isso.
Ex: Este programa cria diretrios com o nome diretorioNUMERO, onde NUMERO vai de 1 5.

#!/bin/bash
for i in `seq 1 5`
do
mkdir diretorio$i
done
O comando seq NumInicial NumFinal faz uma contagem seqencial do nmero inicial dado at
o nmero nal.
Para estes 3 tipos de construo de loops, existem dois comandos que permitem alterar a rotina
de sua execuo . So eles:

break [n] - Este comando aborta a execuo do loop e salta para a prxima instruo aps o
loop.

continue [n] - Este comando faz com que o uxo de execuo do programa volte para o incio
do loop antes de complet-lo.
Ex: O Exemplo abaixo ilustra o uso de break e do continue

#!/bin/bash
echo "Tente acertar o nmero "
echo "Dica: Ele est entre 10 e 50. "
i=1
while true
do
echo "Digite o Nmero: "
read num
if [ $num != 30 ]
then
echo "Voc errou. Tente outra vez"
let i++
continue
Universidade Federal Fluminense

75

PETTELE)))

Captulo 7. Controle de uxo

7.3. Controle de loop

fi
if [ $num == 30 -a $i == 1 ]
then
echo Voc acertou de primeira. Parabns!
break
fi
if [ $num == 30 ]
then
echo Voc acertou aps $i tentativas.
break
fi
done

Universidade Federal Fluminense

76

PETTELE)))

Apndice A
O Projeto GNU e o Linux
As informaes completas que esto neste captulo podem ser encontradas na pgina ocial do Projeto
GNU, veja ref. [11].
O Projeto GNU foi idealizado em 1983 como uma forma de trazer de volta o esprito cooperativo
que prevalecia na comunidade de informtica nos seus primrdios  para tornar a cooperao possvel
uma vez mais, removendo os obstculos impostos pelos donos do software proprietrio.
Em 1971, quando Richard Stallman iniciou a sua carreira no MIT, ele trabalhava em um grupo que
usava software livre exclusivamente. Mesmo as empresas de informtica distribuam software livre.
Programadores eram livres para cooperar entre si, e freqentemente faziam isso.
Nos anos 80, quase todo o software era proprietrio, o que signicava que ele tinha donos que
proibiam e impediam a cooperao entre os usurios. Isso tornou o Projeto GNU necessrio.
Todo usurio de computadores necessita de um sistema operacional; se no existe um sistema
operacional livre, voc no pode nem mesmo iniciar o uso de um computador sem recorrer ao software
proprietrio. Portanto, o primeiro item na agenda do software livre um sistema operacional livre.
Nos anos 90, este objetivo foi atingido quando um kernel livre foi desenvolvido por Linus Torvalds:
este kernel era o Linux. A combinao do Linux com o quase completo sistema GNU resultou em um
sistema operacional completo: um sistema GNU baseado no Linux (GNU/Linux), incluindo Slackware,
Debian, Red Hat, entre outros. Leia o artigo: why-gnu-linux no site do projeto GNU.
Um sistema UNIX-like composto por muitos programas diferentes. Alguns componentes j
esto disponveis como software livre, por exemplo, X Window, TeX, GNU Emacs, GNU C, Bash,
Ghostscript. Atualmente, se tem feito um esforo para fornecer software para usurios que no so
especialistas em computadores. Portanto, estamos trabalhando em um desktop baseado em cones,
utilizando arrastar-e-soltar para ajudar os iniciantes a utilizar o sistema GNU.
O projeto GNU no somente desenvolvimento e distribuio de softwares livres. O corao do
projeto GNU uma idia: que o software deve ser livre.

A.1 Software Livre


A expresso "Software livre"se refere liberdade dos usurios executarem, copiarem, distriburem,
estudarem, modicarem e aperfeioarem o software. Mais precisamente, ela se refere a quatro tipos
de liberdade, para os usurios do software:
1. A liberdade de executar o programa, para qualquer propsito.

77

Apndice A. O Projeto GNU e o Linux

A.1. Software Livre

2. A liberdade de estudar como o programa funciona e adapt-lo para as suas necessidades. Acesso
ao cdigo-fonte um pr-requisito para esta liberdade.
3. A liberdade de redistribuir cpias de modo que voc possa ajudar ao seu prximo.
4. A liberdade de aperfeioar o programa e liberar os seus aperfeioamentos, de modo que toda a
comunidade se benecie. Acesso ao cdigo-fonte um pr-requisito para esta liberdade.
importante ressaltar que Software Livre est ligada liberdade de expresso, e no de preo.

Universidade Federal Fluminense

78

PETTELE)))

Apndice B
Editor de textos vi
O programa VI o mais famoso editor de texto ASCII do UNIX. Foi desenvolvido em Berkeley
University California por Willian Joy, a partir do editor UNIX Ed.
O VI trabalha em trs modos:

modo digitao ("a"ou "i")


modo comando interno (<ESC>)
comando na ltima linha (<ESC>":")

B.1 Comandos internos - vi


* teclar <ESC> e a letra correspondente:. As letras que podem ser usadas so listadas abaixo:
h  move o cursor para a esquerda
l  move o cursor para a direita
j  move o cursor para baixo
k  move o cursos para cima
^f  move uma tela para frente
^b  move uma tela para trs
a  insere caracter direita do cursor
A  insere caracter no nal da linha
i  insere caracter esquerda do cursor
I  insere caracter no incio da linha
o  insere linha abaixo do cursor
O  insere linha acima do cursor
u  desfaz ltima modicao
U  desfaz todas as modicaes feitas na linha
x  apaga caracter
dw  apaga palavra
dd - apaga linha
s  substitui caracter
cw  substitui palavra
/string  procura string
? string  move o cursor para a ocorrncia anterior da palavra
79

B.2. Comandos da ltima linha - vi

Apndice B. Editor de textos vi

n  repete o ltimo / ou ?

B.2 Comandos da ltima linha - vi


* teclar <ESC>: e o comando correspondente:. Os comandos podem ser os listados abaixo:

set num  enumera o texto


set nonu  retira numerao do texto
5,10 d  apaga da linha 5 at a linha 10
1,2 co 4  copia linhas 1 e 2 para depois da linha 4
4,5 m 6  move linhas 4 e 5 para depois da linha 6
1  posiciona o cursor na primeira linha do texto
$  posiciona o cursor no nal do texto
w  salva o arquivo e continua editando
q!  sai do editor de textos sem salvar o arquivo
x  sai do editor de textos e salva o arquivo
Existem tambm outros editores de texto em sistemas UNIX como o vim, emacs, joe, jed, pico.

Universidade Federal Fluminense

80

PETTELE)))

Referncias Bibliogrcas
[1] Neves, Julio Cezar, Programao Shell Linux, Editora Brasport, Rio de Janeiro, 2000.
[2] Araujo, Jiro, Comandos do Linux - Uso eciente e avanado, Editora Cincia Moderna Ltda.,
Rio de janeiro, 2001
[3] Tanenbaum, Andrew S., Sistemas Operacionais, Traduo D. A. Polli, USP, 2000.
[4] Raimundo, Rodivaldo Marcelo, Curso Bsico de programao em POSIX-Shell Script, Editora
Book Express, Rio de janeiro, 2000.
[5] Tanenbaum, Andrew S., Organizao Estruturada de Computadores , Terceira edio, Editora
Prentice/Hall do Brasil , Rio de Janeiro, 1992.

Sites
[6] Guia focalinux , www.focalinux.org, Este site contm guias sobre GNU/Linux de todos os
nveis.
[7] Bash FAQ, ftp://ftp.cwru.edu/pub/bash/FAQ, Perguntas e dvidas mais freqentes relacionadas
ao Bash.
[8] Expresses Regulares , http://guia-er.sourceforge.net, Guia sobre expresses regulares.
[9] Lista de discusso , http://br.groups.yahoo.com/group/shell-script, Lista de discusso do yahoogrupos.
[10] Shell Script - Por que programar tem que ser divertido, www.aurelio.net, Aurlio Marinho
Jargas, pgina pessoal. Contm uma vasta lista para referncias sobre script-shell.
[11] Projeto GNU, www.gnu.org, Pgina ocial do projeto GNU
[12] www.br-linux.org
[13] www.vivaolinux.com.br
[14] www.scriptbrasil.com.br

81

Você também pode gostar