Você está na página 1de 102

Curso de Introdução ao Linux

(Marco Álvarez, Cláudia Nasu,


Alfredo Lanari, Luciene Marin)

DCT - UFMS, 1996

Introdução ao Linux
Sumário
Conceitos Básicos ............................................. 3

Introdução ........................................................ 12

Iniciando .......................................................... 18

Arquivos e Diretórios ....................................... 29

O Editor vi ....................................................... 50

Segurança ......................................................... 59

Redirecionamento ............................................ 67

Gerenciamento da execução de comandos ...... 74

Shell do Linux .................................................. 83

Ferramentas de Comunicação ......................... 92

Introdução ao Linux
Conceitos Básicos 3

Capítulo 0
Conceitos Básicos
Muitas pessoas possuem uma dificuldade em lidar com os computadores,
simplesmente porque não sabem o que é, como funciona e para que serve. É certo que
existe uma dificuldade inicial relacionada a operação do computador em si. Isto é, há uma
série de comandos com formatos difíceis de lembrar e quais as respectivas tarefas que
eles executam.
Entretanto, nos últimos anos estão surgindo novas facilidades para os
usuários de microcomputadores pessoais. Tais como interfaces gráficas poderosas que
eliminam a necessidade de digitação de longas linhas de comandos (Windows, X11,
System 7, etc). Nestas interfaces, os comandos são executados via menus, caixas de
diálogos e ícones.
Geralmente, estas interfaces gráficas ainda apresentam opções de se
executar comandos através do método “tradicional”, ou seja, digitando-se o comando por
extenso. Isto porque muitos comandos não funcionam nestas interfaces gráficas; ou
ainda porque algumas o pções mais detalhadas só podem ser ativadas pela linha de
comando. Mas a tendência é que todos os comandos sejam implementados em forma
gráfica e iterativa.
A princípio é necessário formalizarmos certos termos que serão utilizados
durante todo o texto. Termos simples, mas que muitas vezes esquecemos ou
simplesmente não sabemos por que não temos a obrigação de tê-los em mente. Afinal
usuários não precisam ser especialistas em computadores para poderem utilizá-los.
Vamos então às definições preliminares:

Computador

A primeira vista parece desnecessário ter que dar uma definição do que é
um computador, mas o que se vê na prática, é que muitas pessoas não possuem uma visão
clara do que é um microcomputador. E por este mesmo motivo, não se imaginam
providas de meios de como lidar com estes equipamentos.
Por computador entendemos simplesmente como uma máquina capaz de
realizar cálculos e operações sobre informações, podendo, desta forma, resolver uma
série de problemas, desde que seja fornecido um programa.

“Computador é uma máquina programável capaz de realizar


processamento de informações.”

Introdução ao Linux
Conceitos Básicos 4

Quando dizemos programável significa que há um conjunto de instruções


ou programa que diz ao computador o que deve ser feito. É o que chamamos de software .
Por ser uma máquina o computador também é composto por fios, cabos, placas, circuitos
e outros equipamentos físicos. É o que chamamos de hardware. Desta forma, um
computador é um sistema integrado formado por hardware ou componentes físicos e por
software que é a parte inteligente que comanda o computador.
Por processamento de informação devemos entender a capacidade de
receber informações, transformá-las (processamento) e exibir os resultados.
Graficamente temos:

Entrada Processamento Saída

Programa

As informações manipuladas pelo computador podem variar muito, bem


como a maneira de ser tratada internamente. Podemos classificá-las da seguinte maneira:

1. Dados: são letras e números. A princípio, computadores só podiam


reconhecer e entender estes tipos de informações através de uma tabela mantida
internamente que convertia cada conjunto de 8 sinais elétricos em uma letra ou dígito,
criando um sistema de codificação e decodificação compreensível para o ser humano.
Esta tabela existe até os dias de hoje e chama-se tabela ASCII. Outros tipos de tabelas
foram criadas como a EBCDIC e ANSI Windows, mas a dominante é a tabela ASCII.
Exemplo:
A 10000001
B 10000010
C 10000011
. .
. .
. .
Como a corrente elétrica pode assumir apenas dois estados, convencionou-
se que o número zero (0) indica a ausência de corrente elétrica por um fio e o número
um (1) pela passagem de corrente. A tabela ASCII é formada por 8 dígitos. Como cada
dígito pode assumir o valor zero ou um, podemos representar 256 caracteres diferentes
(2 8=256) mais que suficiente para as letras e dígitos existentes.
No princípio da computação, se quiséssemos escrever uma letra teríamos
que ligar e desligar um conjunto de fios para indicar que queremos representar uma
determinada letra do alfabeto. Hoje em dia basta pressionar no teclado que é gerado um
sinal ou interrupção para o microprocessador informando qual a tecla pressionada. O
computador então consulta a tabela ASCII, identifica a tecla e desenha ponto a ponto o
caracter no monitor. Todo o desenho dos caracteres é mantido em uma tabela no
computador.

Introdução ao Linux
Conceitos Básicos 5

2. Sons : atualmente podemos armazenar e manipular sons como em uma


mesa de som de mais alta tecnologia devido aos avanços na área de sons digitais. Música
e som são grandezas físicas ditas analógicas, isto é, caracterizadas por perturbações do
ar. Mas computadores não entendem estas perturbações, então para que os mesmos
pudessem ser reconhecidos, adaptou-se um microfone ao microcomputador que é
sensível às vibrações e que converte -as em impulsos elétricos que podem ser
manipulados pelos computadores. Por isto é chamado de som digital. Os circuitos
responsáveis por esta conversão chama-se conversor analógico-digital.
3. Imagens: os primeiros computadores possuíam muito pouca capacidade
e velocidade e portanto não podiam tratar de imagens com a mesma eficiência que hoje
em dia. Imagens estáticas como fotografias podem ser capturadas por aparelhos
especiais conhecidos como scanners através de sensores infravermelhos e da reflexão da
luz. Imagens dinâmicas (animação e vídeo) podem ser obtidas por câmeras de vídeo
ligadas a microcomputadores através de placas e softwares especiais. O problema deste
tipo de informações é que temos que representar as imagens ponto a ponto e além disto
manter informações sobre brilho, cor, intensidade, luminosidade, etc, gastando uma
quantidade maior de memória para podemos manter imagens em computadores.

Arquivos
O computador organiza as informações internamente através de uma
unidade denominada arquivo. Um arquivo contem um determinado tipo de informação e é
criado por um outro arquivo especial denominado arquivo de programa ou arquivo
executável, que é o software em si. Podemos então classificar os arquivos como sendo:
1) arquivos executáveis: são os programas ou softwares propriamente
ditos. Através deles é que criamos e modificamos outros tipos de arquivos. Eles
fornecem um ambiente particular. Podem ser:
• iterativos: quando se comunicam com o usuário.
• não iterativos: quando não se comunicam com o usuário.
Usuários podem aprender a utilizar os arquivos executáveis, mas não existe
um padrão sobre o funcionamento dos mesmos. Assim, para sair de um determinado
editor de textos eu utilizo a tecla F3, em outro editor a tecla de saída pode ser ALT+X.
Cada equipe de programadores define o funcionamento do programa que esta criando.
Atualmente existe uma tendência a padronizar as teclas com operações
mais comuns de forma que funcionem igualmente em todos os programas e os usuários
não tenham tantas dificuldades em aprender a usar diferentes softwares. Uma das
vantagens das interfaces gráficas é a padronização das operações mais comuns.
2) arquivos de dados: contém apenas informações alfabéticas e numéricas
(alfanuméricas). São utilizados para substituir o excesso de papéis e documentos em
empresas, mantendo informações cadastrais em computador ao invés de mantê-los em
arquivos de aço. Entretanto, em alguns casos os arquivos de dados, apesar de diminuir o
volume de papéis excessivo, não tem a intenção de eliminar o processo manual, mas de
fornecer um meio mais rápido e eficiente de consulta e acesso às informações. É uma
forma alternativa de manter dados importantes e volumosos.
3) arquivos de sons : comportam voz, música e sons em geral capturados
através de uma placa de som e um microfone ou um instrumento musical acoplado ao
computador por uma placa especial.

Introdução ao Linux
Conceitos Básicos 6

4) arquivos de imagens: possuem imagens estáticas capturadas com


scanners ou dinâmicas capturadas com câmeras digitalizadoras.

Diretórios
Se guardássemos todos os arquivos de um computador juntos em um único
lugar, teríamos pelo menos dois grandes problemas. Primeiro, seria extremamente
difícil, ou mesmo impossível saber se já existe algum arquivo armazenado com aquele
nome. Segundo o Sistema Operacional, para executar o último arquivo, teria que
percorrer todos os outros até chegar no arquivo desejado. Este processo sem dúvida
tornaria o computador lento.
Para facilitar a organização do disco rígido, catalogar arquivos com
mesmas características e facilitar o trabalho do Sistema Operacional, foi criado então o
conceito de diretório .
Um diretório nada mais é que um “repositório” de arquivos e outros
diretórios (chamados de sub-diretórios), formando uma estrutura hierárquica chamada de
árvore de diretório. Podemos entender diretórios como sendo o endereço de um arquivo
dentro do disco rígido.

Bits, Bytes e Unidades


Toda e qualquer informação no computador é representada através do
sistema de numeração binária. Trata-se de uma forma matemática de se tratar a língua do
computador para que possamos conversar com ele. Um bit é a menor informação para o
microcomputador. Ele representa o estado de um fio. O dígito um (1) representa a
passagem de corrente por um fio, e o dígito zero (0) representa a ausência de corrente.
Este sistema de numeração é denominado binário porque só utiliza dois
dígitos. O sistema de numeração que nós conhecemos é o sistema decimal. Existem
outros sistemas e meios de converter números de um sistema para outro. Assim foi
estabelecida uma forma de comunicação inicial do ser humano com o computador, ainda
que de uma forma muito difícil para nós humanos.
Toda e qualquer informação é representada na forma de bits ou conjunto de
bits. Como pudemos ver anteriormente, os dados (letras e números) são codificados no
computador através da tabela ASCII. Imagens são representadas em monitores através de
mapas de bits (bitmaps), ou seja cada ponto luminoso da tela corresponde a um único bit
na memória indicando se deve estar ligado ou desligado. Desenhos são formados
ativando os pontos corretos e mantendo outros desativados. As cores podem ser
representadas por grupos de bits. Por exemplo 4 bits podem ser usados para indicar até
2 4 = 16 cores diferentes.
Convencionou-se, então, quantificar a informação em uma unidade denominada byte (B).
Um byte representa 8 bits, ou seja 2 8= 256 combinações distintas, uma vez que cada bit
pode assumir dois valores diferentes (0 ou 1). Com o passar do tempo esta unidade
tornou-se pequenas para representar os arquivos e a capacidade de armazenamento dos
meios magnéticos, por isto foram criadas novas unidades:

Unidade Medida Abreviação


1 byte 8 bits B
1 kilobyte 1024 B KB
1 megabyte 1024 KB MB

Introdução ao Linux
Conceitos Básicos 7

1 gigabyte 1024 MB GB
1 terabyte 1024 GB TB

Software (Programas)

Programa é uma seqüência de instruções que diz


ao computador o que ele deve fazer. Isto é, qual é a tarefa
específica que deve realizar. Programa e software são
sinônimos e aparecerão como tal durante todo este texto.
Os softwares podem ser classificados em dois
grandes grupos de acordo com a atividade que desempenham:

1. Básico
2. Aplicativos

1. Softwares Básicos servem para a operação e programação do


computador. Podem ser divididos em Utilitários e Ferramentas de Desenvolvimentos.
Sem os softwares básicos os computadores não poderiam ser utilizados pelo homem.
Eles formam um conjunto de programas que interagem entre os seres humanos e os
micros.

Software Básico

Utilitários Ferramentas de
Desenvolvimento

Utilitários são aqueles que operam o computador, controlando seus


recursos e fornecendo um meio de nos comunicarmos com o computador de forma
inteligível. Um exemplo clássico de Utilitário é o Sistema Operacional. Sem ele não
poderíamos dizer ao computador o que desejamos que ele faça.
Ferramentas de Desenvolvimento são softwares para a programação do
computador, ou seja, são programas que permitem criar outros programas de uso geral
ou específico. Por exemplo linguagem C, Pascal, Basic, Clipper, etc.

2. Softwares Aplicativos são programas de uso específico para usuários


finais, como processadores de textos (Microsoft Word, Fácil, Wordstar), planilhas
eletrônicas (Excel, Quattro), sistemas gerenciadores de bancos de dados (Clipper,
FoxProw, Acces), entre outros.
É o software que diz ao computador como a informação fornecida pelo
usuário deve ser processada. Por exemplo, se fornecermos os números 2 e 10 para o
Introdução ao Linux
Conceitos Básicos 8

computador, dependendo do programa ou software que estiver sendo executado, estes


números poderão ser somados e o resultado impresso será 12, ou então o resultado pode
ser 20 se o programa sendo executado multiplicar os dois números fornecidos pelo
usuário.
Portanto é o software que fornece um ambiente para a manipulação de um
determinado tipo de informação. Se não temos um software para reprodução de sons, não
podemos ouvir nem gravarmos música no micro. Para criarmos e modificarmos os
arquivos criados por um aplicativo, devemos aprender como funciona especificamente o
aplicativo, não precisamos necessariamente saber nada sobre Softwares Básicos.

Hardware
Consiste na parte física do computador, placas, fios e cabos que conduzem
a eletricidade e permitem a comunicação e conexão dos diferentes componentes de um
computador. Através do hardware nos comunicamos com a máquina e vice-versa.
Quando um novo dispositivo é ligado ao computador é necessário uma
“interface”, isto é, uma placa que permita a comunicação entre o dispositivo e a unidade
de processamento em si (UCP). Além disto é necessário um software especial para
acessar este dispositivo (driver) e permitir a criação e manipulação de informações
utilizadas pelo dispositivo. Em geral a instalação de dispositivos não é muito difícil, mas
requer alguns conhecimentos a mais a respeito do funcionamento do computador.
Interrupções, canais de entrada e saída, configuração das portas e uso do DMA são
requisitos básicos para a instalação de muitos periféricos no computador.
O hardware de um computador é formado basicamente pelos seguintes
elementos:
1. Dispositivos de Entrada
2. UCP (Microprocessador)
3. Memória Principal
4. Memória Secundária.
5. Dispositivos de Saída.
Dispositivos de Entrada e Dispositivos de Saída são denominados
periféricos pois não estão diretamente relacionados ao processamento, mas sim na
entrada ou saída de informações.
Dispositivos de Entrada permitem ao ser humano introduzir informações
no computador. São exemplos de dispositivos de entrada:
a) teclado : fornece informações alfanuméricas ao computador (dados).
b) mouse: Permite a seleção de atividades através de ícones e opções que
aparecem no monitor.
c) scanner: captura imagens estáticas como fotografias.
d) câmeras digitalizadoras: captura imagens em movimento.
e) leitora ótica: efetua leitura de informações em cartões marcados.

Introdução ao Linux
Conceitos Básicos 9

Dispositivos de Saída exibem os resultados do process amento, permitindo


a comunicação do computador com o homem:
a) monitor: semelhante a um aparelho de televisão, em geral exibe os
caracteres digitados em um teclado.
b) impressora: reproduz os resultados em papel.
c) plotter: exibe gráficos técnicos e complexos em papel.
d) datashow: projeta informações em um telão.
e) paletes: permite a gravação de slides

Há certos equipamentos que ora funcionam como dispositivos de entrada e


ora como dispositivos de saída, logo são conhecidos como Dispositivos de Entrada e
Saída :
a) modem: permitem a troca de informações entre computadores via linha
telefônica.
b) unidades de disquetes: permitem a leitura/gravação de informações em
meio magnético flexível de baixa capacidade e velocidade.
c) unidades de disco rígido (winchester): permitem a leitura/gravação de
informações em meio magnético rígido de alta capacidade e velocidade.
d) CD-R/W (compact disc read write): permitem a leitura/gravação de
informações em discos a laser.

Introdução ao Linux
Conceitos Básicos 10

A Unidade Central de Processamento ( UCP) conhecida como


microprocessador é o cérebro da máquina. Cabe à UCP controlar todo o fluxo de
informações entre os dispositivos de entrada, saída, além de realizar todo o acesso à
memória principal e à memória secundária. Em suma, é o principal componente do
computador responsável pelo processamento da entrada gerando a saída desejada.
Internamente, é composta por uma Unidade de Controle responsável por
acessar a Memória Principal para buscar dados e instruções para serem executadas e pela
Unidade Lógica e Aritmética responsável por todos os cálculos matemático e lógicos
simples. Para os cálculos mais complexos que envolvem ponto flutuante (números reais
de alta precisão), é necessário um chip especial, o co-processador matemático que pode
ser embutido internamente no microprocessador.
Existem diversos fabricantes de microprocessadores. Os mais utilizados
em computadores pessoais são 80286, 80386, 80486 e Pentium de fabricação da Intel.
Estes microprocessadores são conhecidos simple smente pela terminação 286, 386 ou
486. O que difere um dos outros é a capacidade de manipular dados e a velocidade do
clock.

Microprocessador Capacidade Modelo Clock


80386 32 bits SX 33 Mhz
80386 32 bits DX 50 Mhz
80486 32 bits DX 55 Mhz
80486 32 bits DX2 66 Mhz
80486 32 bits DX4 75 Mhz
Pentium 64 bits -- 100 Mhz

A capacidade de um processador refere-se a quantidade de bits que ele


consegue enviar e receber dos outros dispositivos. Quanto maior a capacidade de
manipular bits, melhor e mais rápido é o desempenho do computador. Além disto existe
também o relógio interno ou clock . Trata-se de um pequeno cristal de quartzo que emite
pulsos constantes a um determinado intervalo de tempo. Quanto maior a freqüência (em
MegaHertz), mais rápido é o computador. Estes pulsos do relógio são utilizados pelo
processador para controlar o ciclo de execução das instruções.
A Memória Principal é um circuito especial dedicado a manter informações
enquanto o computador estiver funcionando. É denominada de memória RAM. É nela que
ficam armazenados os programas e informações enquanto estivermos manipulando -as.
Cabe ao Sistema Operacional reconhecer e gerenciar o espaço livre para que seja
possível executar programas e manusear informações. O microprocessador

Introdução ao Linux
Conceitos Básicos 11

constantemente acessa a Memória Principal para ler e escrever informações e


instruções.
A memória RAM (Random Access Memory) é extremamente volátil, isto
é, seu conteúdo é descartado assim que o computador é desligado ou ocorre uma falha na
energia. Para que as informações não se percam, precisamos armazená-las de forma
definitiva naquilo que denominamos Memória Secundária . São os discos flexíveis,
discos rígidos, fitas streamer e discos a laser. Cabe também ao Sistema Operacional
reconhecer e acessar os periféricos responsáveis pela leitura e gravação nestes meios.
O problema da memória RAM é a lentidão com que o microprocessador
acessa seu conteúdo. Criou-se então uma pequena, mas veloz memória denominada
Memória Cache que fica entre o microprocessador e a memória RAM ou internamente
na CPU. Geralmente possui capacidade para 128 até 1024 KB, ao contrário da memória
RAM que pode atingir até 128 MB.
O computador utiliza a memória RAM como área de trabalho, isto é,
enquanto o computador estiver ligado e programas estiverem sendo executados, tudo
ocorre na memória RAM. A memória secundária serve apenas para armazenar de forma
“definitiva” os arquivos para que eles não se percam assim que desligarmos o
microcomputador.
Existem outros tipos de memórias especiais. Memória ROM (Read Only
Memory) é um tipo de memória que já vem gravada de fábrica com um pequeno
programa com tarefas mínimas para que o computador possa ser ligado e funcione
adequadamente. Algumas vezes este circuito é chamado de BIOS (Basic Input Output
System) e contem uma série de pequenos programas para acessar teclado, monitor, disco
rígido, etc.
Há alguns tipos especiais de memória apenas de leitura:
PROM (Programmable Read Only Memory) pode ser gravada pelo próprio
usuário e não mais pelo fabricante, mas uma vez gravada não mais poderá ser apagada.
EPROM (Erasable Programmable Read Only Memory) capaz de ser
programável pelo usuário e se necessário apagar seu conteúdo através de um
equipamento especial.
EEPROM (Electrical Erasable Programmable Read Only Memory) pode
ser programada pelo usuário e apagada através da aplicação de uma corrente elétrica em
um de seus pinos.

Sistema Operacional
O Sistema Operacional é um programa especial que gerencia todos os
recursos da máquina, tais como memória, teclado, vídeo (monitor), mouse, entre outros.
É através do Sistema Operacional que executamos outros programas,
gravamos ou lemos informações em disquetes, visualizamos textos em vídeo ou
impressora, etc. Sem o Sistema Operacional não conseguiríamos realizar estas tarefas.
Ou seja, simplesmente não poderíamoss utilizar o computador.
Existem inúmeros Sistemas Operacionais, tais como: MS-DOS, UNIX,
OS/2, VM/CMS, QNN, etc. Cada um deles possuem características próprias e é
executando em máquinas diferentes. Assim, não podemos executar um programa em
Sistemas Operacionais distintos, a não ser que o fabricante do programa nos garanta esta
portabilidade.

Introdução ao Linux
Conceitos Básicos 12

O Windows só consegue executar programas MS-DOS porque foram


feitos por um mesmo fabricante, a Microsoft. E porque, a princípio, o Windows não é um
Sistema Operacional por si, ele necessita do MS-DOS para funcionar. A versão 95 do
Windows é planejado para ser independente do MS-DOS, mas que aceita aplicativos do
MS-DOS.
É de responsabilidade do Sistema Operacional:
1. Carregar e executar programas.
2. Controlar dispositivos de entrada e saída (teclado, monitor, mouse, etc).
3. Gerenciar arquivos e diretórios.
4. Gerenciar a memória RAM
Como pudemos ver anteriormente, todo e qualquer programa executado
em um computador utiliza a memória RAM. Da mesma forma, o Sistema Operacional
deve ser carregado, ou seja, copiado do disco rígido ou disco flexível para a memória
RAM. Denominamos este processo de BOOT. Toda vez que ligamos o computador, é
feita uma série de testes para verificar o funcionamento dos periféricos e se tudo estiver
perfeito, o Sistema Operacional pode ser carregado.
Os Sistemas Operacionais ainda podem ser classificados quanto ao
número de pessoas que podem utilizar os recursos ao mesmo tempo e quanto ao número
de programas que podem ser executados em uma mesma máquina.
1. Monousuário : permitem apenas um usuário.
2. Multiusuário : permitem vários usuários.
3. Monotarefa: apenas um programa pode ser executado de cada vez.
4. Multitarefa: vários programas podem ser executados ao mesmo tempo.
O MS-DOS é um Sistema Operacional monousuário e monotarefa, ou seja,
permite apenas um operador e executa apenas um programa de cada vez. O Windows,
apesar de não ser um Sistema Operacional, fornece um ambiente monousuário e
multitarefa, onde apenas um único usuário pode executar vários aplicativos ao mesmo
tempo.
Em geral Sistemas Operacionais que são multiusuários são também
multitarefa, como o UNIX e QNN, onde podemos ter vários usuários em terminais
distintos executando, cada um, uma série de programas diferentes ao mesmo tempo.
Além disto, Sistemas Operacionais podem ser classificados quanto ao tipo
de comunicação com o usuário, podendo ser:
1. interface por linha de comando : quando o usuário tem que digitar o
comando por extenso na tela do computador. A comunicação, em geral é feita em modo
texto. Preferencialmente utilizada por especialistas.
interface gráfica para usuários (GUI) : quando os comandos são executados em um
ambiente gráfico com o uso do mouse. Voltada principalmente para o usuário final.

Introdução ao Linux
Introdução 13

Capítulo 1
Introdução

1. Histórico
O Sistema Operacional UNIX foi desenvolvido nos laboratórios da AT&T
para uso próprio, baseado em um antigo projeto que deveria ser o primeiro Sistema
Operacional multiusuário e multitarefa, o MULTICS.
Porém, este projeto estava muito além da capacidade dos equipamentos para a
época. Desta forma o projeto foi arquivado, mas alguns de seus idealizadores (Ken
Thompson, Dennis Ritchie e Rudd Canadaday) resolveram escrever uma versão
simplificada e monousuária para um computador com menores recursos. O resultado
impressionou, mesmo sendo utilizada uma máquina limitada.
Assim, o código foi reescrito para outros computadores melhores,
apresentando excelentes resultados. Por coincidência ou não, estes computadores para
os quais o Sistema Operacional foi reescrito eram utilizados por quase todas as
Universidades que se interessaram por este Sistema Operacional muito superior aos que
vinham sendo utilizados nos laboratórios de computação.
A partir de então, a AT&T licenciou seu mais novo projeto para as
Universidades, mostrando uma enorme visão e capacidade inovadora, pois além do
Sistema Operacional, foi cedido o código do mesmo para as Universidades, que não
mediram esforços em depurar o programa e incluir novas características.
Foi dentro das Universidades que o UNIX cresceu e adquiriu muitas das
características que o tornam poderoso, dando origem a diversas versões além da original
proveniente dos laboratórios da AT&T. Esta característica tornou o UNIX um sistema
poderoso na medida em que foi concebido não apenas por uma equipe de projetistas, mas
sim por toda uma comunidade de pessoas interessadas em extrair o melhor das máquinas.
A princípio, o código do UNIX foi escrito em linguagem assembler ou de
máquina que é altamente dependente do hardware ou parte física do computador. Para que

Introdução ao Linux
Introdução 14

o código fosse reescrito, era necessário muito esforço e tempo. Entretanto, um dos
criadores do Sistema Operacional UNIX resolveu utilizar uma nova linguagem para
escrever o U NIX, era a linguagem C que oferecia o poder da linguagem de máquina com
a facilidade das linguagens estruturadas de alto nível.
A grande vantagem de se utilizar a linguagem C ao invés da linguagem de
máquina própria do computador é a de que a primeira é altamente portável, isto é, um
programa escrito em C para um determinado computador poderá ser executado quase
sem nenhuma modificação em outro tipo de máquina completamente diferente. Enquanto
que se fosse feito um programa em linguagem de máquina para um determinado
computador o programa seria executado somente neste tipo de computador e não nos
demais, para isto, seria preciso reescrever todo o programa.
O UNIX foi projetado para ser executado em computadores de grande
capacidade, ou seja, mini e supercomputadores, pois somente estas máquinas podiam
oferecer suporte aos recursos necessários para o ambiente gerado pelo Sistema
Operacional.
Crescendo longe do alcance dos usuários de microcomputadores, o UNIX
atingiu uma estabilidade e estrutura jamais alcançada por um Sistema Operacional. Mas
nestes quase trinta anos de existência do UNIX, os microcomputadores evoluíram a
ponto de fornecer o mínimo de condições para que este poderoso Sistema Operacional
pudesse ser implementado para os micros IBM -PC e compatíveis.
Diversas versões do UNIX foram escritas e licenciadas para venda com
nomes semelhantes (XENIX, UNISYS, AIX, etc) porém com as mesmas características
essenciais, sendo que atualmente existem inúmeras versões comerciais e outras tantas
versões livres que foram desenvolvidas em Universidades ou por hackers através da rede
Internet.
Apesar de ter sido desenvolvido para lidar com dispositivos de caracteres,
UNIX foi pioneiro na área de gráficos em estações de trabalhos. As primeiras interfaces
gráficas para usuários (GUI) foram projetadas e utilizadas em Sistemas operacionais
UNIX, desenvolvidas pelo MIT (Massachussets Institute of Technology). Trata-se do X
Window System.
Como se pode notar, UNIX é um sistema de inúmeras possibilidades.
Praticamente todos os recursos que os sistemas operacionais mais atuais utilizam já
haviam sido executados em UNIX há muito. Todas as áreas da computação puderam ser
desenvolvidas com o UNIX.
As tendências atuais levam a uma tentativa de padronizar o Sistema
Operacional UNIX combinando as melhores características das diversas versões do
mesmo. Prova disto é a criação do POSIX, um padrão de Sistema Operacional
desenvolvido pela IEEE (Institute of Eletrical and Eletronic Engineers). Além da OSF
(Open System Fundation) que reúne as principais líderes do mercado de equipamentos
para definir o padrão de GUI (interfaces gráficas) para UNIX.

Introdução ao Linux
Introdução 15

A versão que será abordada durante este curso é o LINUX, um clone do


Sistema Operacional UNIX para microcomputadores IBM -PC 386 e compatíveis. O
LINUX foi desenvolvido inicialmente por Linus Torvalds na Universidade de Helsinski
na Finlândia.
O LINUX possui a vantagem de ser um software livre e ser compatível com o
padrão POSIX. Além de unir em um único Sistema Operacional as vantagens das
diferentes versões de UNIX comerciais disponíveis. Desta forma, LINUX torna-se a
melhor opção para que usuários de microcomputadores possam usufruir da capacidade
do UNIX.
Apesar de não poder rodar aplicativos para MS-DOS, o LINUX pode rodar
todos os softwares de desenvolvidos para UNIX, além de estarem disponíveis softwares
que permitem a emulação do MS-DOS e do WINDOWS.
O LINUX pode ser útil em empresas que desejam possuir estações de
trabalho com poder razoavelmente comparável às estações existentes como S UNs e
outras usando PCs, com fiel semelhança no seu uso.
O LINUX pode conviver pacificamente com outros sistemas operacionais no
PC. Existe uma infinidade de formas de instalá-lo: em uma partição DOS já existente,
sem haver a necessidade de reparticionar o HD e conseqüentemente sem nenhuma perda
de informação, pode ainda ser instalado em um HD exclusivamente dedicado a ele.
Para conviver com outros sistemas operacionais, existem algumas maneiras
de carregar o sistema operacional, o Lilo (Linux Loader) que pode funcionar como um
BOOT manager no qual se escolhe qual partição ou drive irá dar a partida, o loadlin que é
um utilitário DOS para carregar o LINUX a partir do DOS, ou por meio de um disco de
boot.
O LINUX pode ser obtido de diversas formas diferentes, existem diversos
livros à venda, os quais incluem CDs com distribuições do LINUX da forma SlackWare.
Outra forma de obtê-lo inteiramente grátis e via ftp pela INTERNET.
Existe hoje, um movimento no sentido de tornar o LINUX um sistema
popular, dado que superioridade técnica ele já possui.
Existem algumas outras versões de UNIX para PCs, tais como Xenix, SCO
Unix, FreeBSD e NetBSD, as últimas duas também livres, no entanto além de mais
popular, o LINUX possui uma série de características a mais, não encontradas em outras
versões, mesmo comerciais, de UNIX.

2. Uma visão geral do LINUX


Um Sistema Operacional deve gerenciar os recursos da máquina da melhor
maneira possível de forma a poder oferecer aos usuários o máximo do computador.
Dentre as principais funções do sistema Operacional, podemos destacar:

Introdução ao Linux
Introdução 16

1. Criar e manipular uma estrutura de arquivos e diretórios.


2. Controlar o acesso à memória e outros dispositivos controlados pelo
microprocessador, como monitor, teclado, impressora, etc.
3. Gerenciar a execução de programas, trazendo-os da memória para o
microprocessador.

A primeira vista, parece que o LINUX nada possui de diferente de qualquer


outro Sistema Operacional, mas nenhum é tão bom em unir e integrar o que há de melhor
em um computador de forma harmoniosa e eficiente devido a sua própria origem em
meio a toda uma comunidade de pessoas interessadas em obter o máximo e o melhor em
desempenho. Cabe ressaltar também que o Linux possui todas as características que
fazem do UNIX um excelente sisterma operacional, entre elas : Portabilidade,
Multiusuário e Multitarefa, Estrutura hierárquica de arquivos, Ferramentas e Utilitários,
Comunicação com outros sistemas.
Daremos uma rápida olhada em algumas das principais características e
vantagens que fazem o LINUX único :
Multitarefa. Linux, como as outras versões do UNIX é um sistema multitarefa,
possibilitando a execução de múltiplas aplicações de diferentes usuários no mesmo
sistema ao mesmo tempo. A performance de uma máquina 486 de 50 MHZ é comparável
com muitas workstations de médio porte rodando UNIX.
O X Window System é, de fato, um padrão na indústria de sistemas gráficos para
máquinas UNIX. Uma versão completa do X Window System, conhecida como Xfree86
está disponível pra Linux.
TCP/IP (Transmission Control Protocol / Internet Protocol), este é um conjunto de
protocolos que liga milhões de universidades e empresas numa rede mundial conhecida
como Internet. Com uma conexão Ethernet o Linux permite que seja feita uma conexão
da Internet a uma rede local.
Memória Virtual. O Linux pode usar parte do seu HD como memória virtual,
“aumentando” assim a capacidade da memória RAM.
Compatibilidade com o IEEE POSIX. Linux foi desenvolvido com a portabilidade
de software em mente.

3. A estrutura do LINUX
Estrutura Lógica

Kernel/Shell

Introdução ao Linux
Introdução 17

Kernel é o núcleo do Sistema Operacional LINUX, que permanece residente


na memória. Através dele que o usuário possui o acesso aos recursos oferecidos pelo
hardware (o computador em si). Todo o gerenciamento de memória, dispositivos,
processos, entre outros é coordenados pelo kernel. Basicamente está dividida em duas
partes:
1. gerenciamento de dispositivos: supervisiona a transmissão de dados entre a
memória principal e os dispositivos periféricos. Desta forma, o kernel
abrange todos os drivers controladores de dispositivos que podem ser
ligados a um computador
2. gerenciamento de processos: aloca recursos, escalona processos e atende a
solicitação de serviços dos processos
Shell é o interpretador de comandos do LINUX. É ele quem fornece uma
interface para que o usuário possa dizer ao Sistema Operacional o que deve ser feito. O
shell traduz o comando digitado em chamadas de sistema que são executadas em
linguagem de máquina pelo kernel. Além disto, fornece um ambiente programável através
de scripts.
Existem inúmeros shells cada um com ligeiras diferenças entre si. Muitas
vezes é possível utilizar vários shells diferentes em um mesmo micro rodando LINUX,
isto porque ele é multitarefa e multiusuário, de modo que cada usuário poderia utilizar o
shell que lhe agradar mais. Entre os mais utilizados estão o Bourne Shell, o C shell e o
Korn Shell.

Utilitários
Existem centenas de utilitários (comandos) para a realização de tarefas
especializadas ou rotineiras, entre elas manipulação e formatação de textos, cálculos
matemáticos, gerenciamento e manutenção de arquivos e diretórios, administração de
sistemas, manutenção de segurança, controle da saída para impressora, desenvolvimento
de programas e filtragem de dados.
Cada um destes utilitários é digitado na linha de comando do LINUX que será
interpretado pelo Shell do sistema. Este por sua vez se encarregará de realizar diversas
chamadas ao Kernel para a execução do comando.
Como as interfaces gráficas são muito recentes, o LINUX teve toda a sua
potencialidade explorada em termos de ambiente de desenvolvimentos. Isto equivale a
dizer que o que se pode fazer com um software de Formatação de Textos do tipo aponte e
clique, pode ser realizada através do antigo modo de linha de comando no LINUX.
Mas isto não impede que as facilidades do ambiente de janelas seja
explorado, pelo contrário. Os mais profissionais programas aplicativos rodam sobre o
Sistema Operacional LINUX, entre eles o Gerenciador de Banco de Dados ORACLE,
INGRES e FoxBASE+, formatadores de textos Postscript, Tex e FamaMaker de
qualidade extraordinárias.

Introdução ao Linux
Introdução 18

Processos

Quando um programa ou utilitário é executado, passa a se chamar processo.


Cada processo iniciado possui um estado indicando sua condição (em execução, parado,
interrompido, etc) e a prioridade. Sendo que os processos do sistema possuem
prioridades sobre os do usuário.
Com base nas informações sobre os processos em andamento, a CPU precisa
escalonar os processos para dedicar a cada um, um determinado tempo dando a
impressão de que vários processos estão sendo executados ao mesmo tempo.

Introdução ao Linux
Iniciando 19

Capítulo 2
Iniciando
1. A Sessão LINUX
Antes de iniciar a sessão no sistema propriamente dita, temos que levar em
consideração o significado das teclas especiais que são utilizadas pelo LINUX, bem
como de alguns conceitos iniciais.
Por ser um Sistema Operacional que suporta vários usuários (multiusuário),
antes de tudo, é preciso se identificar. O LINUX então se encarregará de permitir ou não
seu acesso verificando sua senha, se estiver correta libera o diretório de entrada e
executa arquivos de inicialização locais e o interpretador apropriado. Após este
processo, você estará apto a executar os comandos do LINUX.
Quando o terminal estiver ligado, provavelmente será apresentado um sinal de
prontidão do sistema da seguinte forma:

Login:

Isto significa que o sistema stá esperando para que o usuário se identifique
com o nome de usuário que lhe foi concedido pelo Administrador de Sistema junto com
uma senha de acesso. Após digitar o nome de usuário, presione ENTER. Será apresentada
um novo sinal de prontidão:

Password:

Este sinal pede que seja digitada a sua senha. Note que a medida que forem
digitados os caracteres, eles não aparecerão no vídeo por medidas de segurança.
Se algo deu errado (foi novamente apresentado o sinal de login), tente
novamente, certificando -se de ter digitado o nome de usuário e a senha exatamente como
recebeu do Administrador pois o LINUX diferencia as letras maiúsculas das minúsculas.
Isto quer dizer que para o LINUX A (letra “a” maiúscula) é diferente de a (letra “a”

Introdução ao Linux
Iniciando 20

minúscula). Esta é uma dica que serve não apenas para iniciar a sessão, mas também para
todos os comandos LINUX.
Tendo o usuário se identificado com o nome da conta e a senha (se esta
existir, pois existem contas criadas especialmente para uso sem senha), o LINUX checa
em um arquivo de configuração pelo nome da conta e a senha corespondente
devidamente encriptada. Estando ambas registradas e corretas, o Sistema Operacional
permite o acesso ao usuário executando o shell indicado também neste arquivo.
O shell providencia uma interface de comunicação entre o kernel e o usuário.
Esta interface consiste de uma linha de comando (ou prompt) na qual deve ser digitado o
comando por extenso seguido por seus parâmetros (se tiver). Em uma linha de comando
podemos ter mais de um comando em sequência para serem executados.
Em geral esta linha de comando é formada por um símbolo que pode ser de
porcentagem (%) ou cifrão ($) para usuários comuns e grade (#) para usuários com
privilégio de raíz, dependendo do tipo de shell usado.
Os parâmetros que aparecem após o nome do comando podem ser nomes de
arquivos e/ou caminhos de diretórios. Eles devem sempre ser digitados com um espaço
entre si e depois do comando. Muitas vezes alguns símbolos que aparecem na linha de
comando não são parâmetros, mas sim comandos para o shell deteminando a sequência
em que o(s) comando(s) devem ser executados.
O LINUX aceita e executa um comando quando, ao terminarmos de
digitarmos o comando, presionarmos a tecla ENTER, RETURN ou ↵ (varia de
computador para computador).
Caso seja encontrado algum erro na digitação do comando antes que a tecla
ENTER seja pressionada, podemos corrigí-lo utilizando as teclas de direção ← e → para
posicionarmos o cursor na posição em que o erro foi cometido. Cursor é o símbolo
gráfico que aparece logo após a linha de comando e que se movimenta a medida em que
caractere são digitados e aparecem na tela.
Para apagar caracteres antes do cursor, basta pressionar a tecla de
BACKSPACE (← ) ou a combinação de teclas CTRL+H (^H). Se desejar apagar toda a
linha tente CTRL+U (^U). Pode ser que a tecla DEL também funciona para apagar
caracteres, mas de maneira diferente, ao invés de apagra caracteres antes do cursor, ele
apaga caracteres após o mesmo.
Algumas vezes podemos recuperar os comandos dados anteriormente. Certos
tipos de shell possuem um arquivo oculto no diretório de entrada do usuário que
armazena até os n últimos comandos digitados. É o arquivo de histórico dos comandos.
Para recuperá-los podemos utilizar as teclas ↓ ou ↑. Ou então utilizar os comandos do
shell : history e “!”.’

O comando history lista os n últimos comando digitados.

Introdução ao Linux
Iniciando 21

Exemplo : Utilize os comandos history e “!” para re-executar um comando

$ history
199 ls
200 pwd
201 clear
202 history
$ !200
pwd
/home/guest
$

Em alguns shells estas teclas não estão definidas, ou então outras realizam
estas mesmas funções. Procure junto ao Administrador de Sistemas quais teclas ou
conjunto de teclas usar para editar a linha de comando.
Certos comando são interativos e outros não-interativos. Comandos
interativos são aqueles que após serem executados, exigem que algumas perguntas sejam
respondidas para que possam prosseguir. Comandos não -interativos simplesmente
executam os comandos sem nada perguntar e retornam à linha de comando do LINUX.

Exemplos de comandos não-interativos:


ls - exibe lista do conteúdo do diretório corrente
date - exibe a data e hora do sistema
cal <ano> - exibe calendário do ano especificado
who - exibe lista de todos os usuários ativos no sistema
clear - limpa a tela

Exemplos de comandos interativos:


passwd - modifica a senha
ftp - permite transferência de arquivos
mail - gerencia correspondências

2. Encerrando a sessão

Introdução ao Linux
Iniciando 22

Você pode usar dois comandos para encerrar uma sessão, os comandos exit ou
logout no prompt do shell. Em alguns sistemas aparecerá na tela o prompt de logout e as
informações relativas ao tempo decorrido durante a sessão. É importante encerrar
devidamente uma sessão pelos seguintes motivos:
Segurança: Se você continuar com a sessão aberta e abandonar o terminal, o
sistema fica vulnerável ao acesso de pessoas não autorizadas, e seus arquivos poderão ser
manipulados por essas pessoas;
Cobrança: Se a sua organização usa os recursos de contabilidade do sistema
para cobrar pela sua utilização, você será cobrado pelo tempo que permanecer dentro da
sessão.

3. Ciclo de Execução do Comando


O shell analisa a linha do comando separando seus vários componentes com o
uso de es paços em branco. Este procedimento é conhecido como parsing (análise), e é
composto dos seguintes passos:
1. O shell examina se há algum caracter especial a ser interpretado na linha de
comando;
2. Supondo que os caracteres até o primeiro branco se referem a um
comando, a shell procura um arquivo executável (programa) com o mesmo
nome;
3. Se o shell localiza o programa, ele verifica se o usuário que fez o pedido
tem permissão de acesso para usar o comando;
4. O shell continua a examinar o resto da linha de comando par a ver a
formatação;
5. Finalmente, ela informa ao kernel para executar o programa, passando todas
as opções e argumentos válidos para o programa;
6. Enquanto o kernel copia o arquivo executável do disco para a memória e
executa-o, o shell permanece inativa até que o programa tenha encerrado. O
programa em execução na memória é chamado de processo;
7. Quando o processo termina de ser executado, o controle retorna à shell que
exibe novamente o prompt para avisar que está pronta para o próximo
comando;

4. Alteração da Password:

Introdução ao Linux
Iniciando 23

Os procedimentos de alteração e definição de uma senha são semelhantes,


com a exceção de que na alteração o usuário recebe antes o prompt para informar a senha
antiga. A nova senha deve ter no mínimo três caracteres diferentes da senha antiga. O
comando passwd verifica a informação sobre a idade da senha nos arquivos
/etc/default/passwd e/ou etc/shadow para determinar a validade da senha e se a senha pode
ser alterada. Os super-usuários não recebem o prompt para fornecer a senha antiga.

Exemplo : Altere a sua senha utilizando o comando passwd

$passwd
Changing password for guest
Enter old passwd :
Enter new passwd :
Re-Type new passwd :
Passwd changed
$

5. Estruturas de Arquivos e Diretórios


Existem 4 tipos básicos de arquivos em LINUX :
• Arquivo diretório;
• Arquivo convencional;
• Arquivo de dispositivo;
• Arquivo simbólico ou de ligação;

Um arquivo diretório nada mais é do que um tipo de arquivo contendo


informações sobre arquivos que conceitualmente (e não fisicamente) estão contidos
nele. Isso significa que o conteúdo de seus arquivos não está armazenados dentro do
diretório. Assim sendo, não há limite para o tamanho de um diretório.Teoricamente você
poderia colocar no seu diretório tantos arquivos quanto quisesse, até o ponto de estourar
a capacidade do seu disco.
Os dados contidos no arquivo diretório são apenas o nome de cada arquivo e
seu ponteiro para uma tabela de informações de controle de todos os arquivos do
sistema. Esta tabela contém informações administrativas do arquivo, como dados de
segurança, tipo, tamanho, datas de acesso e dados que indicam onde ele está gravado no
disco.
Quando você vai usar um arquivo, o sistema operacional consulta o diretório
para verificar se existe no disco um com o nome que você especificou. Em caso

Introdução ao Linux
Iniciando 24

afirmativo, o sistema obtém, da tabela as informações necessárias para poder manipulá-


lo. Caso contrário, o sistema envia uma mensagem informando que não foi possível
encontrar o arquivo.
Um diretório pode conter outros diretórios, aos quais chamamos sub-
diretórios. Um subdiretório pode conter outros arquivos e subdiretórios, que também
podem conter arquivos e subdiretórios e assim por diante. Este é um relacionamento
pai/filho entre um diretório e seus arquivos e diretórios subordinados. Cada diretório pai
guarda informações sobre os arquivos e diretórios que estão a um nível abaixo dele - seus
filhos.
Um arquivo convencional é um conjunto de caracteres presentes em algum
meio de armazenamento, como por exemplo um disco. Ele pode conter texto para uma
carta, código de programa ou qualquer informação armazenada para um futuro uso.
Um arquivo de dispositivo, como um diretório, não contém dados. Ele é
basicamente um ponteiro para um dispositivo periférico, como por exemplo uma unidade
de disco, um terminal ou uma impressora. Os arquivos especiais associados aos
dispositivos periféricos estão localizados no diretório /dev.
Um arquivo simbólico é um arquivo convencional que aponta para outro
arquivo em qualquer lugar do sistema de arquivos LINUX.

6. Diretórios
Todos os arquivos fazem parte de algum diretório. Assim, eles são mantidos
organizadamente. Se todos os arquivos do sistema fossem armazenados em um mesmo
lugar, o LINUX levaria muito tempo para verificar todos os arquivos até encontrar aquele
que está procurando. Os diretórios são um meio de oferecer endereços dos arquivos, de
maneira que o LINUX possa acessá-la rápida e facilmente.
Ao entrar pela primeira vez em sua conta, você já está em um subdiretório do
sistema LINUX, chamado seu diretório de entrada (home directory). A menos que você
crie alguns subdiretórios em sua conta, todos os seus arquivos serão armazenados em
seu diretório de entrada. Teoricamnte, você pode fazer isso, mas a manutenção de seus
arquivos será mais eficiente se você criar seu próprio sistema se subdiretórios. Assim
ficará mais fácil manter o controle de seus arquivos porque eles estarão agrupados em
diretórios por assunto ou por tipo. O LINUX também realiza buscas de maneirras mais
eficiente em diretórios pequenos que nos grandes. Nos capítulos seguintes, você
aprenderá os comandos necessários para criar diretórios, levar arquivos para outros
diretórios e passar de um diretório para outro.

Introdução ao Linux
Iniciando 25

7. Diretório de Entrada
Como mencionamos anteriormente neste capítulo, seu diretório de entrada é
aquele em que você é colocado quando abre uma sessão em um sistema LINUX. Esse
diretório tem o mesmo nome que seu nome de login. Você pode pensar em sua conta
como uma versão em miniatura do sistema de arquivos do LINUX. No alto de seu
sistema pessoal de arquivos, em vez do diretório -raiz, está seu diretório de entrada.
Abaixo dele estarão os subdiretórios que você criar, que podem, por sua vez, se ramificar
em subdiretórios e/ou arquivos.
Os diretórios de entrada dos usuários são iguais a qualquer outro diretório de
um diagrama de sistema de arquivos. Entretanto, sendo o diretório principal de sua conta,
seu diretório de entrada tem um status especial. Sempre que você entra no sistema, o
LINUX define uma variável chamada HOME que identifica o seu diretório de entrada. O
LINUX usa o valor da variável HOME como ponto de referência para determinar quais
arquivos e diretórios do sistema de arquivos você pode acessar e também para orientar-se
para onde levá -lo quando você deseja mudar de diretório corrente.

8. Diretórios Corrente
O diretório corrente, ou de trabalho (working directory), é o diretório em que
você está em um determinado momento. Por exemplo, quando você entra no sistema, o
diretório corrente é sempre seu diretório de entrada. Se você passar para um de seus
subdiretórios, este passará a ser o diretório corrente.
Durante toda a sessão, o LINUX mantém o controle de seu diretório corrente.
Todos os comandos são executados sobre o diretório corrente, a menos que você
especifique outro. Por exemplo, qualquer arquivo ou subdiretório que você criar será em
princípio criado no diretório corrente. Sempre que você digitar ls, verá uma lista dos
arquivos e diretórios do diretório corrente.
Exemplo : Use o comando ls para mostrar o conteúdo do diretório corrente
$ls
curso/ teste.txt
$

Todos os diretórios do LINUX contém um arquivo chamado . (ponto), que é


um arquivo especial que representa o diretório corrente (um sinônimo). Sempre que
você quiser se referir ao diretório corrente, pode fazê-lo usando um ponto (.). Outro
arquivo especial, chamado .. (dois pontos) representa o diretório pai do diretório
corrente (o diretório ao qual o diretório corrente pertence). Quando precisar se referir

Introdução ao Linux
Iniciando 26

ao diretório pai do diretório corrente, você pode usar dois pontos (..) em vez do nome do
diretório.

Exemplos :
1 - Use o comando ls para listar o conteúdo do diretório corrente :
$ls .
curso/ teste.txt
$

2 - Use o comando ls para listar o conteúdo do diretório pai do diretório


corrente :
$ls ..
linux/ alunos.txt prog.sh
$

9. Nomes e Caminhos
Quando você digita um comando que opera sobre um arquivo ou diretório,
precisa especificar o nome do arquivo ou do diretório desejado. O caminho, de um
arquivo ou diretório é a lista de todos os diretórios que formam a ligação entre ele e o
diretório -raiz.
Você só pode identificar individualmente cada arquivo e diretório por seu
nome e caminho, porque seu nome pode ser idêntico ao de outro arquivo em outro local
do sistema. Por exemplo, suponha que haja duas contas de usuário, chamadas luciene e
alfredo, cada uma contendo um subdiretório chamado vendas. O LINUX pode diferenciar
esses dois subdiretórios por seus caminhos. Um deles seria /.../luciene/vendas e o outro
seria /.../alfredo/vendas, onde as reticências representam os diretórios intermediários.
Embora você possa se referir a um arquivo ou diretório dentro de seu diretório de
entrada usando apenas seu nome, o LINUX sempre interpretará o nome do arquivo ou
diretório como seu nome e caminho inteiro, porque ele mantém o controle de seu
diretório corrente e pode preencher a parte do nome de caminho que falta.
Além do caminho absoluto, você também pode usar o caminho relativo, de um
arquivo ou diretório. O caminho relativo não começa com o diretório raiz, mas com o
diretório mais próximo do diretório cujo caminho está sendo definido. Para especificar
um caminho relativo para seu diretório de entrada, você pode começar o caminho com
$HOME ou com um ~ (til), que é um sinônimo para $HOME. Por exemplo, se seu
diretório de entrada é marco, a variável HOME terá o valor /.../marco, onde as reticências
representam os diretórios entre o diretório raiz (/) e o diretório marco. Sempre que você

Introdução ao Linux
Iniciando 27

digitar $HOME como parte de um nome de caminho, o LINUX o interpretará como o


nome de caminho completo de seu diretório de entrada. A variável HOME funciona em
todos as shells. Em C shell, você pode também usar o caractere ~ (til) no nome de
caminho para representar o diretório de entrada. C shell define o ~ exatamente como o
Bourne shell define a variável HOME.
Para especificar um caminho a partir do diretório corrente, você pode iniciar
o caminho com um . (que representa o diretório corrente), ou com o nome do primeiro
subdiretório naquele caminho. O ponto é opcional neste caso porque se o nome de
caminho não começar com uma /, o LINUX considera que você quer que ele comece
com o diretório corrente.
Se você já tiver mudado de diretório algumas vezes, talvez não esteja seguro
de qual é o diretório corrente no momento. Para descobrir, use o comando ls e poderá se
lembrar do nome do diretório pela lista dos arquivos que ele contém. Entretanto, uma
maneira mais simples de saber qual o diretório corrente é digitar pwd, que será
apresentado mais adiante. O comando pwd imprime o caminho completo do diretório
corrente.

Exemplo : Use o comando pwd para mostrar o caminho do diretório corrente

$pwd
/home/guest
$

10. Nomes de arquivos e diretórios


As convenções usadas para dar nomes a arquivos e a diretórios estão descritas
abaixo.
• É aconselhável dar nomes descritivos e sugestivos aos arquivos, e
diretórios;
• Os nomes dos arquivos devem começar com uma letra. Evite usar +,- ou .
como primeiro caracter;
• Evite usar caracteres especiais pois estes tem um significado diferente
para a shell. Os caracteres especiais da shell são os seguintes: ? @ # $ ^ &
* () ‘ [] \ | ; ‘ “ <> ;
• Não use espaços nos nomes dos arquivos. A shell interpreta os espaços
como delimitadores nas linhas de comandos. Ao invés de espaços use um
ponto (.) ou um sublinhado (_) (underscore);

Introdução ao Linux
Iniciando 28

• O LINUX faz diferença entre letras maiúsculas e minúsculas. Por


exemplo, report, Report, REPORT e rePort são todos nomes distintos de
arquivos;
• Os nomes de arquivos devem ser exclusivos dentro de cada diretório.
Entretanto, o mesmo nome de arquivo pode ser usado em diretórios
diferentes;
• Os nomes dos arquivos podem ter no máximo 14 caracteres de
comprimento (em alguns sistemas este tamanho pode chegar a 256
caracteres);
• Podem ser usadas extensões nos nomes de arquivos a fim dar um melhor
signicado aos seus nomes. A extensão descritiva (sufixo) é geralmente
precedida por um ponto. Por exemplo, a extensão .c é usada para
identificar os programas em linguagem C e .sh para se referir aos
programas em shell;

11. Caracteres Especiais do Shell


Alguns caracteres tem significado especial para o Shell. Esses caracteres são
interpretados quando o Shell encontra-os durante o processamento da linha de comando.

11.1. Substituição do Nome do Arquivo

Três caracteres especiais permitem a referência a grupos de arquivos ou


diretórios em uma linha de comando. Estes caracteres são chamados Meta caracteres ou
Coringas.

Asterisco
O * substitui qualquer conjunto de caracteres.
Ponto de interrogação
O caracter ? substitui qualquer caracter.
Colchetes
O símbolo [] contém uma lista de caracteres. Um dos caracteres dentro do
colchetes será substituido. Um hífen separando os caracteres que estão entre
colchetes indica um intervalo. Um ! dentro do colchetes indica o sentido da
procura invertido.

Introdução ao Linux
Iniciando 29

Esses caracteres especiais poupam tempo de digitação. O mais importante é que


eles podem ser usados para fazer referência a arquivos cujo nome não se conhece
exatamente.

Exemplos :
1- Liste todos os arquivos com extensão .new :
$ ls *.new
File.new
arquivo.new
$

2- Liste todos os arquivos cujo nome termine com um numero entre 1 e 5 :


$ ls *[1 -5]
file1
arquivo3
dir5
$

3- Liste todos os arquivos cujo nome tem três caracteres e começam com f :
$ ls f??
fig
fin
$

11.2. Marcação do Caracter Especial

Para usar literalmente um caracter especial sem que o Shell interprete seu significado
ele deve ser marcado. O shell trata um caracter especial marcado como um caracter
normal.

Aspas
Quando se coloca um caracter especial entre aspas “ “ , o Shell ignora todos
os caracteres especiais exceto o cifrão ($), o acento grave (‘) e a barra invertida (\);
Apóstrofe
O apóstrofe é mais restritivo. Todos os caracteres especiais entre apóstrofes
são ignorados ;
Barra invertida

Introdução ao Linux
Iniciando 30

Geralmente, a barra invertida faz o mesmo que colocar um caracter entre


apóstrofes. Quando uma barra invertida é usada, ela deve preceder cada caracter a ser
marcado;

Introdução ao Linux
Arquivos e Diretórios 31

Capítulo 3
Arquivos e Diretórios

1. Manipulando Arquivos e Diretórios


A função essencial de um computador é armazenar informações (arquivos) e
catalogá-los de forma adequada em diretórios, fornecendo, se possível, algum esquema
de segurança de modo que pessoas não autorizadas não tenham acesso a arquivos
importantes.
Neste capítulo você aprenderá como manipular arquivos e diretórios no
LINUX. Saber copiar, mover, exibir o conteúdo de um arquivo, e localizar um arquivo
são algumas das atividades que veremos neste capítulo.
Os comandos aqui apresentados não são a totalidade dos comandos
disponíveis, mas certamente são suficientes para que você consiga executar funções
típicas e usuais de um programador ou de um usuário de aplicativos em ambiente LINUX.

1.1. Identificando o Diretório Corrente


pwd

O comando pwd (print working directory) não possui nenhuma opção ou


argumento. Este comando mostra o nome do diretório corrente ou de diretório de
trabalho (working directory). Você pode utilizá-lo para se situar no sistema de arquivos.
Por exemplo, é sempre útil verificar o diretório corrente antes de criar ou remover
arquivos e diretórios. Do mesmo modo, o pwd é útil para confirmar o diretório corrente
após várias trocas de diretórios.

Introdução ao Linux
Arquivos e Diretórios 32

Exemplo : Descubra qual o diretório corrente


$pwd
/home/guest
$

1.2. Criando diretórios


mkdir

Nos diretórios podemos agrupar informações afins, isto é, arquivos que


possuem alguma interrelação. O nome do diretório deve ser significativo e permitir um
acesso e uma localização rápida dos arquivos armazenados no seu sistema de arquivos.
O comando mkdir (make directory) é utilizado para criar diretórios. Os
nomes dos diretórios a serem criados são passados como argumentos para o comando.
Estes nomes podem ter até 255 caracteres em algumas versões do Sistema Operacional
UNIX, e devem ser únicos, isto é, não pode haver dois diretórios com mesmo nome
dentro de um mesmo subdiretório, nem mesmo um arquivo e um diretório iguais em um
mesmo subdiretório.
Os novos diretórios normalmente são criados com modo de permissão 777
(permissão para leitura, escrita e execução).
Opções:
-mmodo Especifica o modo de permissão de acesso para o diretório que está
sendo criado;
-p Cria os diretórios pai citados no nome do diretório que está sendo
criado;

Exemplos :

1 - Crie um diretório chamado teste com o seguinte modo de permissão : 711


$mkdir -m 711 teste
$ls -l
total 1
drwx--x--x 2 guest users 1024 May 15 21:27 teste/

Introdução ao Linux
Arquivos e Diretórios 33

2 - Crie um diretório chamado curso com um diretório filho chamado aula1


$mkdir -p curso/aula1
$ls -l
total 2
drwx--x--x 2 guest users 1024 May 15 21:27 teste/
drwxr-xr-x 3 guest users 1024 May 15 21:33 curso/
$ls -l curso
total 1
drwxr-xr-x 2 guest users 1024 May 15 21:33 aula1/
$

Notas:
• As opções -p e -m não estão disponíveis em todos os sistemas;
• Veja comando umask para alterar permissões padrão na criação de
diretórios;

1.3. Listando diretórios


ls [AaCFpdlmRrstucx][nomes]

Normalmente o conteúdo de um diretório é listado em ordem alfabética, um


item por linha. As diversas opções do comando ls permitem adaptar o formato da
listagem.
Se nada for especificado em nomes todos os itens do diretório corrente são
listados. Entretanto em nomes é possível determinar máscaras (filtros) para selecionar
padrões de nomes de itens a serem listados.

Opções:
-A Lista todos os itens do diretório, inclusive os que começam com
ponto, exceto os itens . e .. não são listados;
-a Lista todos os itens, inclusive os que começam com pontos;
-C Listagem em várias colunas, em ordem alfabética;
-F Coloca uma / após itens que são diretórios e um * após itens que
são arquivos executáveis;
-p Coloca uma / após itens que são diretórios;
-d Lista apenas o nome de itens que são diretórios, não lista seus
conteúdos;

Introdução ao Linux
Arquivos e Diretórios 34

-l Lista o conteúdo de um item que é diretório;


-m Formata a saída como texto corrido, os itens são separados por
vírgula;
-R Lista todos os diretórios encontrados e seus subdiretórios;
-r Lista em ordem alfabética reversa, ou em ordem de hora/data
reversa;
-s Mostra o tamanho em blocos de cada item;
-t Ordena os itens por hora/data de modificação;
-u Usada em conjunto com -t para ordenar pela hora/data do último
acesso, ao invés de pela última modificação;
-c Usada em conjunto com -t para ordenar pela hora/data da última
modificação do item na tabela de arquivos do Sistema de Arquivos;
-x Lista em várias colunas, ordenando os itens em linhas ao invés de
em colunas;

Exemplos :

1 - Liste todos os itens do diretório corrente inclusive os que começam com


ponto :
$ls -a
./ ../ .less .kermrc curso/ teste/
$

2 - Liste o conteúdo do diretório mostrando o tamanho em blocos de cada


item :
$ls -s
total 2
1 curso/ 1 teste/
$

3 - Liste o conteúdo do diretório corrente e seus subdiretórios :


$ls -R
curso/ teste/
curso :
aula1/
curso/aula1 :
teste :
$

Introdução ao Linux
Arquivos e Diretórios 35

1.4. Mudando de diretório


cd <nome-diretório>

O comando cd (change directory) é utilizado para mudar o diretório de


trabalho corrente. Não há opções para este comando. O nome do novo diretório de
trabalho é indicado em nome-do-diretório. Se você não especificar um diretório, cd fará
com que o seu diretório de entrada (home directory) se torne o seu diretório corrente.
Se nome-do-diretório for um subdiretório do seu diretório corrente, basta informar o
nome dele. Caso contrário você pode informar o nome relativo ou absoluto do diretório
para o qual você quer mudar.

Exemplo :

1- Troque o diretório corrente para curso, verifique,volte ao seu diretório


base :
$cd curso
/curso$ pwd
/home/guest/curso
/curso$ cd
$

2 - Vá para o diretório aula1, verifique :


$cd curso/aula1
/curso/aula1$ pwd
/home/guest/aula1

Notas:
• O programa cd foi incorporada do Bourne Shell, C Shell e Korn Shell, não
sendo um utilitário UNIX;

1.5. Removendo diretórios


rmdir [ps] <lista-de-diretórios>

Introdução ao Linux
Arquivos e Diretórios 36

O comando rmdir (remove a directory) é utilizado para remover um ou mais


diretórios vazios. O diretório que será removido deve estar vazio e não pode ser o
diretó rio corrente. Apenas o usuário que criou o diretório ou um super-usuário pode
remover um diretório, a não ser que o diretório tenha acesso de gravação para outros
usuários.
Os nomes dos diretórios podem ser especificados como absolutos ou
relativos

Opções:
-p Remove diretórios citados e respectivos diretórios pai que ficarem
vazios com a remoção;
Exemplo : Remova o diretório aula1, se o diretório pai ficar vazio remova-o :
$rmdir -p curso/aula1
$ls
teste/
$

Notas:
• Para remover diretórios que não estejam vazios, utilize rm -r;
Exemplo : Remova o diretório teste
$rmdir teste
rmdir : teste: Directory not empty
$rm -r teste
$

1.6. Tipo de um arquivo


file [m] <arquivos>

Você já deve ter percebido em alguma oportunidade que alguns arquivos não
podem ser listados na tela do micro/terminal, pois possuem códigos executáveis ou
outros dados não adequados para serem mostrados na tela do terminal ou micro, o
micro/terminal pode até mesmo ficar "preso" como resultado da tentativa de exibir um
arquivo desses. O comando file pode ser utilizado para verificar o tipo de um arquivo,
sem que seja preciso listá-lo para saber seu conteúdo.

Introdução ao Linux
Arquivos e Diretórios 37

O comando file toma como argumentos uma lista de nomes de arquivos ou


diretórios (ou caminhos relativos/absolutos) especificados na linha de comando, e
examina-os, relatando que tipo de arquivo são: arquivo de texto, de programa em C,
diretório, etc.

Opções:
-m Atualiza a hora/data de acesso dos arquivos para a hora/data
atual;
-f arq Usa como argumentos para file a lista de nomes de arquivos contida
em arquivo.Assim você não precisa passar todos os arquivos que
você deseja investigar na linha de comando;

Exemplos :
1- Descubra o tipo do arquivo curso
$ file curso
curso : Directory
$

2- Descubra o tipo de cada arquivo contido no arquivo teste.file :


$ file -f teste.file
curso : Directory
teste : Directory
texto : ascii text
$

Notas:
• O comando file pode confundir os scripts shell com programas em C,
devido à semelhança em suas estruturas;

1.7. Conteúdo de um arquivo:


cat [svte] <arquivos>

O comando cat mostra o conteúdo de arquivos (ou da entrada padrão),


apresentado-o na tela (de fato, na saída padrão). É possível utilizar o cat para criar, exibir
e juntar arquivos. Quando utiliza-se o cat para concatenar arquivos, os arquivos da origem
permanecem intactos.

Introdução ao Linux
Arquivos e Diretórios 38

Opções:
-s Suprime mensagens de erro que normalmente aparecem quando
tenta-se utilizar o cat em um arquivo inexistente;
-v Mostra os caracteres de controle, utilizando o formato ^X, onde X
é uma letra;
-t Mostra as tabulações em um arquivo como ^I. Deve ser usada em
conjunto com a opção -v;
-e Mostra $ ao final de cada linha. Deve ser usada em conjunto com a
opção -v;

Exemplos :
1- Mostre o conteúdo do arquivo teste.file :
$cat teste.file
curso
teste
texto
$

2 - Mostre o conteúdo do arquivo teste.file marcando o final de cada linha :


$cat -e teste.file
curso$
teste$
texto$
$

Notas:
• Veja no capítulo de Redirecionamento de E/S outras aplicações do
comando cat ;

pg [número][pstring][cefn][+linha][+/padrão] <arquivos>

O comando pg exibe arquivos em telas (uma por vez) Após preencher cada
tela é mostrado um prompt onde você pode teclar ENTER ou utilizar alguns comandos
internos do pg. Ele permite procura de padrões para frente e para trás, posicionamento
em linhas do arquivo, e outros.
Se não for especificado nenhum arquivo, será utilizada a entrada padrão. Se
forem especificados mais de um, eles serão mostrados na ordem em que foram
especificados.

Introdução ao Linux
Arquivos e Diretórios 39

Opções:
-número Especifica quantas linhas devem compor uma tela, antes de ser
mostrado o prompt. Normalmente uma tela de exibição é composta
por uma linha a menos que o tamanho da tela do terminal/micro;
-pstring Especifica a string que deverá ser utilizada no prompt.
Normalmente aparece : (dois-pontos);
-c Limpa a tela antes de exibir a próxima tela;
-e Elimina a pausa que normalmente ocorre entre exibição de dois
arquivos;
-f Impede divisão de linhas (quebra de linhas) longas na tela;
-n Elimina a necessidade de digitar ENTER após cada comando interno
dado ao pg;
+linha Exibe o arquivo a partir da linha número linha;
+/padrão Exbie o arquivo a partir da primeira ocorrência de padrão;

Comandos internos de pg:


Você pode utilizar alguns comandos internos de pg para manipular a exibição
do arquivo. Para ver uma lista dos comandos internos possíveis digite h (help) no prompt
do pg e tecle ENTER;

Notas:
• Veja também o comando more;

1.8. Copiando arquivos


cp <arquivo-origem> <arquivo-destino>

O comando cp (copy) copia, isto é, cria uma cópia de um arquivo com outro
nome ou em outro diretório sem afetar o arquivo original. Você pode usar esse comando
para criar cópias de segurança de arquivos importantes ou para copiar arquivos que queira
modificar. Se há algum arquivo que você quer ter em mais de um diretório, pode usar o
comando cp para copiá-lo para outros diretórios.
Na linha de comando, arquivo -origem é o nome do arquivo que você quer
copiar e arquivo-destino é o nome que você quer dar à cópia. Lembre-se: se você fizer
uma cópia de um arquivo no mesmo diretório, ela não poderá ter o mesmo nome de
arquivo -origem. Com este comando você pode acidentalmente perder arquivos se já
existir um arquivo com o nome arquivo -destino, neste caso o comando cp escreve o novo
arquivo por cima do antigo.

Introdução ao Linux
Arquivos e Diretórios 40

Exemplos :
1 - Copie o conteúdo do arquivo teste.file para um novo arquivo chamado
novo :
$ cp teste.file novo
$ls
curso/ novo teste.file teste/
$
2 - Copie o arquivo teste.file para o diretório teste :
$ cp teste.file teste
$ls teste
nota1/ teste.file

1.9 Movendo/Renomeando arquivos


mv <arquivo-origem> <arquivo-destino>

O comando mv funciona com arquivos da mesma maneira como funciona com


diretórios. Pode -se usar mv para renomear um arquivo ou para movê-lo para outro
diretório, dependendo dos argumentos que você utilizar.
Na linha de comando, arquivo-origem é o nome do arquivo cujo nome você
deseja mudar, e arquivo -destino o novo nome para este arquivo. Se arquivo -destino já
existir, mv primeiro remove o arquivo já existente e depois renomeia arquivo-origem
com o novo nome. Para evitar este problema, você tem duas opções:
1. Examinar o conteúdo do diretório antes de renomear um arquivo, para
verificar se o novo nome que você deseja atribuir já existe;
2. Usar a opção -i (interactive) (presente em alguns sistemas) que permite
uma confirmação da remoção de um arquivo entes de o comando mv removê-lo.
Se arquivo-destino for o nome de um diretório presente no diretório
corrente, então o comando mv entende que arquivo -origem deve ser movido para o
diretório arquivo -destino, e não que este deve ser eliminado e substituído por arquivo -
origem.
Se você mover um arquivo para um novo diretório, o arquivo terá o mesmo
nome de arquivo -origem, a menos que você especifique o novo nome também, dando o
nome do caminho (relativo ou absoluto) antes do nome do arquivo.

Exemplos :

1- Mova o arquivo file.teste para o diretório teste interativamente :


$ mv -i file.teste teste

Introdução ao Linux
Arquivos e Diretórios 41

mv : replace ‘teste/file.teste ‘ ? y
$ ls teste
file.teste nota1/
$
2- Troque o nome do arquivo teste.file par a copia :
$ mv teste.arquivo copia
$ls
curso/ novo copia teste/
$

1.10. Como ligar arquivos


ln [-opções] fonte destino

Uma ligação é uma entrada em um diretório que aponta para um arquivo. O


Sistema operacional cria a primeira ligação a um arquivo quando este é criado. O
comando ln é geralmente usado para criar múltiplas referências ao arquivo em outros
diretórios. Uma ligação não cria outra cópia de um arquivo, ela é simplesmente outra
indicação para os mesmos dados. Quaisquer alteraçõ es em um arquivo são independentes
do nome usado para se referir ao arquivo.
As ligações não podem ser feitas entre sistemas de arquivos, a menos que a
opção -s seja usada. Esta opção cria uma ligação simbólica que é um arquivo que contém
o nome do caminho do arquivo ao qual ele está ligado.

Opções:
-f Normalmente não se podem fazer ligações em um diretório para o
qual não se tenha permissão de acesso. A opção -f força uma ligação
mesmo se você não tiver permissão de acesso;
-s Permite a construção de um arquivo de ligação simbólica para ligar
um arquivo em um outro sistema de arquivos. Um arquivo de ligação
simbólica contém o nome absoluto do arquivo no outro sistema de
arquivos;

Exemplos :
1- Crie uma ligação para o arquivo texto chamada link :
$ ln texto link

Introdução ao Linux
Arquivos e Diretórios 42

$ cat link
Universidade Federal de Mato Grosso do Sul
$ cat texto
Universidade Federal de Mato Grosso do Sul
$
2- Crie uma ligação para o diretório aula1 chamado slink :
$ ln -s curso/aula1 slink
$ ls -l
...
lrwxrwxrwx 1 guest users 11 May 15 22:27 slink → curso/aula1
$

Notas:
• Quando você liga um arquivo a outro com o mesmo nome, não está criando
outro arquivo, mas simplesmente dando ao arquivo antigo outro endereço. As mudanças
feitas no arquivo ou em uma de suas ligações afetam tanto o arquivo como todas as suas
ligações.
• As permissões são as mesmas para todas as ligações de um arquivo. Alterar
as permissões de uma das ligações implica em alterar as permissões de todas as ligações
automaticamente.
• As ligações criadas com ln podem ser removidas com rm. Isto não significa
que o arquivo original será removido.

1.11. Como remover arquivos

rm [ -opções ] arquivo(s)

O comando rm remove as ligações a um arquivo. Quando a última ligação é


removida, o arquivo não pode mais ser acessado e o sistema libera o espaço ocupado
pelo arquivo para outro uso. Se o arquivo for de ligação simbólica, a ligação do arquivo é
removida.
Para remover um arquivo é exigida a permissão de gravação do diretório pai do
arquivo. Entretanto não é exigido o acesso de leitura ou gravação ao arquivo. Os
caracteres especiais podem ser usados para se referir a vários arquivos sem indicarcada
nome separadamente.
Opções :
-f Força a remoção de arquivos com proteção de gravação.

Introdução ao Linux
Arquivos e Diretórios 43

-i Remove arquivos interativamente; mostra cada nome de arquivo e dá um


prompt para que se confirme a remoção.
-r Remove recursivamente o diretório citado e seus subdiretórios.

Exemplos :
1- Remova o diretório curso e todos os seus subdiretórios e arquivos
interativamente
$ rm -ir curso
$
2- Remova todos os arquivos que começam com file e o arquivo aula
$ rm file* aula
$

1.12. Formatação da Impressão


pr [opções] <arquivo>

O comando pr prepara um arquivo para impressão, definindo as páginas.


Normalmente um arquivo é dividido em páginas com um cabeçalho que contém um
número de página, a data, a hora e o nome do arquivo. As linhas não são preenchidas
automaticamente, de modo que pr não pode ser usado como um formatador de textos.

Opções:
+n Começa a impressão na página n ao invés de na página 1;
-n Produz a saída com n colunas. Como com outras opções que
produzem saídas em colunas, as linhas longas demais serão
truncadas para caber nas colunas. Assim, essas opções não são boas
para arquivos de texto a menos que as linhas do texto sejam bastante
curtas. Se usar esta opção, as opções -e e -i também serão utilizadas
automaticamente;
-a Exibe saídas em várias colunas com as linhas organizadas na
horizontal em vez de na vertical. Isto é, as linhas da entrada são
colocadas em colunas através da página até a coluna n e a segunda
linha da entrada é colocada na primeira coluna da linha seguinte;
-m Mescla e exibe todos os arquivos de entrada lado a lado, um arquivo
por coluna. O número de colunas é determinado pelo número de
arquivos dados como argumentos;
-d Usa espaço duplo na exibição;

Introdução ao Linux
Arquivos e Diretórios 44

-ecn Substitui as tabulações no arquivo de entrada pelos caracteres


especificados. O caractere indicado pode ser o número n, neste
caso as tabulações serão expandidas para n+1, 2n+1, 3n+1, ... e
assim por diante. Se n for omitido ou for 0, as tabulações serão
ajustadas para oito espaços. O caractere que substituirá as
tabulações pode também ser o caractere não numérico c; Se c for
omitido a tabulação não será utilizada. Se forem especificados os
dois argumentos n e c, o caractere c substitui as tabulações que
tenham n caracteres de comprimento. Note que o caractere não
numérico c deve preceder o caracter numérico n;
-ncn Numera as linhas na saída, permitindo n dígitos na numeração se n
não for especificado, são usados 5 dígitos. O número da linha é
separado do texto por um caractere c; Se c não for especificado o
separador será uma tabulação;
-wn Ajusta o tamanho das linhas para n caracteres. Útil quando se
imprime em várias colunas;
-on Desloca (identando) as linhas com n caracteres;
-ln Ajusta o tamanho da página para n linhas. Normalmente as páginas
tem 66 linhas;
-h nome Usa nome para cabeçalho da impressão, ao invés de usar o nome do
arquivo. Se nome contiver espaços em branco, deverá ser
especificado entre aspas;
-p Faz uma pausa após cada página se a saída for direcionada para a tela
de um terminal;

Exemplos :
1 - Coloque espacejamento duplo e elimine a exibição de cabeçalho e rodapé
do arquivo texto1.txt :
$ pr -dt texto1.txt

2 - Troque o nome do cabeçalho do arquivo texto2.txt e dê uma pausa no


display entre cada página :
$ pr -ph “Testando o comando pr” texto2.txt

1.13. Impressão de arquivos


lp [opções] <arquivos>

Introdução ao Linux
Arquivos e Diretórios 45

O comando lp solicita e cancela serviços de impressão em impressoras.


A primeira forma de lp envia uma solicitação de impressão a uma impressora.
Se não for especificado um nome de arquivo na linha de comando, poderá ser
especificado pela entrada padrão. O comando lp determina um id-solicitação para cada
solicitação de impressão e informa este na saída padrão. Este número deve ser utilizado
para alterar opções de impressão ou cancelar o serviço de impressão após ter sido
solicitado.
A segunda forma de lp, com a opção -i, serve para alterar opções de impressão
em um serviço previamente solicitado. As opções que podem ser alteradas são todas as
que poderiam ter sido utilizadas na solicitação do serviço de impressão.
O comando cancel pode ser usado para cancelar uma solicitação feita
anteriormente. Use id-solicitação para cancelar serviços ainda não começados e
impressora para cancelar um serviço em andamento.

Opções:
-c Cria uma cópia do arquivo a ser impresso. A impressão é feita a partir
da cópia;
-ddest Imprime na impressora especificada por destino. (use o comando
lpstat para verificar a impressora padrão e seu estado);
-H Para utilizar comandos especiais de manipulação;
-m Para enviar um mail após o término da impressão;
-nnum Imprime número de cópias do arquivo;
-oopc Para incluir opções que dependem da impressora, como por exemplo:
nobanner, nofilebreak, etc;
length=número(unidade)
Imprime a saída com número linhas por página, ou com número
centímetros (ou polegadas) de comprimento quando for
especificado c (ou i) em unidade;
width=número(unidade)
Especifica a largura das páginas em colunas, centímetros ou
polegadas, como em length;
lpi=número
Define a altura das linhas em número linhas por polegada;
cpi=número
Define a altura dos caracteres em número caracteres por polegada.
Pode-se usar paica, elite, compressed, ao invés de número;
stty=opções
Ajusta opções do comando stty a serem usada pela impressora;

Introdução ao Linux
Arquivos e Diretórios 46

-P Imprime somente as páginas especificadas, por uma sequência de


números de páginas ou por um intervalo, ou ambas as
especificações;
-s Suprime mensagens resultantes do comando lp;
-ttítulo Imprime título na página de capa;
-w Escreve uma mensagem após o encerramento da impressão. Se você
tiver encerrado a sessão quando isto acontecer, o comando lp lhe
enviará um mail;

Exemplos :
1 - Peça para que cinco cópias do arquivo report.txt sejam impressos na
impressora default do sistema :
$ lp -wn5 report.txt
request id is lp00 ( 1 file )

2 - Peça para que os arquivos report.txt e texto1.txt sejam impressos na


impressora laser. Uma mensagem deve ser enviada através do correio avisando que a
impressão terminou :
$ lp -md laser texto1.txt report.txt
request id is laser ( 2 files )

Notas:
• A opção -i não está disponível em todos os sistemas;
• O comando lpr (do UNIX BSD) serve para o mesmo propósito que o
comando lp, embora as opções sejam diferentes;

1.14. Serviços de impressão


lpstat [opções][id-solicitações]

O comando lpstat relata o estado do serviço de impressão lp. Pode-se utilizar


este comando para saber a identificação de uma solicitação de serviço de impressão que
se deseja cancelar ou que se deseja alterar alguma opção de impressão.
O comando lpstat possui um grande número de opções, que não vamos
abordar neste curso. Vamos apenas apresentar opções suficientes para auxiliar o uso do
comando lp.

Introdução ao Linux
Arquivos e Diretórios 47

Quando utilizado sem opções e sem argumentos, o comando exibe o estado


de todas as solicitações feitas com lp por todos os usuários. Qualquer argumento (que
não seja uma opção) é interpretado como sendo um id-solicitação, nome ou classe de
impressora.

Opções:
-d Exibe o destino (impressora) padrão do sistema;
-r Exibe o estado do gerenciador de solicitações de lp;
-t Exibe todas as informações sobre o estado do serviço de impressão;

Exemplos :
1 - Liste o status dos pedidos de impressão :
$ lpstat
lp00 guest 1181 May 22 11 : 43

2 - Obtenha as informações de status sobre os pedidos de impressão do


usuário guest2 :
$ lpstat -u guest2
lp00 guest2 144 May 22 10 : 06

Notas:
• Outras opções permitem que seja informada uma lista de itens sobre os
quais deseja-se obter informações. Os itens podem ser classes de impressoras,
identificações de impressoras, de usuários, etc. Estas opções tem o formato xlista, onde
x pode ser algumas das letras [acopuv], e lista é uma sequência de itens, separados por
vírgula;

1.15. Localizando arquivos


find diretórios [expressão]

O comando find procura recursivamente por arquivos em diretórios do


sistema de arquivos.
O argumento diretórios especifica em quais diretórios a busca deve ocorrer.
A busca recursiva faz com que a busca ocorra não apenas nos diretórios especificados,
mas em todos os subdiretórios dos diretórios especificados, nos subdiretórios dos

Introdução ao Linux
Arquivos e Diretórios 48

subdiretórios deles, etc. O argumento expressão consiste em um ou mais argumentos,


que podem ser um critério de busca ou uma ação que o find deve tomar, ou ainda ambos
os casos. Se vários argumentos forem especificados, eles devem ser separados por
espaço em branco.
O comando find também possui um grande número de opções que podem ser
utilizados na busca por arquivos em um sistema de arquivos. Neste curso vamos abordar
apenas os mais usuais, suficientes para compreender o funcionamento do comando.

Expressão:
-name arq Seleciona os arquivos com nomes que correspondam a arquivo,
sendo que arquivo pode ser um nome de arquivo, ou um padrão de
nomes de arquivos (especificado com o uso de *), mas deve ser
precedido de uma barra invertida;
-user nome Seleciona arquivos que pertencem ao usuário nome;
-print Imprime o caminho de qualquer arquivo encontrado, isto é, que
satisfez os critérios da busca, determinados pelos argumentos
antecedentes ao -print;
-exec cmd ‘{}’ \; Executa o comando cmd nos arquivos selecionados pelo
comando find ; Um par de chaves representa cada nome de arquivo
que está sendo avaliado; Um ponto e virgula marcado encerra a ação;
(exp) Os parênteses podem ser usados para agrupar argumentos de uma
busca, geralmente com o propósito de permitir uma valiação
utilizando o argumento operador -o;
! Inverte o sentido do argumento que o sucede. Por exemplo, "!-name
arquivo" seleciona um arquivo cujo nome não corresponde a
arquivo;
-o Permite uma seleção disjuntiva de arquivos, especificada por dois
argumentos distintos. Isto é, quando usamos dois argumentos para
especificar a busca, o arquivo é selecionado se satisfizer ambos os
critérios de busca. Com -o podemos selecionar arquivos que
satisfazem um ou outro dos argumentos especificado para a busca.
Por exemplo, "-name arquivo -o -user nome" selecionará arquivos
que possuem nomes correspondentes a arquivo ou cujo usuário seja
correspondente a nome;

Exemplos :

1 - Encontre o arquivo teste.file a partir do seu diretório base, imprima os


caminhos

Introdução ao Linux
Arquivos e Diretórios 49

$ find /home/guest -name teste.file -print


./curso/aula1/teste.file
./teste.file
$
2 - Encontre todos os seus arquivos a partir do diretório curso :
$ find /home/guest/curso -user guest -print
/home/guest/curso/aula1
...
3 - Encontre e apague todos os seus arquivos teste.file :
$ find /home/guest -name teste.file -exec rm {} \;
$

Notas:
• Como o comando find verifica todos os arquivos em um diretório
especificado em todos os subdiretórios contidos nele, o comando pode tornar -se
demorado. Veja mais adiante como executá-lo em background.

1.16. Procurando nos arquivos

grep [-opções] ‘sequência de caracteres’ arquivo(s)

O comando grep procura uma sequência de caracteres em um ou mais


arquivos, linha por linha. A ação especificada pelas opções é executada em cada linha que
contém a sequência de caracteres procurada.
Se mais de um arquivo for indicado como argumento do comando, o grep
antecede cada linha de output que contém a sequência de caracteres com o nome do
arquivo e dois pontos. O nome do arquivo é mostrado para cada ocorrência da sequência
de caracteres em um determinado arquivo. A opção -l é usada para mostrar apenas uma
vez o nome do arquivo que contém várias ocorrências da sequência de caracteres.

Opções :
-i Ignora maiúsculas ou minúsculas;
-n Mostra o número de linhas com o output das linhas que contêm a
sequência de caracteres;

Introdução ao Linux
Arquivos e Diretórios 50

-l Mostra apenas uma vez o nome do arquivo (para arquivos que contêm
várias ocorrências da sequência de caracteres) ;
-v Mostra todas as linhas que não contém a sequência de caracteres;

Exemplo :
1- Procure a sequência ‘pattern’ no arquivo fileA :
$ grep pattern fileA
aaapatternaaa
patterncccccc
$

2 - Procure a sequência em todos os arquivos do diretório, independente de


maiúsculas ou minúsculas :
$ grep -i pattern *
fileA : aaapatternaaa
fileA : bbbPatternbb
fileA : patterncccccc
fileB : pattern
$

1.17. Ordenando dados nos arquivos


sort [ -opções ] [ campos ] [ arquivo(s) ]

O comando sort ordena as linhas dos arquivos texto citados. Se não for
indicado o nome do arquivo, o sort recebe a entrada do terminal. O resultado é enviado
novamente para o terminal, a menos que a opção -o indique um arquivo de output. Para
vários arquivos, o sort junta os arquivos antes de ordená-los. O arquivo original não é
alterado.
O sort ordena o conteúdo do arquivo com seus valores associados do ASCII.
Por default o sort ordena as linhas do primeiro campo. Um campo é uma série de
caracteres separados por um espaço em branco ou um tab. O sort também permite a
indicação de outros campos por onde se deve ordenar.

Opções :
-f Não diferencia maiúsculas de minúsculas
-n Ordem numérica
- o file Salva o outpute no arquivo citado

Introdução ao Linux
Arquivos e Diretórios 51

-r Inverte a ordem da ordenação


-tchar O novo separador do campo indicado por char
-m Intercala (merge) arquivos, eles terão que estar classificados
+n Pule n campos (a partir do primeiro) para começar a ordenação

Exemplos :
1- Ordene o arquivo teste, não diferencie maiúsculas de minúsculas e guarde o
output em teste.sort :
$ sort -f -o teste.sort teste
$ cat teste.sort
.profile
234
56
Banana
box
$

2- Ordene o arquivo teste, respeitando a orden numérica :


$ sort -n teste
.profile
Banana
Pear
box
56
234
$

Exercícios

1- Descubra quais os usuários que estão atualmente no sistema. Descubra quem é você
no sistema.
2- Mostre a data e hora atuais do sistema.
3- Crie, a partir do seu diretório base, a seguinte hierarquia de arquivos :
- Dir1 com os subdiretórios : subdir1 e subdir2

Introdução ao Linux
Arquivos e Diretórios 52

- Dir2 com o subdiretório : subdir3


- Dir3 com os subdiretórios : subdir4 e subdir5
4- Copie o arquivo minha.musica para o subdiretório subdir1.
5- Apague o arquivo minha.musica de seu de seu diretório base.
6- C r i e no subdir3 uma ligação para o arquivo minha.musica, que está no subdir1,
chamado musica.
7- A partir do subdir5 crie uma ligação simbólica para o subdir12 chamado slink.
8- Usando a ligação criada, liste os arquivos do diretório subdir1.
9- Pesquise através de seu diretório base, todos os diretórios cujo o último caracter do
seu nome seja um número menor ou igual a 2. Dica : use os metacaracteres.
10- Copie o arquivo minha.musica para o diretório base. Mude o seu nome para
nova.musica e conte o número de palavras contidas nesse arquivo.
11- Pesquise , pelo seu diretório base, os arquivos ou diretórios que começam com a
letra d.
12- Use o comando date para exibir a data e hora atual do sistema nos seguintes
formatos:
a - data em mm/dd/aa b - hora em hh:mm:ss c - dia do mês
13- Procure a cadeia “estudante” no arquivo nova.musica.
14- Procure as ocorrências da mesma cadeia independente de maiúsculas ou minúsculas.
15- Pesquise e mostre todos os caminhos dos arquivos cujo nome começa com a letra n.
16- Faça uma cópia do arquivo nova.musica chamado lixo, crie dois diretórios chamados
aula1 e aula2 e copie para eles o arquivo lixo. Execute um comando que procure estes
arquivos no disco inteiro e os apague.
17- Descubra o tipo de arquivo de : nova.musica , Dir3 e slink .

Introdução ao Linux
O Editor vi 53

Capítulo 4
O Editor vi

1. Editor do UNIX
O editor de textos que era originalmente fornecido com o UNIX chamava-se
ed, e era orientado por linha, isto é, editava somente uma linha por vez. Como o ed era
pouco amigável, foi desenvolvido um novo editor de linha, chamado ex. O editor ex
continha os comandos do ed e mais alguns comandos novos. Um destes comandos era o
vi, que permitia ao usuário exibir o arquivo que estava sendo editado em uma janela do
tamanho da tela do terminal. Portanto o editor vi nada mais é que um ex que exibe textos
em telas inteiras em vez de apenas uma linha por vez.
O editor vi não objetiva formatar textos: negritos, identações, justificação,
etc. O editor vi foi projetado para trabalhar em conjunto com formatadores de texto. Na
prática o vi é muito usado para editar textos que não necessitam de formatação em
nenhum momento, como por exemplo códigos fonte de programas em alguma linguagem
de programação.
Neste capítulo vamos aprender alguns comandos do vi, suficientes para que
você entenda o funcionamento do editor e consiga editar arquivos simples.

2. Os três modos de operação do VI


O editor vi tem três modos de operação distintos, que são:
modo insert ,
modo escape (também chamado de modo comando),
modo last line ;
O modo insert é usado para a digitação do texto. Neste modo o vi funciona
como uma máquina de escrever, com a diferença de que você pode retroceder sobre o

Introdução ao Linux
O Editor vi 54

texto já digitado para corrigir eventuais erros. Cada caracter que for digitado aparecerá
na tela exatamente como foi digitado. Neste modo não é possível mover-se dentro de
uma linha, ou entre as linhas do texto.
No modo escape os caracteres comuns (letras, números e sinais de
pontuação) têm um significado especial e quase todos os caracteres funcionam como
comandos; portanto, existem muitos comandos. A maioria deles é fácil de memorizar: a,
A, i, I, o, O. Alguns comandos serverm para passar para o modo insert, outros para
movimentar o cursor sobre as linhas do texto, alterar trechos do texto, buscar palavras,
etc.
No modo last line você digita os comandos em uma linha especial que
aparece no final da tela quando se digita : (dois pontos) no modo escape. Parte dos
comandos do modo escape possuem similares no modo last line, como por exemplo os
comandos de edição, que veremos mais adiante. Os comandos no modo last line devem
ser seguidos por ENTER, contrariamente ao que acontece no modo escape.

3. O Buffer de edição
Quando você edita um arquivo com o vi, na verdade você não está alterando o
arquivo em si. As alterações feitas são aplicadas em um buffer (uma área na memória,
que passa a conter o arquivo sendo editado). Quando você quiser que as alterações
fiquem permanentemente aplicadas ao arquivo, é necessário copiar o conteúdo do buffer
para o disco, usando o comando write (w) no modo last line. Portanto, se o comando
write não for executado antes de deixar o vi, as alterações contidas no buffer não serão
aplicadas ao arquivo que está no disco.

4. Comandos básicos do VI
O editor vi contém um grande número de comandos para realizar uma grande
variedade de tarefas especiais de edição, movimentação do cursor e outras. Na verdade
seria impossível tentar aprender todos os comandos de uma vez. Vamos portanto
aprender inicialmente como criar um arquivo, inserir e editar o texto, e gravar o arquivo
em disco. Os comandos mais elaborados não serão abordados neste curso.

5. Criação e edição de arquivo


Basta executar o comando vi, passando como argumento o nome do arquivo
que se deseja criar:

Introdução ao Linux
O Editor vi 55

vi <nome -arquivo>

Quando um novo arquivo é criado o vi apresenta uma tela com 23 linhas e 80


colunas. O nome do arquivo aparece entre aspas no canto inferior esquerdo da tela,
seguido pela mensagem "[New File]".
Dessa mesma maneira é possível editar um arquivo já existente. Neste caso,
no canto inferior esquerdo da tela, à frente do nome do arquivo, aparecerá uma
mensagem indicando quantas linhas e quantos caracteres o arquivo possui.
Em cada linha onde não tiver sido digitado nada até o momento, aparecerá um
~ (til), indicando que a linha é uma linha nula. Uma linha nula não é o mesmo que uma
linha preenchida com espaços.

6. Como entrar no modo insert


Quando um arquivo é editado, o vi está no modo escape. Neste modo os
caracteres têm significado especial, isto é, são comandos. Para poder introduzir o texto é
necessário passar para o modo insert.
No modo escape o vi é sensível a maiúsculas e minúsculas, isto é, digitar o
comando a é diferente de digitar o comando A.
Os comandos do modo escape que mudam o modo de operação do vi para o
modo insert são: a, A, i, I, o, O. Cada um deles permite que a inserção de texto ocorra em
posições distintas do arquivo. Isto é irrelevante se o arquivo editado está totalmente vazio
(só possui linhas nulas).
a (append) Inclui texto após o cursor;
A (append) Inclui o texto ao final da linha corrente, não importando
em que posição o cursor está na linha;
i (insert) Insere texto antes do cursor;
I (insert) Insere o texto no início da linha corrente, não importando
em que posição o cursor está na linha;
o (open) Abre uma nova linha abaixo da linha corrente e coloca o
cursor no início desta nova linha;
O (open) Abre uma nova linha acima da linha corrente e coloca o
cursor no início desta nova linha;

7. Como sair do modo insert


Enquanto está digitando o texto, você pode utilizar a tecla backspace para
retroceder sobre a linha corrente e corrigir eventuais erros, mas o backspace só funciona
na linha corrente. Para movimentar o cursor para outras linhas do texto é necessário

Introdução ao Linux
O Editor vi 56

passar para o modo escape, teclando ESC, e a movimentação do cursor pode então ser
realizada utilizando as setas ←↑→↓, ou ainda as teclas h, j, k, e l (em minúsculo):
l Equivale à seta →; De fato faz o mesmo que a barra de espaços, e no
modo escape serve para avançar adiante na linha;
h Equivale à seta ←; De fato faz o mesmo que backspace, e no modo
escape serve para retornar na linha;
j Para mover o cursor para a linha de baixo. Equivale à seta ↓ ;
k Para mover o cursor para a linha de cima. Equivale à seta ↑ ;
O vi não distribui o texto automaticamente pelas linhas. Quando uma linha é
digitada além das 80 colunas que normalmente são apresentadas na tela, aparentemente o
vi faz um rearranjo no tamanho da linha, mas de fato isto deve ser feito manualmente,
digitando ENTER na posição da linha onde deseja-se encerrá-la.

8. Como gravar um arquivo em disco


Lembre-se que as alterações que você está promovendo estão sendo
armazenads no buffer de edição. Para gravar estas alterações você deve utilizar o
comando last line write. No modo escape, digite : (dois pontos), para entrar no modo last
line. Aparecerá um sinal : no canto inferior esquerdo da tela. Digite w (ou write) e
pressione ENTER. Após ter sido concluída a gravação, o cursor voltará à posição que
estava antes de entrar no modo last line.

9. Como sair do vi
Sair do vi significa encerrar a execução do editor, e consequentemente
abandonar o buffer de edição. Existe mais de uma maneira de encerrar o vi. Na primeira
delas você pode utilizar o comando last line quit. Entre no modo last line e então digite q
(quit). Se o arquivo não possuir nenhuma alteração no buffer de edição que ainda não
esteja no disco o vi encerrará imediatamente. Porém se existir alguma alteração que
ainda não foi salva em disco, aparecerá uma mensagem indicativa, e você poderá optar
por encerrar o editor sem gravar as alterações usando o comando q!.
Para salvar as alterações antes de encerrar o vi, você tem três alternativas.
Primeiro você pode utilizar o comando last line wq (write then quit). Outra opção é
utilizar o comando last line x, que faz a gravação automaticamente se houver alguma
alteração que ainda não tiver sido salva em disco. E finalmente você pode utilizar o
comando escape ZZ, que faz o mesmo que last line x.

10. Comandos básicos de edição


Introdução ao Linux
O Editor vi 57

Neste tópico vamos abordar comandos simples de edição de texto, como


movimentação de cursor, substituição de pedaços do texto, movimentação e cópia de
pedaços do texto, etc. Estas operações podem ser feitas no vi nos modos escape e last
line. Primeiramente vamos ver como se faz isto no modo escape e depois no modo last
line.
O conceito de linha corrente, que é a linha onde se encontra o cursor em um
dado momento, é muito importante para compreender bem o funcionamento dos
comandos de edição.

11. Movimentação do cursor


Além das movimentações de cursor que já apresentamos acima, existem
outras que são muito importantes na edição de um texto.
Movimentação do cursor por caracteres: Os comandos f ou F (find) movem o
cursor para a próxima ocorrência na linha corrente de um caracter especificado. Por
exemplo, fB move o cursor para frente até a primeira ocorrência da letra "B" na linha
corrente, enquanto que o comando FB move o cursor para trés até a primeira ocorrência
da letra "B" na linha corrente. Se com a busca (na direção especificada por f ou F) não for
encontrada a letra especificada, soará um sinal indicando o erro.
Movimentação do cursor por palavras : Os comandos w ou W (word) e b ou B
(back) movem o cursor para o início da palavra seguinte e da palvara anterior na linha
corrente respectivamente. Utilize as maiúsculas para mover sobre palvras que contenham
caracteres especiais, como por exemplo as palavras "amá-la", "disse-lhe" e "3+4=7".
Assim, os comandos w e W podem ser usados para mover o cursor para frente até o
início da palavra seguinte na linha corrente, e os comando b e B podem ser usados para
mover o cursor para trás até o início da palvra anterior na linha corrente.
Movimentação do cursor por linhas: Os comandos 0 (zero) e $ movem o
cursor respectivamente para o início da linha corrente e para o final da linha corrente. Os
comandos h, j, k, e l que já foram apresentados acima também podem ser usados.
Movimentação do cursor por telas: Os comandos ^D (CTRL+D) (down) e ^U
(CTRL+U) (up) movem o texto metade da tela para baixo e metade da tela para cima,
respectivamente. O cursor continuará na mesma posição relativa, apenas o texto será
rolado adiante ou para trás. Pode -se especificar a quantidade de linhas do texto que se
deseja rolar, como por exemplo: 8^D indica que o texto deve ser rolado 8 linhas adiante,
enquanto que 5^U indica que o texto deve ser rolado 5 linhas para trás.

12. Alterações no texto (modo escape)

Introdução ao Linux
O Editor vi 58

Agora que você já sabe como criar e inserir o texto em um arquivo com o vi, é
necessário que você aprenda a promover alterações no texto, para poder corrigir erros
eventuais, para melhorar a organização do texto, copiando ou movendo pedaços dele para
outros locais, ou mesmo eliminando algum trecho.
Antes é importante que você compreenda o conceito de buffers de deleção.
Estes buffers são locais onde o vi guarda temporariamente os pedaços que você elimina
do texto. O vi normalmente possue 9 desses buffers, e você pode acessar qualquer um
deles especificando o número dele entre 1 a 9, precedido de aspas, por exemplo "5.
Quando um pedaço de texto é eliminado, este pedaço é armazenado no buffer número 1, e
então removido do texto que está no buffer de edição. Se mais um pedaço do texto for
eliminado, o pedaço que estava no buffer de deleção número 1 vai para o buffer número
2, e o pedaço que está sendo eliminado é armazenado no buffer número 1, e então
eliminado do buffer de edição. Assim, você pode sempre recuperar os últimos 9 pedaços
eliminados do texto.
Além desses 9 buffers, você pode criar outros, dando-lhes nomes de letras,
por exemplo a, z, etc... dos quais você poderá recuperar pedaços de texto acessando -os
pelo nome que você atribuiu na criação do buffer, precedido de aspas: por exemplo "a.
Os comandos de edição a seguir fazem uso destes buffers. Para copiar um
pedaço de texto, por exemplo, você deverá primeiramente armazenar o pedaço desejado
em um buffer, para somente depois poder recuperá-lo na posição desejada do seu texto.
Desfazer alterações: Antes de aprender a utilizar os comandos que alteram o
texto é importante que você saiba como desfazer um alteração que foi feita
equivocadamente, ou que erroneamente. O comandos u e U (undo) são utilizados para
desfazer o resultado do último comando executado, voltando o texto à situação que se
encontrava antes dele ter sido executado, e para desfazer todas as alterações executadas
sobre a linha corrente, respectivamente. Os comandos u e U desfazem apenas comandos
de edição, não de movimentação de cursor; isto significa que você pode desfazer o
último comando de edição mesmo que você já tenha movido o cursor para outra posição
do texto.
Marcar posições no texto: O comando m (mark) permite marcar posições no
texto, que podem ser utilizadas como endereços de referência para os outros comandos
de edição. O comando mx marca a linha corrente como sendo a linha x. Você poderá se
referir a esta linha mais adiante como sendo a linha 'x; qualquer letra minúscula pode ser
utilizada como nome de linha. Daí, o comando 'x pode ser usado para mover o cursor para
a linha x.
Eliminar pedaços do texto: Você pode eliminar caracteres, linhas e pedaços de
texto. Os comandos x e X eliminam os caracteres abaixo do cursor; se precedidos de um
número n, eliminam o caractere abaixo do cursor e os outros (n-1) caracteres vizinhos
que estão para frente e para trás do cursor, respectivamente. Por exemplo: imagine que o
cursor está na letra n da palavra "eliminar" , o comando 2x eliminará as letras "na", e o

Introdução ao Linux
O Editor vi 59

comando 4X eliminará as letras "imin". Os comandos d e D eliminam pedaços de linhas


do texto. O comando D pode ser utilizado para eliminar da linha corrente o pedaço que
está entre a posição do cursor e o final da linha. O comando d deve ser seguido de um
número n que diga quantas linhas devem ser eliminadas abaixo da linha corrente; se ao
invés de n for especificado d, a própria linha corrente será eliminada. Por exemplo: dd
elimina a linha corrente; d2 elimina as duas linhas abaixo da linha corrente. Para eliminar
um bloco de texto você pode especificar um endereço de linha ao invés do número n. Isto
fará com que todo o texto contido entre a posição do cursor e o endereço de linha
especificado seja eliminado. Por exemplo: se você já havia executado o comando mb na
linha 10, você pode eliminar todo o texto entre a linha corrente e a linha 10 usando o
comando d'b. Se você deseja armazenar em um buffer o pedaço que você está apagando,
informe o nome do buffer precedido de aspas. Por exemplo, o comando "a3d apaga as
três linhas seguintes à linha corrente e armazena no buffer de nome a.
Copiar pedaços do texto: Para copiar um pedaço de texto para outro local no
texto, você deverá primeiramente armazenar o pedaço desejado em um buffer de deleção
(de 1 a 9, ou um que você crie dando-lhe o nome de uma letra). Para copiar o texto para
este buffer, utilize o comando y (yank). Assim, o comando y'a copiará para o buffer de
deleção número 1 o pedaço de texto que estiver contido entre a posição atual do cursor e
a posição previamente marcada com a letra a. O comando "x3y copiará para o buf fer de
nome x as três linhas seguintes à linha corrente. O comando yy copiará para o buffer
número 1 a linha corrente.
Recuperar pedaços de texto : Um pedaço de texto que foi eliminado com um
comando de deleção, ou copiado para um buffer com o comando y, pode ser recuprado
dos buffers com os comandos p e P (put). Os comandos p e P recuperam os trechos de
texto dos buffers e os inserem depois do cursor (p) ou antes do cursor (P).
Normalmente os comandos p e P recuperam o último texto apagado ou copiado. Para
recuperar de um buffer específico, utilize os comandos "xp e "xP, onde "x é um número
de 1 a 9 ou um nome de um buffer previamente criado. Por exemplo, o comando "gp
insere o texto guardado no buffer g logo após o cursor, e o comando "3P insere o texto
do buffer 3 na posição anterior ao cursor.
Importante:
• Trechos de texto menores que uma linha devem ser armazenados em
buffers com nomes de letras;
• Não existem comandos de movimentação e cópia de texto no modo escape.
Isto deve ser feito utilizando os buffers de deleção (de número ou de letra);

13. Alterações no texto (modo last line)

Introdução ao Linux
O Editor vi 60

Ao contrário dos comandos do modo escape, os comandos do modo last line


aparecem na tela quando você os digita, e necessitam ser seguidos de ENTER. Muitos
dos comandos podem ser digitados por extenso ou abreviados, como por exemplo, você
pode digitar write ou apenas w.
Há vários símbolos adicionais que você pode usar para representar endereços
específicos. O símbolo . indica a linha corrente; o símbolo $ indica a última linha do
arquivo; e os símbolos + e - podem ser usados para indicar algum número de linhas
acima ou abaixo da linha corrente.
O endereço que você digitar antes do comando especifica a linha sobre a qual
ele deve operar. Dois endereços separados por vírgula delimitam um bloco de texto. Se
não for especificado um endereço o comando atuará sobre a linha corrente.
O comando undo pode ser utilizado para desfazer o resultado do último
comando executado.
Apagar pedaços do texto: Como no modo last line você pode especificar dois
endereços, não é necessário que o cursor esteja em nenhuma posição especial para
eliminar um trecho do texto. Isto pode ser feito com o comando 10,15 d, que indica que
o pedaço de texto contido entre as linhas 10 e 15 deve ser apagado. Você também pode
utilizar endereços previamente marcados (no modo escape), como por exemplo 'a,'b d
que apagará o trecho contido entre a linha marcada pela letra a e a linha marcada pela
letra b. Ainda é possível utilizar os símbolos especiais mencionados acima: . d apaga a
linha corrente, e .,$ d apaga tudo a partir da linha corrente.
Mover pedaços de texto: Para especificar qual o pedaço de texto deve ser
movido pode-se utilizar um ou dois endereços, conforme se deseja mover uma ou mais
linhas do texto para um outra posição. O comando 3 m 7 move a linha 3 para logo abaixo
da linha 7; o comando .,$ m 1 move o pedaço do texto a partir da linha corrente até o final
para o início do texto, abaixo da linha 1; o comando 'a,'b m . move o bloco delimitado
pelos endereços previamente marcados como a e b para abaixo da linha corrente.
Copiar pedaços de texto: O comando co funciona extamanente igual ao
comando m, exceto pelo fato de que não elimina do texto o pedaço de origem.

Introdução ao Linux
O Editor vi 61

Exercícios
1- Usando o editor de texto vi, edite um arquivo contendo um trecho de sua música
preferida. Salve o seu arquivo como musica.preferida e abandone o vi.
2- Volte ao vi . Marque um bloco contendo as cinco primeiras linhas do texto e copie no
final do arquivo. Salve as alterações e abandone do vi.
3- Entre no vi e crie um arquivo contendo os nomes dos seus colegas do curso de Linux,
um nome em cada linha. Salve o arquivo como colegas.de.curso e abandone o vi. Coloque
os nomes em ordem alfabética. Dica : use o comando sort.
4 - Agora ordene os nomes contidos no arquivo pelo sobrenome em ordem inversa.
5 - Usando o vi, crie um arquivo chamado agenda com dez nomes e telefones (sem
incluir o DDD).
6 - Inclua, no começo do arquivo, o título : AGENDA.
7 - Inclua, depois da sexta linha do arquivo , a seguinte linha :
Maria 2565620
8 - Inclua, em cada telefone, o prefixo de DDD.
9 - Altere o nome de Maria para Carmen.
10 - Exclua os dados de Carmen da sua agenda.
11- Recupere os dados de Carmen.

Introdução ao Linux
Segurança 62

Capítulo 5
Segurança
1. Acesso à Diretórios e Arquivos
Todos os arquivos em um sistema LINUX fazem parte de um mesmo sistema
de arquivos e, a princípio, podem ser acessados por qualquer usuário daquele sistema.
Entretanto há uma maneira de restringir o acesso aos arquivos e diretórios para que
somente determinados usuários possam acessá-los. A cada arquivo e diretório é
associado um conjunto de permissões. Essas permissões determinam quais usuários
podem ler, e escrever (alterar) um arquivo e, no caso de ser um arquivo executável, quais
usuários podem executá-lo. Se um usuário tem permissão de execução para um diretório,
significa que ele pode realizar buscas dentro daquele diretório, e não executá-lo como se
fosse um programa.
Quando um usuário cria um arquivo ou um diretório, o LINUX determina que
ele é o proprietário (owner) daquele arquivo ou diretório. O esquema de permissões do
LINUX permite que o proprietário determine quem tem acesso e em que modalidade
eles poderão acessar os arquivos e diretórios que ele criou. O super -usuário, entretanto,
tem acesso a qualquer arquivo ou diretório do sistema de arquivos.

2. Permissões de acesso:
O conjunto de usuários pode ser dividido em três classes: proprietário, grupo
e usuários. Um grupo pode incluir pessoas do mesmo departamento ou quem está
trabalhando junto em um projeto. Os usuários que pertencem ao mesmo grupo recebem
o mesmo número do grupo (também chamado de Group Id ou GID). Este número é
armazenado no arquivo /etc/passwd junto com outras informações de identificação sobre
cada usuário. O arquivo /etc/group contém informações de controle sobre todos os
grupos do sistema. Assim, pode-se dar permissões de acesso diferentes para cada uma
destas três classes.

Introdução ao Linux
Segurança 63

Quando você executa ls -l em um diretório qualquer, os arquivos são exibidos


de maneira semelhante a seguinte:

As colunas que aparecem na listagem são:


Esquema de permissões;
Número de ligações do arquivo;
Nome do usuário;
Nome do grupo ao que o usuário pertence;
Tamanho do arquivo, em bytes;
Mês da criação do arquivo;
Dia da criação do arquivo;
Hora da criação do arquivo;
Nome do arquivo;
O esquema de permissões está dividido em 10 colunas, que indicam se o
arquivo é um diretório ou não (coluna 1), e o modo de acesso permitido para o
proprietário (colunas 2, 3 e 4), para o grupo (colunas 5, 6 e 7) e para os demais usuários
(colunas 8, 9 e 10).
Existem três modos distintos de permissão de acesso: leitura (read), escrita
(write) e execução (execute). A cada classe de usuários você pode atribuir um conjunto
diferente de permissões de acesso. Por exemplo, atribuir permissão de acesso irrestrito
(de leitura, escrita e execução) para você mesmo, apenas de leitura para seus colegas, que
estão no mesmo grupo que você, e nenhum acesso aos demais usuários. A permissão de
execução somente se aplica a arquivos que podem ser executados, obviamente, como
programas já compilados ou script shell. Os valores válidos para cada uma das colunas
são os seguintes:
1 d se o arquivo for um diretório; - se for um arquivo comum;
2,5,8 r se existe permissão de leitura; - caso contrário;
3,6,9 w se existe permissão de alteração; - caso contrário;
4,7,10 x se existe permissão de execução; - caso contrário;
A permissão de acesso a um diretório tem outras considerações. As
permissões de um diretório podem afetar a disposição final das permissões de um
arquivo. Por exemplo, se o diretório dá permissão de gravação a todos os usuários, os
arquivos dentro do diretório podem ser removidos, mesmo que esses arquivos não
tenham permissão de leitura, gravação ou execução para o usuário. Quando a permissão
de execução é definida para um diretório, ela permite que se pesquise ou liste o
conteúdo do diretório.

3.Verificando as permissões de acesso

Introdução ao Linux
Segurança 64

O comando ls -l mostra os atributos dos arquivos e dos diretórios.


Normalmente as permissões padrão para os diretórios (rwxrwxrwx) permitem o acesso
de leitura, gravação e execução para todos os usuários (proprietário, membros do grupo e
outros). Para os arquivos as permissões padrão (rw-rw-rw-) permitem acesso de leitura e
gravação para o proprietário, membros do grupo e todos os demais usuários. As
permissões padrão podem ser modificadas com o uso do comando umask que será
apresentado mais adiante.

4. Alterando a permissão de acesso


chmod modo-de- permissão arquivo

O modo de permissão na linha de comando é representado em um dos dois


formatos - octal (absoluto) ou simbólico. O formato octal usa valores numéricos para
representar

4.1. Formato octal do modo de


permissões
Há oito valores numéricos possíveis (0-7) que representam o modo de
permissão para cada tipo de usuário. São eles :
0 Nenhum acesso
1 Apenas execução
2 Apenas gravação
3 Gravação e execução
4 Apenas leitura
5 Leitura e execução
6 Leitura e gravação
7 Acesso total (leitura, gravação e execução)

Exemplo : Usando o formato octal, mude o modo de permissão do arquivo


prog1 para que o proprietário tenha acesso total e todos os outros usuários (grupo e
outros) tenham apenas permissão de leitura e execução :
$ chmod 755 prog1
$ ls -l prog1
-rwxr -xr-x 1 guest users 1475 May 20 11:02 prog1
$

Introdução ao Linux
Segurança 65

4.1.Formato simbólico do modo de


permissões
O formato simbólico usa letras e símbolos para indicar o modo de permissão.
Ele é composto de três elementos :

Tipo de usuário
u Usuário ( Proprietário )
g Grupo
o Outros
a Todos

Ação
A ação significa como serão alteradas as permissões.

+ Acrescenta permissão(ões)
- Remove permissão(ões)
= Atribui a permissão explicitamente

Os operadores + e - acrescentam e removem as permissões relativas ao modo


de permissão corrente. O operador = reinicializa todas as permissões explicitamente
(exatamente como indicado)

Tipo de permissão
r Leitura
w Gravação
x Execução

A combinação desses três elementos formam o modo de permissão no


formato simbólico.
Exemplos :
1- Tire a permissão de execução, sobre o arquivo teste, do grupo e dos outros
usuários :
$ chmod go-x teste
$ ls -l teste
-rwxrw-rw- 2 guest users 512 May 20 14:04 teste
$

Introdução ao Linux
Segurança 66

2- Mude as permissões do arquivo prog2 para que todos os usuários possam


ler o executá-lo :
$ chmod a=rx prog2
$ ls -l
-r-xr-xr-x 1 guest users 1986 May 20 08:26 prog2
$

5. Mudando as permissões padrão


umask [ permissão ]

Modifica os modos padrão de permissão para os novos arquivos que você


criar. No comando, número é um número octal de três dígitos, como visto no comando
chmod. Entretanto aqui você especifica de maneira inversa, isto é, em chmod se você
utilizar número igual a 777, você estará concedendo autorização de
leitura+escrita+execução para você mesmo, para o grupo e para todos os demais
usuários. Com o comando umask se você especificar número igual a 777, você estará
negando acesso a todas as classes em qualquer modo. De fato, a permissão que será
concedida é dada pela diferença entre a permissão padrão original, que é 777 para
diretórios e 666 para arquivos, e a permissão especificada em umask. Por Exemplo :
Diretórios: Permissão padrão 777 (rwxrwxrwx)
Valor em umask 023
Novas permissões 754 (rwxr -xr--)
Arquivos: Permissão padrão 666 (rw-rw-rw-)
Valor em umask 022
Novas permissões 644 (rw-r--r--)
Sem especificar um número umask mostrará o valor corrente da máscara de
permissões. Os arquivos e diretórios criados antes do uso do comando permanecem com
as permissões inalteradas.

Exemplo :
1- Mostrar o valor atual da máscara de permissões :
$ umask
022
$
2- Mudar o valor da máscara para que os novos aquivos tenham a seguinte
permissão : proprietário com acesso a leitura e escrita, grupo com acesso a
leitura e execução e outro somente para leitura :
$ umask 012

Introdução ao Linux
Segurança 67

6. "group-id" de um arquivo

chgrp grupo arquivo


O comando chgrp muda a identificação do grupo de um arquivo. Pode ser
utilizado para conceder permissão de leitura e escrita para outro grupo que não o seu,
sem ter que conceder as mesmas permissões para todos os demais usuários. Você só
poderá mudar o grupo do arquivo que você mesmo criou. Al ém de você somente o super-
usuário poderá fazer isso.

Exemplo : Mude o grupo do arquivo memo1 para users2 :


$ ls -l memo1
-rw-r--r-- 1 guest users 984 May 12 11:02 memo1
$ chgrp users2 memo1
$ ls -l memo1
-rw-r--r-- 1 guest users2 984 May 12 11:02 memo1
$

7. "owner" de um arquivo
chown usuário arquivo

Usado para mudar a identificação de proprietário associada a um arquivo.


Você só poderá aplicar este comando aos arquivos que você mesmo criou. Além de você
somente o super -usuário poderá fazê-lo. Observe que uma vez que você tenha alterado a
identificação de proprietário que está associada a um arquivo, você não é mais o
proprietário, e não poderá mais fazer a alteração inversa.
Exemplo : Mude a propriedade do arquivo prog1 para guest2 :
$ ls -l prog1
-rw-r-xr-- 1 guest users 1765 May 17 13:34 prog1
$ chown guest2 prog1
$ ls -l prog1
-rw-r-xr-- 1 guest2 users 1765 May 17 13:34 prog1
$

8. A identificação do usuário/grupo
id

Introdução ao Linux
Segurança 68

Mostra os número e os nomes que identificam o usuário e seu grupo. As


informações do grupo (GID) e dos usuários (UID) mostradas pelo comando id são
tiradas do arquivo /etc/passwd. Se o nome de um grupo não for mostrado é porque o
grupo primário do usuário que está definido no arquivo /etc/passwd não existe no arquivo
/etc/group.

Exemplo : Mostrar a identificação do usuário e do grupo a que pertence :


$ id
UID=528( guest ) GID=100( users ) GROUPS=100( users )
$

8.1 Participação em grupos


Um usuário pode pertencer a mais de um grupo ao mesmo tempo, contanto
que ele esteja como membro de cada um desses grupo no arquivo /etc/group. Entretanto,
o número de identificação de grupo especificado no arquivo /etc/passwd continuará
valendo como o grupo primário do usuário. Esta identificação está associada aos
arquivos e diretórios criados pelo usuário.
Ser um membro de um grupo, significa ter acesso aos arquivos e diretórios
pertencentes aos demais membros do mesmo grupo. O comando id mostra a
identificação do usuário e do grupo. Os arquivos pertencentes a grupos diferentes do
grupo primário do usuário, mas de grupos aos quais o usuário pertence, podem ser
acessados com o uso dos seguintes comandos:
chgrp Que modifica a identificação de grupo associada a um arquivo ou
diretório;
newgrp Que modifica temporariamente a vinculação de um usuário a um
grupo. Os arquivos e diretórios criados depois que o usuário muda para outro grupo,
refletem o "novo" grupo.
newgrp [grupo]

O comando newgrp muda temporariamente o grupo ao qual você pertence,


dando -lhe acesso a todos os arquivos e diretórios acessíveis aos membros do novo
grupo. Para que você possa mudar de identidade de grupo, seu nome de usuário deve estar
no arquivo /etc/group para o grupo ao qual você deseja mudar. Sem argumentos o
comando retorna o nome do grupo ao que você está vinculado.
Exemplo : Mude o grupo corrente para users2 :
$ id
UID=528( guest ) GID=100( users ) GROUPS=100( users )
$ newgrp users2

Introdução ao Linux
Segurança 69

$ id
UID=528( guest ) GID=200( users2 ) GROUPS=200( users2 )
$

Introdução ao Linux
Segurança 70

Exercícios

1 - Crie dois arquivos chamados perm1 e perm2. Os arquivos devem ter uma ou duas
linhas de texto cada um. Mostre o modo de permissão para esses arquivos. Anote os
modos de permissão para cada arquivo.
2 - Mude o modo de acesso para perm1 usando o formato octal para que o proprietário
possa acessar e modificar o arquivo, os membros do grupo possam apenas visualizar o
arquivo e todos os outros usuários sejam totalmente impedidos de ac essar o arquivo.
Mostre as permissões de perm1 para confirmar que o novo modo de acesso foi alterado
corretamente.
3 - Mude o modo de acesso ao perm2 usando o formato simbólico para remover todo o
acesso dos membros do grupo e de todos os usuários(exceto o proprietário). Mostre as
permissões de perm2 para confirmar o novo modo de acesso.
4 - Mostre e anote as opções atuais da mascara de permissões.
5 - Altere a permissão default para restringir todo o acesso dos membros do grupo e dos
outros usuários aos novos arquivos. Anote o comando usado.
6 - Crie um novo arquivo chamado perm3 com uma ou duas linhas de texto. Mostre e
anote o modo de permissão de perm3. Qual o efeito que a permissão default teve sobre
os três arquivos ? Explique.
7 - Altere o modo de perm1 e perm2 para que eles possam ser lidos e gravados por todos
os usuários. Use o formato octal para perm1 e o simbólico para perm2. Confirme estas
alterações.
8 - Atribua a máscara de permissão o valor : 022

Introdução ao Linux
Redirecionamento 71

Capítulo 6
Redirecionamento

1. Entrada e Saída dos comandos


Quase todos os comandos do LINUX usam uma entrada e poduzem uma saída.
A entrada para um comando são os dados sobre os quais o comando irá operar. Esses
dados podem vir de um arquivo especificado pelo usuário, de um arquivo de sistema do
LINUX, do terminal (do teclado) ou da saída de outro comando. A saída de um comando
é o resultado da operação que ele realiza sobre a entrada. A saída dos comando pode ser
impressa na tela do terminal, enviada a um arquivo, ou servir de entrada para outro
comando.
Neste capítulo você vai aprender a manipular estas entradas e saídas, para
poder criar e ler arquivos durante o uso de alguns comandos, e também aprenderá a
encadear comandos, fazendo com que um comando utilize como entrada a saída de outro.

2. Entrada e Saída Padrão:


Alguns comandos têm apenas uma fonte possível para a entrada; por exemplo
o comando date sempre utiliza o sistema interno de relógio para indicar a data e hora.
Outros comandos exigem que você especifique uma entrada. Se não especificar uma
fonte de entrada juntamente com esses comandos, o LINUX considera que ela virá do
teclado, isto é, ele esperará que você digite a entrada. Por isso o teclado é chamadode
entrada padrão.
As informações do teclado são utilizadas no processamento, e para sua
facilidade o LINUX também ecoa (apresenta na tela) o que você digitar. Desta forma,
você pode certificar-se de ter digitado os comando corretamente.

Introdução ao Linux
Redirecionamento 72

Normalmente, quase todos os comandos enviam suas saídas para a tela do


terminal, que é chamada de saída padrão. Como com as entradas, você também pode
redirecionar as saídas dos comandos para outro destino que não é a saída padrão, por
exemplo para arquivos ou para a entrada de outros comandos.
Alguns comandos, como rm, mv e mkdir não produzem nenhuma saída.
Entretanto esses comandos e muitos outros podem apresentar mensagens de erro na tela
se não obtiverem sucesso no seu processamento. Isto ocorre porque a tela do terminal
também é a saída de erros padrão, isto é, o local para onde são enviadas as mensagens de
erro. As mensagens de erro dos comandos não devem ser confundidas com as saídas dos
comandos.
A shell do LINUX redireciona a fonte e o destino da entrada, de modo que o
comando não percebe se a entrada padrão está direcionada para o teclado do terminal ou
para um arquivo. Da mesma forma, o comando não percebe se a saída padrão está
direcionada para a tela do terminal, para um arquivo ou para a entrada de outro comando.

3. Redirecionamento de E/S
Há três métodos básicos para redirecionar a entrada ou saída de um comando.
Uma delas é simplesmente fornecer como argumento para o comando o nome do arquivo
que deve ser usado como entrada ou saída para o comando. Este método funciona com
alguns comandos, como por exemplo cat, pg e outros. Já comandos como o pwd não
podem receber um arquivo como argumento. Mesmo com os filtros (classe de
comandos a qual pertencem o cat e o pg) nem sempre é possível especificar a saída.
Outro método para redirecionar a entrada ou saída é utilizar os símbolos de
redirecionamento. Como muitos comandos podem receber arquivos de entrada sob a
forma de argumentos, os símbolos de redirecionamento são mais utilizados para
direcionar a saída dos comandos.
Um terceiro método de redirecionar entradas e saídas é usando pipes, que
enviam a saída de um comando para outro, ou seja, a saída de um comando serve como
entrada para outro comando.

4. Símbolos de redirecionamento
Os caracteres especiais utilizados na linha do comando para fazer a shell
redirecionar a entrada., saída ou erro do programa estão listados e descritos a seguir. A
shell interpreta esses caracteres antes do comando ser executado.

4.1 Redirecionamento de entrada


Introdução ao Linux
Redirecionamento 73

comando < arquivo

O símbolo < (menor que) faz com que a entrada padrão seja direcionada a um
arquivo. Em muitos casos, especificar < funciona exatamente como especificar o nome
do arquivo como argumento do comando. Por exemplo:
$ cat Arquivo.teste
$ cat < Arquivo.teste
produzirão exatamente o mesmo efeito.

4.2 Redirecionamento de saída


comando > arquivo ou comando >> arquivo

Os símbolos > e >> redirecionam a saída de um comando para um arquivo. O


símbolo > escreve a saída do comando dentro do arquivo que você indicar, quer esse
arquivo exista ou não, sendo que o conteúdo do arquivo já existente será substituído. O
símbolo >>, ao contrário, anexa a saída do comando ao arquivo indicado em vez de
substituir os dados que ele já continha. Na C Shell é necessário que o arquivo já exista,
para que o símbolo possa ser utilizado, caso contrário ocorrerá um erro.

Exemplos :
1 - Guarde no arquivo data.de.hoje a saída do comando date :
$ date > data.de.hoje
$ cat data.de.hoje
Mon May 20 10:10:28 WST 1996
$

2 - Acrescente ao arquivo data.de.hoje a saída do comando who :


$ who >> data.de.hoje
$ cat data.de.hoje
Mon May 20 10:10:28 WST 1996
guest tty1 May 20 08:52
$

5. Pipes
Os símbolos de redirecionamento permitem realizar mais de uma operação
em um mesmo arquivo. Somente com esses símbolos você já tem condições de realizar
tudo oque quiser sobre um arquivo. Suponha, entretanto, que você queira fazer um

Introdução ao Linux
Redirecionamento 74

conjunto de operações diferentes em um mesmo arquivo. Cada operação implicaria a


criação de um novo arquivo, sendo que o único propósito desses arquivos seria servir
como entrada para outro comando. Entretanto, tudo o que importa é o resultado final.
Para situações como essas o LINUX possui outra maneira de redirecionar entradas e
saídas: os pipes.

comando 1 | comando 2

Este símbolo pode ser usado para enviar a saída de um comando para a entrada
de outro. Você pode usar vários pipes em uma linha de comando, de maneira que é
possível combinar tantos comandos quantos necesários, bastando intercalá-los por
símbolos de pipe. Uma sequência de comandos encadeados desta maneira é chamada de
pipeline.
Existem algumas regras básicas para compor um pipeline em uma linha de
comandos LINUX. Essencialmente essas regras são o endosso da intuição de um usuário
um pouco mais experiente, que facilmente percebe que em um pipeline não pode haver
"vazamentos" nem "entupimentos" do pipe, isto é, não pode haver no meio do pipeline um
comando que não produza saídas (como é o caso do mkdir ou rm), ou um comando que
não aceite entradas (como é o caso do date e pwd). O primeiro comando do pipeline deve
ser um produtor de saída, obviamente.

Exemplos :
1- Conte o número de arquivos que começam com a substring ‘arq’ no
diretório corrente :
$ ls | grep arq | wc -l
3
$

2- Conte o número de usuários que estão presentes no sistema neste


momento :
$ who | wc -l
2
$

6. Redirecionamentos múltiplos
tee [iau] arquivo

O comando tee "divide" a saída de um comando e redireciona-a para múltiplos


destinos: para um arquivo especificado e para a saída padrão. O comando tee em geral é

Introdução ao Linux
Redirecionamento 75

utilizado como um pedaço de um pipeline. Se não estiver em um pipeline, o comando tee


se comporta de maneira semelhante ao comando cat: recebendo linhas na entrada e
ecoando -as na saída.
Opções:
-a Faz a saída ser anexada aos arquivos especificados, em vez de
substituir seus conteúdos;
-i Ignora o sinal de interrupção;
-u Impede o uso de buffer;

Exemplos :
1- Conte o número de arquivos que começam com a substring ‘arq’ no
diretório corrente e guarde os arquivos encontrados no arquivo nomes :
$ ls | grep arq | tee nomes | wc -l
3
$ cat nomes
arq
arq2
arquivo
$
2- Conte o número de ocorrências da cadeia “Linux” no arquivo arq2, guarde
as ocorrências no arquivo resp :
$ cat < arq2 | grep Linux | tee resp | wc -l
2
$ cat resp
aaaaaLinuxaaaaa
Linuxbbbbbbbbb
$

7. Redirecionamento de erro padrão


A mensagem de erro gerada por um comando é normalmente direcionada pela
shell para a saída de erro padrão, que é a mesma da saída padrão. A saída de erro padrão
também pode ser redirecionada para um arquivo, utilizando o símbolo >. Uma vez que
este símbolo também é utilizado para redirecionar a saída padrão, é necessário fazer uma
distinção mais detalhada para evitar ambigüidade.
Os descritores de arquivos a seguir especificam a entrada padrão, saída padrão
e saída de erro padrão:
0 Entrada padrão;
1 Saída padrão;

Introdução ao Linux
Redirecionamento 76

2 Saída de erro padrão;


O descritor do arquivo deve ser colocado imediatamente antes dos caracteres
de redirecionamento. Por exemplo, 1> indica a saída padrão, enquanto 2> indica a saída
de erro padrão. Assim, o comando mkdir temp 2> errfile faz a shell direcionar qualquer
mensagem de erro para o arquivo errfile. As indicações da entrada padrão (0>) e saída
padrão (1>) são necessárias apenas para evitar ambigüidade.

Exemplo :
$ find / -name meu.arquivo > find.resp 2> find.erro
$ cat find.resp
/home/guest/meu.arquivo
$cat find.erro
find : /guest/1/fd : permission denied
find : /guest/adm/.netscape : permission denied
...
$

Introdução ao Linux
Redirecionamento 77

Exercícios

1 - Crie um arquivo chamado list que contenha uma listagem de todos os arquivos que
começam com a letra d ou D e terminam com um número entre 1 e 5. O mesmo
comando deve mostrar a saída na tela. Dica : use o comando tee.
2 - Concatene os arquivos perm1 e perm2 no arquivo new.file. Acrescente no final de
new.file a seguinte frase : Usando desvio de saida padrão. Dica : use cat e desvio.
3 - Desvie para o arquivo info, as informações sobre cada usuário logado em sua máquina
e adicione ao arquivo o número de usuários que a estão utilizando. Dica : use tee e who.
4 - Crie um arquivo com o nome format utilizando o comando cat e redirecionamento
de saída. Informe o seguinte texto no arquivo : Este texto será armazenado no arquivo
format. Acrescente o seguinte texto ao arquivo format : Este texto será acrescentado no
arquivo format.
5 - Liste todos os arquivos e diretórios corrente que foram alterados ontem, armazene a
resposta no arquivo Resposta. Conte o número de arquivos encontrados. Dica : use grep,
tee e pipe.
6 - Utilizando o vi crie dois arquivos chamados students1 e students2 com o texto
fornecido abaixo:
students1 students2
Maria, Ricardo Freitas, Pedro
Silva, Joao Garcia, Maria
Souza, Thiago Matos, Rosa

7 - Concatene os dois arquivos redirecionando a saída para o arquivo students.all. Dica:


use cat.
8 - Remova o arquivo students.all e concatene os arquivos novamente, desta vez escreva
errado o nome do arquivo students1. O que aconteceu ? Quais as informações do arquivo
students.all?
9 - Repita o exercício 8, desta vez, redirecione as mensagens de erro para o arquivo
students.erro. Qual o conteúdo de cada arquivo ?
10 - Concatene os ar quivos students1 e students2, salve os resultados no arquivo
students.temp e exiga simultaneamente os resultados no terminal. Dica : use tee.

Introdução ao Linux
Gerenciamento da Execução de Comandos 78

Capítulo 7
Gerenciamento da
Execução de
Comandos
1. Processos
Cada vez que você executa um comando, um processo é iniciado. Processo é
o nome oficial de um comando que está sendo executado. A cada processo é designado
um número único, e o computador controla a distribuição do tempo de processamento
entre os processos que estão rodando, baseado neste número. Como o LINUX só dispõe
de um único processador, ele trabalha em cada processo durante um tempo muito curto e
depois passa para outro processo, parecendo assim que todos os processos estão
rodando simultaneamente. Desta forma, cada processo é executado com relativa rapidez
e os usuários não precisam esperar o término dos outros processos para que o seu seja
executado.
O processo associado a cada comando permanece ativo apenas até o
encerramento da execução do comando. Você pode ter controle sobre os processos que
estão rodando, listando-os, parando-os ou matando -os.

2. Estrutura de processos
Semelhante ao sistema de arquivos, a organização dos processos é
hierárquica. Apresenta pais e filhos, e até mesmo um processo raiz. O processo pai cria o
processo filho, que também pode criar outros processos. O termo nascer (spawn) é
utilizado para indicar a criação de processos. O primeiro processo iniciado quando o
sistema é inicializado é o init. Semelhante ao diretório raiz, no sistema de arquivos, este
processo é o ancestral de todos os processos.

Introdução ao Linux
Gerenciamento da Execução de Comandos 79

3. Processos do usuário
Enquanto estiver em uma sessão LINUX, você está necessariamente rodando
ao menos um processo, aquele associado à sua shell (sh, para Bourne Shell ou csh, para C
Shell). Se você executar qualquer comando, ele se torna um processo, que é criado pela
shell, e recebe um número de processo. Neste instante, o processo pai, que é o processo
associado à sua shell, se torna inativo e dizemos que está dormindo ( sleeping ).
O processo associado ao comando que você está executando é chamado de
processo corrente. Ao terminar de executar o comando este processo "morre", e o seu
processo pai reassume o controle - este é o processo associado à sua shell. Quando
nenhum comando está sendo executado, o processo corrente é o associado à sua shell.
Você pode listar todos os seus processos que estão rodando em um
determinado momento, usando o comando ps, que veremos logo mais adiante, e daí
descobrir o número de um determinado processo (o process -id ou PID), que é a
informação mais importante para você controlá-lo.

4. Executando múltiplos comandos


Quando uma linha do comando é informada, a shell cria um processo para
executar o comando e passa para o estado sleeping até o processo se encerrar,
devolvendo o controle ao processo da shell. O usuário não pode iniciar outros comandos
enquanto o processo corrente estiver em execução. Ao invés de informar comandos
separadamente e aguardar a vez de cada um ser executado, múltiplos comandos podem
ser informados em uma única linha do comando, utilizando um ponto e vírgula (;) como
separador entre os comandos.
O ponto e vírgula (;) permite a execução serial de múltiplos comandos em
uma única linha do comando. Cada comando é separado do próximo por ponto e vírgula.
O <ENTER> assinala o fim da linha do comando. Os espaços antes e depois do ponto e
vírgula não são importantes, embora sejam geralmente utilizados por convenção. Os
comandos são executados na sequência especificada na linha do comando.

Exemplo :
$ who ; date > arq
guest tty1 May 20 09:56
$ cat arq
Mon May 20 10:10:28 WST 1996
$

Introdução ao Linux
Gerenciamento da Execução de Comandos 80

5. Agrupando comandos
Múltiplos comandos podem também serem agrupados quando colocados
entre parênteses ( ). O ponto e vírgula ainda é utilizado para separar os comandos. A shell
trata cada grupo de comandos entre parênteses como uma tarefa simples e divide os
processos filhos quando necessário. A ordem da execução do programa é mantida. O
agrupamento de comandos é geralmente utilizado quando se deseja saída combinada de
múltiplos comandos.

Exemplo :
$ ( who ; date ) > arq
$ cat arq
guest tty1 May 20 09:56
Mon May 20 10:10:28 WST 1996
$

6. Executando em "background"
Tipicamente, a shell permanece inativa durante a execução de um comando.
Não podendo ser executado outro comando enquanto o comando anterior não tenha sido
concluído e a shell exiba outro prompt de comando. Esta maneira de executar os
comando é chamada de execução em foreground. Nesta modalidade um programa que leva
muito tempo para ser executado resulta na diminuição de produtividade, uma vez que o
usuário aguarda o encerramento do programa, para somente depois executar outro
comando ou programa.
Como alternativa, os comandos podem ser executados em background. Que é
uma maneira de executar comandos que permite que o programa seja executado (em
background, ou "em bg"), sem indisponibilizar a shell, onde você pode continuar
executando comandos ou programas em foreground. A execução em background é
geralmente utilizada em programas que levam muito tempo para serem executados. O
símbolo & ao final de um comando leva a shell a executar o comando em background. O
PID (número de identificação do processo) é exibido automaticamente, indicando que o
processo foi iniciado, e em seguida é apresentado um novo prompt da shell. O processo
em background é executado quando a carga de serviço do sistema permite. A saída do
processo continua sendo enviada à saída padrão, a menos que seja redirecionada para um
arquivo, por exemplo, o que é frequentemente utilizado.

Introdução ao Linux
Gerenciamento da Execução de Comandos 81
Exemplo : Procure a partir da raiz, todos os arquivos com extensão .c, desvie
os erros para find.erro e a resposta para find.resp. Execute em background :
$ ( find / -name *.c > find.resp 2> find.erro )&
[1] 220
$

7. Os processos em andamento
ps [ -opções ]

O comando ps exibe informações sobre processos ativos de acordo com as


opções selecionadas. Os cabeçalhos de colunas de informações apresentadas dependem
das opções especificadas. Por exemplo, a opção -f exibe oito colunas de informações; a
opção -l exibe 15 colunas. As descrições de cada coluna estão abaixo. Podem ser
combinadas múltiplas opções. Algumas opções aceitam listas de parâmetros. Se não
forem especificadas opções, são exibidas informações sobre processos rodando debaixo
da identificação do usuário e associados apenas ao terminal corrente. A saída, neste caso,
contém a identificação do processo, identificador do terminal, tempo de execução
cumulativo e nome do comando.

Opções:
-a Mostra informações sobre processos pertencentes a outros
usuários;
-f Gera uma lista com oito colunas de informações;
-l Exibe uma lista com 15 colunas de informações;
-e Enumera informações sobre cada processo em execução
correntemente;
-u usr Exibe informações de processos do usuário indicado;
-t term Exibe informações de processos para o terminal especificado;

Cabeçalhos da Coluna:
F Valor em octal que dá maiores informações sobre a situação
corrente do processo;
S Nesta coluna é apresentado o estado do processo, conforme a
seguir:
O - Não existente;
S - Adormecido (sleeping);
R - Rodando (running);
I - Intermediário;
Z - Interrompido;

Introdução ao Linux
Gerenciamento da Execução de Comandos 82
T - Terminado;
B - Esperando (blocked);
UID Identificação do usuário proprietário do processo;
PID Identificação do processo;
PPID Identificação do processo pai;
C Taxa de utilização do processador (CPU);
PRI Prioridade do processo (valores mais altos indicam prioridades
mais baixas);
NI Valor utilizado na computação da prioridade. Pode ser atribuído
pelo usuário, através do comando nice;
ADDR Endereço da memória do processo;
SZ Tamanho do processo (em páginas ou blocos) na memória;
WCHAN Evento pelo qual o processo está esperando, e por isso está em
sleeping ou em waiting. Se estiver em branco, o processo está em
execução;
STIME Hora do início da execução do processo;
TTY Terminal controlador;
TIME Tempo de execução cumulativo do processo;
CMD Nome do comando e argumentos associados ao processo;

Exemplos :
1- Mostre o status dos processos :
$ ps
PID TTY STAT TIME COMMAND
152 v01 S 0:00 -bash
225 v01 R 0:00 ps
$

2- Mostre o status dos processos do usuário guest :


$ ps -u guest
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
528 152 0.0 1.6 368 532 v01 S 09:47 0:00 -bash
528 226 0.0 0.6 73 216 v01 R 19:15 0:00 ps
...
$

Notas:
As opções e colunas aqui descritas podem variar para alguns sistemas;

Introdução ao Linux
Gerenciamento da Execução de Comandos 83

8. Encerrando processos
kill [ sinal ] processos

O comando kill envia o sinal indicado aos processos especificados. Os nomes


dos sinais podem ser listados com o comando kill -l. Se não for indicado nenhum sinal, o
sinal padrão é 15 (encerramento por software). Alguns processos não são afetados por
certos sinais - o sinal 9 encerra esses processos. As indicações do sinal podem ser
simbólicas ou numéricas. O comando kill -l enumera apenas os nomes simbólicos.
O processo 0 (zero) indica todos os processos associados com a sessão.
Quando são especificados múltiplos processos, os processos pai devem ser listados
antes dos processo filho, pois o encerramento de um processo pai implica no
encerramento dos processos filho. Os processos indicados devem pertencer ao usuário
corrente, a não ser que o usuário seja super-usuário.
Opções
-l Enumera os nomes dos sinais;
-sinal O sinal pode ser especificado com o nome simbólico ou valor
numérico;

Exemplo :
$ ps
PID TTY STAT TIME COMMAND
152 v01 S 0:00 -bash
230 v01 R 0:00 ps
231 v01 S 0:00 sleep 30
$ kill 231
$ ps
PID TTY STAT TIME COMMAND
152 v01 S 0:00 -bash
230 v01 R 0:00 ps
[ 1 ]+Terminated sleep 30
$

Na Korn Shell e na C Shell existe a possibilidade de haver uma maior


manipulação e controle da execução de processos. Os jobs ( processos ) podem ser

Introdução ao Linux
Gerenciamento da Execução de Comandos 84
alternados entre foreground e background; podem ser suspensos, reativados ou
interrompidos.

9. Controle de Job

Quando ksh e csh são chamados, o controle de job está ativado. Job é
qualquer sequência de comandos. O recurso de controle de job permite ao usuário
suspender, reiniciar ou encerrar jobs, como também mudar jobs entre a execução em
background e foreground.
Os jobs apresentam os seguintes estados :
• Foreground : O job é processado imediatamente antes do controle retornar
ao shell e outro prompt do shell seja exibido.
• Background : O job é executado e o shell retorna imediatamente o controle
ao usuário enquanto o sistema continua a processar o job.
• Interrompido( Suspenso ) : É o job que está parado temporariamente. Este
job pode ser reiniciado ou encerrado.
• Concluido( Killed ) : Job que está parado e concluído. Este job não pode ser
reiniciado.

9.1 Comandos de controle de job


Estão disponíveis os seguintes comandos para manipular jobs, conhecidos
como comandos embutidos do shell :
jobs [ - opção ] Lista o status de todos os jobs.
Opções :
-l Lista completa de todos os jobs incluindo PDIs
-p Exibe somente PDIs associados com jobs em
execução.
fg id_job Coloca o job em foreground
<^z> Suspende job em foreground
bg id_job Coloca o job indicado em background
stop id_job Suspende o job indicado em background
kill id_job Encerra o job indicado

Exemplos :

Introdução ao Linux
Gerenciamento da Execução de Comandos 85
1- Execute um job em background. Observe o que a identificação do job e o
número do PID são exibidos :
$ sleep 300&
[ 1 ] 3105
$

2 - Liste os jobs correntes. A saída do comando inclui o número do job entre [


], o status do job( corrente,anterior,em execução, interrompido,concluido ) e a linha do
comando. O sinal ( + ) após o número do job indica o job corrente; o sinal ( - ) indica o
job anterior..
$ jobs
[ 1 ]+ running sleep 300&
$
3 - Mude o job para foreground utilizando o número do job :
$ fg %sleep

4 - Suspenda o job em foreground corrente. Observe o status Stopped no


display :
<CTRL z >
[ 1 ]+Stopped sleep 300&
$

5 - Mude o job contendo a sequência de caracteres “sleep” para background :


$ bg %sleep
[1] sleep 300&
$

Introdução ao Linux
Gerenciamento da Execução de Comandos 86

Exercícios
1 - Execute a seguinte sequência de comandos numa única linha ( múltiplos comandos
):
• Vá para o diretório dir1;
• Apague todo o conteúdo de dir1;
• Crie um novo subdiretório, dentro de dir1, chamado testes;
• Retorne ao seu diretório base.
2 - Execute quatro comandos quaisquer numa única linha e desvie a saída dos três
últimos comandos no arquivo temp.resp.
3 - Procure, a partir da raíz, todos os arquivos chamados core. Guarde os arquivos
encontrados no arquivo find.resp e as mensagens de erro no arquivo find.erro. Execute
em background.
4 - Liste o status dos processos ativos. Encerre o processo criado no exercício 3.
5 - Crie um arquivo progfile contendo os comandos a seguir : pwd ; date ; ls ; ps .
Programe este arquivo para ser executado depois de 8 minutos, em background, desvie o
resultado para o arquivo progfile.resp.
6 - Execute diversos comandos sleep em background em intervalos de 200, 500, 600
segundos. Registre os números de identificação do processo associado. Exiba os jobs
correntes.
7 - Transfira o primeiro job para foreground. Suspenda esse job, exiba os jobs
correntes. Coloque -o novamente em background. Suspenda o segundo job. Encerre todos
os jobs. Você consegui encerrar o segundo job ? Senão, como fazê-lo.
8 - Execute um comando que encontre, a partir da raíz, o diretório dir1 e liste os
arquivos e subdiretórios ( todo o conteúdo destes também deve ser listado ). Desvie as
mensagens de erro para o arquivo find.erro e o resultado para find.resp. Execute em
background.

Introdução ao Linux
Shell do Linux 87

Capítulo 8
Shell do Linux
Shell é um programa que habilita o usuário a interagir com os recursos do
computador. Como interpretador de comandos, o Shell é a interface entre o sistema e o
usuário. O usuário informa os comandos ao Shell, que os interpreta para que o sistema
operacional execute-os. A Shell funciona também como linguaguem de programação,
lendo os comandos de um arquivo e solicitando ao Kernel a execução deles um após o
outro.
Estão disponíveis três programas em Shell diferentes no LINUX : Bourne
Shell ( sh ), C Shell( csh ) e Korn Shell( ksh ). O administrador do sistema define um
shell para o usuário no arquivo etc/passwd. Se não for indicado um Shell, o Bourne shell
é o default. Somente um shell é utilizado de cada vez, o usuário porém pode utilizar
outros sheells se necessário.

1. Scripts Shell
Quando a shell é usada como linguagem de programação, ela lê e executa os
comandos contidos em um arquivo chamado script shell. Um script shell é executado de
maneira identica a uma sequência de comandos introduzidos interativamente pelo
teclado. Eles podem conter quaisquer comandos que possam ser introduzidos na linha de
comando : utilitários do LINUX , programas compilados e até outros scripts shell. Você
pode utilizar caracteres especiais para identificação de arquivos e para redirecionamento
de entradas/saídas de comandos. Além de comandos normais, um script shell pode conter
outros comandos chamados comandos de controle de fluxo. São semelhantes aos
comandos de controle de fluxos das linguagens de programação C e Pascal.

2. Executando Scripts Shell


Há dois métodos básicos para executar um script shell :
• Utilizar o comando sh para executar os comandos no script shell

Introdução ao Linux
Shell do Linux 88

• Utilizar primeiro o comando chmod para tornar o arquivo executável; depois


executar o arquivo como um comando.

sh
O comando sh executa os comandos no arquivo como se eles fossem
informados no terminal. sh leva o shell a criar ( fork ) outro shell. Este shell secundário
é na verdade uma cópia do shell pai, que pode manipular somente um processo de cada
vez. Os comandos contidos no programa são manipulados pelo shell secundário.
O formato deste comando é : sh nome_progama

chmod
O comando chmod é utilizado para fornecer permissão de execução ao arquivo
do programa a fim de executá-lo como um comando. O shell cria o novo processo para
executar o arquivo do programa.

Existem dois comandos para executar o script shell sem criar um novo
processo :
. ( ponto )
O comando .( ponto ) executa o programa como parte do processo corrente,
que continua a executar após o encerramento do programa. O comando . não
requer permissão para executar o arquivo do programa. Programas compilados (
binários ) não podem ser executados com este comando.
O formato deste comando é : . nome_programa

exec
O exec é um dos diversos comandos embutidos do shell. Não é criado nenhum
processo novo para executar o programa porque este está imediatamente disponível ao
shell. O comando exec executa o programa sobrepondo ou, substituindo, o processo
corrente; não retorna ao programa original.
O formato deste comando é : exec nome_programa

3. Criando um Script Shell


Nós vamos restringir nossos estudos a programação shell em Bourn Shell .
A primeira linha de um script shell para a Bourn Shell deve conter um sinal :
(dois pontos) e nada mais. Isto indica que o arquivo é um script shell da Bourn Shell.
Os comentários que não produzem efeito algum na execução, são linhas que
começam com um #. No corpo da script shell pode se colocar diversos comandos que

Introdução ao Linux
Shell do Linux 89

se usa normalmente em uma linha de comando, ou ainda colocar comandos de controle


de fluxo.

3.1. Variáveis de ambiente e de usuários

As Shells admitem manipulação de variáveis como qualquer outra linguagem


de programação. Algumas variáveis são pré-definidas e são chamadas variáveis de
ambiente, outras, as variáveis e usuários , podem ser definidas pelo usuário. O usuário
pode mudar o valor de variáveis de usuários e torná-las somente para leitura ( ready-only
). Normalmente uma variável de usuário só é válida na shell onde foi criada, mas é
possível exportá-la para outras shells que você venha a abrir durante a sua sessão, com o
comando export .

Variáveis de ambiente
O shell fornece variáveis com informações relacionadas ao ambiente do shell
do usuário. Estas variaáveis são estabelecidas inicialmente pelo shell, mas podem ser
alteradas pelo usuário. Os nomes das variáveis de ambiente estão em letra maiúscula.
As variáveis mais utilizadas são :
HOME Nome do caminho do diretório de login
LOGNAME Nome do login do usuário
MAIL Arquivo do correio do usuário ( caixa postal )
PATH Lista dos diretórios procurados durante a execução do comando
PS1 Principal prompt do shell
TERM Nome do terminal

Variáveis de usuário
O nome das variáveis deve ser especificado com as mesmas regras que se usa
em outras linguagens de programação. Depois do nome, sem nenhum espaço em branco,
vem o sinal = e imediatamente em seguida o valor que será atribuído à variável. Para
exibir o valor de uma variável utilize o comando echo e coloque $ antes do nome da
variável.
Exemplo :
$ curso=Linux
$echo $curso
Linux
$echo curso
curso
$

Introdução ao Linux
Shell do Linux 90
Para atribuir valores que contém espaço em branco ou caracteres espeiais a
uma variável, insira o valor entre aspas duplas.
Exemplo :
$ curso=“Introdução ao Linux”
$ echo $curso
Introdução ao Linux
$
O comando export permite que uma variável definida em uma shell fique
disponível nas shells que forem iniciadas a partir da shell onde a variável foi definida. Se
o comando export não for usado, uma variável só estará disponível na shell onde ela foi
criada.
Exemplo :
$ aula=variaveis
$ export aula
$ sh
$ echo $aula
variáveis
Variáveis Shell

São variáveis definidas automaticamente pela shell. Estas variáveis são


argumentos da linha de comando, número de processos, etc. Assim é possível construir
um script shell que receba parâmetros. Ao ser executado o script, os parâmetros que lhe
são passados serão atribuidos às variáveis $1, $2 ...
Exemplo :
$ cat > prog1
:
echo Parametro 1 : $1
echo Parametro 2 : $2
$ prog curso Linux
Parametro 1 : curso
Parametro 2 : Linux
$

4. Programação em Bourne Shell

Introdução ao Linux
Shell do Linux 91

A linguagem de programação shell oferece os seguintes recursos :


• Comentários;
• Comando exit que permite devolver um estado de saída;
• Comandos condicionais if e case;
• Comandos de iteração for, while e until;
• Comandos de desvio incondicional break e continue;

A variável $? : É usada para determinar o estado de saída do último comando


executado. Este estado de saída diz à shell se o comando falhou ou foi executado com
sucesso. Estado de saída igual a zero indica sucesso.
O comando exit : É usado para terminar um script shell e/ou devolver um
estado de saída. Normalmente retorna o estado de saída do último comando executado .
O comando test : Este comando testa determinadas condições, retornando o
resultado sob forma de estado de saída. Se a condição testada é verdadeira o comando
retorna zero, caso contrário, diferente de zero.
Os comandos break / continue : Estes comandos são de desvio incondicional,
e são utilizados no interior dos laços de execução dos comandos for, while e until. O
comando break interrompe o laço de execução e abandona o comando que gerou o laço,
enquanto o comando continue desvia a execução do laço para o inicio dele,fazendo que o
restante dos comandos ( após continue ) não sejam executados. Neste último o comando
que gerou o laço não é abandonado.
Operadores :
! Operador lógico de negação;
-a Operador lógico e ( and ) ;
-o Operador lógico ou ( or );
-zs1 Verdadeiro se a string s1 for de tamanho zero;
-ns1 Verdadeiro se a string s1 tem tamanho diferente de zero;
s1 = s2 Verdadeiro se strings s1 e s2 forem identicas;
s1 != s2 Verdadeiro se strings s1 e s2 forem diferentes;
n1 -eq n2 Verdadeiro se os números n1 e n2 forem identicos;
n1 -ne n2 Verdadeiro se os números n1 e n2 forem diferentes;
n1 -gt n2 Verdadeiro se n1 é maior que n2 ;
n1 -ge n2 Verdadeiro se n1 é maior ou igual a n2 ;
n1 -lt n2 Verdadeiro se n1 é menor que n2 ;
n1 -le n2 Verdadeiro se n1 é menor ou igual a n2 ;
-r arquivo Verdadeiro se arquivo existe e pode ser lido;
- w arquivo Verdadeiro se arquivo existe e pode ser alterado;
- x arquivo Verdadeiro se arquivo existe e pode ser executado;
- f arquivo Verdadeiro se arquivo existe e é um arquivo comum;
- d arquivo Verdadeiro se arquivo existe e é um diretório;

Introdução ao Linux
Shell do Linux 92

- s arquivo Verdadeiro se arquivo existe e não está vazio;

A construção if..then : Este comando estruturado funciona da mesma forma


que em outras linguagens de programação. As declarações if e then devem estar em
linhas diferentes. A decisão é baseada no estado de saída do comando executando entre o
if e o then.
if comando-teste
then
comandos
fi

A construção if..then..else : É identico ao acima, incluindo o tratamento para o


caso de o resultado do comando avaliado retornar estado de saída igual a zero ( o else ).
if comando-teste
then
comandos
else
comandos
fi

A construção if..then..elif : É similar à construção anterior , mas combina as


declarações else if..then em uma só. Útil para tratamento de ifs aninhados.
if comando-teste
then
comandos
elif
comandos-teste
then
comandos
fi

A construção case..esac : Esta construção permite tratar múltiplas escolhas,


selecionando um entre vários padrões e executando os comandos correspondentes. Um
padrão * pode ser usado para tratar qualquer padrão (o mesmo que otherwise em Pascal
ou default em C).
case palavra in
padrão1 )
comandos ;;
padrão2 )
comandos ;;

Introdução ao Linux
Shell do Linux 93

*)
comandos ;;
esac

A construção for..in : Este comando executa um conjunto de comandos uma


vez para cada item de uma lista. Para cada iteração do comando a variável após o for
assume o valor do próximo item da lista. A lista construída é o resultado do comando
após o in.
for variável
in lista-argumentos
do
comandos
done

A construção while..do : Este comando executa iterativamente um conjunto de


comandos, enquanto a condição após while for satisfeita, isto é, se o comando inserido
após while retornar estado de saída verdadeiro.
while comando-teste
do
comandos
done

A construção until..do : Idêntico ao anterior, mas a repetição dos comandos


ocorrerá até que a condição após until seja satisfeita, isto é, a repetição acontece
enquanto a condição for falsa.
until comando -teste
do
comandos
done

Exemplo1 :
:
# COPIA : Copia um arquivo em um diretório
# opção -f é verdadeira se arquivo for um arquivo comum
# opção -d é verdadeira se arquivo for um diretório
#
if [ !-f $1 ]
then
echo “copia : $1 nao e um arquivo comum”
elif [ !-d $2 ]

Introdução ao Linux
Shell do Linux 94

then
echo “copia : $2 nao e um diretorio “
else
cp $1 $2
fi

Exemplo 2 :
:
# EXPLICA : Exibe uma frase que define o uso dos comandos de diretório
#
case $1 in
pwd )
echo “pwd - exibe o diretório corrente”
echo “uso : pwd” ;;
cd )
echo “cd - Troca de diretorio corrente”
echo “uso : cd [ diretório ]” ;;
mkdir )
echo “mkdir - Cria diretórios especificados”
echo “uso : mkdir diretórios” ;;
rmdir )
echo “rmdir - Remove diretórios vazios”
echo “uso : rmdir diretorios” ;;
*)
echo “explica - Explica um comando com uma mensagem”
echo “uso : explica [ comando ]” ;;
esac

Introdução ao Linux
Shell do Linux 95

Exercícios

1 - Crie um arquivo que execute a seguinte sequência de comandos, chamado


meu.programa :
• Retorne para o diretório base;
• Liste todo o conteúdo do diretório corrente e o conteúdo de cada subdiretório;
• Dê a data atual do sistema;
2 - Execute esse arquivo sem criar um novo processo para executá-lo.
3 - Execute o arquivo meu programa, mudando o modo de permissão do arquivo.
4 - Crie uma variável chamada data e atribua a data de hoje. Verifique o seu conteúdo na
shell corrente.
5 - Crie uma nova shell e verifique o conteúdo de data. É o mesmo ? Por que ?
6 - Volte a shell anterior, exporte a variável. Crie uma nova shell e verifique o conteúdo
da variável data. É o mesmo ? Por que ?
7 - Faça um programa ( script shell ) que execute a seguinte sequência :
• Receba os seguintes parâmetros : um diretório, uma letra e um arquivo.
• O programa de entrar no diretório especificado e procurar todos os arquivos que
começam com a letra dada ;
• Deve ainda concatenar ao final desse arquivo o número de arquivos encontrados.
8 - Faça um programa que apague um diretório dado como parâmetro, devem ser
deletados todos os subdiretórios e arquivos contidos no diretório. O programa deve
perguntar ao usuário se ele deseja realmente apagar o diretório.
9 - Faça um programa que receba como parâmetro o nome de uma arquivo e exiba o seu
conteúdo caso ele exista, senão uma mensagem deve ser emitida.
10 - Faça um programa que execute a seguinte sequência :
• Receba o nome de um arquivo como parâmetro.
• Ofereça as opções : [ L ]er carta e [ E ]screver carta.
• Se a opção ler for escolhida o programa deve mostrar o conteúdo do arquivo.
• Se a opção escrever for escolhida o programa deve fornecer um editor de textos, o vi,
por exemplo.

Introdução ao Linux
Ferramentas de Comunicação 96

Capítulo 9
Ferramentas de
Comunicação
1. Visão geral de comunicação
Comunicação é uma troca de informações. A comunicação de dados é a
transmissão de informação eletrônicas a longas distâncias. Um sistema de comunicações é
composto por vários componentes de hardware ( computadores, modens, terminais e
outros periféricos e meios de comunicação ) que estão fisicamente ligados e pelo
software que gerencia a conexão lógica dos componentes de hardware. Os computadores
e terminais geram, processam e recebem dados. Os modens são dispositivos que
convertem os dados digitais gerados pelos computadores para o formato ( analógico )
que pode ser enviado pelas linhas de comunicação.
A transmissão de dados é feita através de uma rede de comunicação. Uma rede
de comunicação é formada por nós e ligações entre os nós. Existem vários tipos de redes
de comunicação: WANs apropriadas para grandes distancias ( entre países ), as MANs
para distâncias médias ( na mesma cidade ) e as LANs para curtas distâncias ( prédio ).
A transmissão de dados é gerenciada pelo software. Um conjunto de regras
comuns deve ser seguido por todos os nós da rede para evitar conflito na transmissão de
dados. Este conjunto de regras é chamado de protocolo. As organizações se
desenvolveram para estabelecer protocolos de comunicação padrão da industria. O OSI (
Open Systems Interconnection ) é o modelo de comunicação padrão da industria dos
protocolos.
Existem basicamente dois tipos de comunicação : local e remota. O LINUX
tem uma variedade de comandos para se comunicar com usuários do sistema local ou de
sistemas remotos.

2. Usando FTP

Introdução ao Linux
Ferramentas de Comunicação 97

FTP ( File Transfer Protocol ) é um metódo para acessar sistemas remotos e


transferir arquivos de um computador para outro. O FTP é um protocolo da família de
protocolos TCP/ IP. O TCP/ IP é usado extensivamente como protocolo de comunicação
da Internet, bem como em muitas redes locais de computadores ( LANs ). Os sistemas
LINUX também usam TCP/ IP como seu protocolo.
O FTP oferece uma interface para o protocolo de transferência de arquivos.
Ele permite que o usuário se conecte a outro site e envie e receba arquivos.

ftp hostname

Um hostname pode ser tanto um hostname como um endereço da Internet.

Exemplo : Conectar a máquina Cruzeiro :


$ ftp Cruzeiro
Conected to Cruzeiro.lcc.ufms.br
220 Cruzeiro FTP server (Version wu-2,4(1) Sun Jul 31 21:15:56 CDT 1994 )
ready
Name ( Cruzeiro:guest ) : guest
331 Password required for guest
Password :
230 User guest logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp >

Depois que o processo de login é completado, você verá o prompt ftp>,


indicando que o sistema está pronto para aceitar comandos.

2.1. “Anonymous” FTP


Geralmente, quando você se conecta a um sistema remoto via ftp, você deve
efetuar um login. Isto significa que você deve ser um usuário válido, com um username e
uma password para essa máquina remota. Como é impossível prever logins para todos que
querem acessar arquivos públicos, muitos sistemas usam anonymous FTP. Ele habilita
usuários a acessarem sites remotos mesmo sem possuir um username autorizado.
Geralmente se usa como username a palavra anonymous e a password, na maioria dos
sistemas, é o seu endereço de e-mail ( em alguns sistemas se usa como password a
palavra guest ).

Introdução ao Linux
Ferramentas de Comunicação 98

2.2. Comandos do FTP


O FTP habilita o usuário para executar vários comandos, aqui estão alguns
deles :

ascii Seta o tipo dos arquivos transferidos para ASCII. Este é o tipo
default.
binary Seta o tipo dos arquivos transferidos para o modo binário.
bye Termina a sessão de FTP com o servidor remoto e depois sai.
cd directory Muda o diretório de trabalho na máquina remota para o diretório
especificado.
chmod mode file Muda o modo de permissão do arquivo remoto file.
close Termina a sessão de FTP com o servidor remoto.
delete file Apaga o arquivo file na máquina remota.
dir [ directory ] Imprime o conteúdo do diretório directory na máquina remota.
disconnect O mesmo que close.
get file [ local_file ] Copia o arquivo remoto file para a máquina local. Se o local_file
não for especificado ele é copiado com o mesmo nome da máquina
remota.
help [ comand ] Imprime informaões sobre o comando especificado. Se nenhum
comando é dado, imprime uma lista dos comandos conhecidos.
ls [ directory ] Lista o conteúdo do diretório remoto directory.
mdelete [ file ] Deleta o arquivo file na máquina remota.
mdir files O mesmo que dir, exceto que múltiplos arquivos remotos podem ser
especificados.
mget files Igual ao get, mas para múltiplos arquivos.
pwd Imprime o nome do diretório de trabalho corrente na máquina
remota.
quit O mesmo que bye.
rmdir directory Deleta um diretório na máquina remota.
size file Retorna o tamanho do arquivo file na máquina remota.
status Mostra o status corrente do FTP.
? [ comand ] O mesmo que help.

Alguns comandos do FTP tem o mesmo nome que comandos do LINUX mas
possuem funções um pouco diferentes. Por exemplo, o comando ls no FTP atua como
um ls -l no LINUX. Para abortar a transferencia de um arquivo, use a tecla de
interrupção CTRL C.

Introdução ao Linux
Ferramentas de Comunicação 99

3. Usando telnet
O comando telnet é usado para a comunicação com outro host usando o
protocolo telnet,ou seja, ele permite abrir uma sessão numa outra máquina . Se telnet é
chamada sem o argumento host, ela entra no modo de comando, indicado por um prompt,
telnet>. Normalmente você pode usar :

telnet hostname [port]

onde hostname é o host que você quer para se conectar e port indica um endereço de
aplicações.
Telnet pode logar você em cada um dos dois modos : caracter-por-caracter ou
linha-por-linha. No modo caracter-por-caracter, a maioria dos textos escritos são
imediatamente enviados pelo host remoto para processamento. No modo linha-por-linha,
todos os textos são ecoados localmente, e somente as linhas completadas são enviadas
pelo host remoto.
Enquanto você estiver conectado a uma outra máquina, você pode entrar no
modo de comando do telnet usando o caracter de scape CTRL ]. No modo de comando
poderão ser usados os seguintes comandos:

close Fecha uma sessão do telnet e retorna ao modo de comando.


open host Abre uma conecção com o host especificado.
quit Fecha a sessão de telnet e sai do telnet.

Exemplos :
1 - Abrindo uma sessão na máquiva Cruzeiro:
$ telnet Cruzeiro
Trying 200.17.52.209...
Connected to Cruzeiro.lcc.ufms.br.
Escape character is ‘^]’.
Linux 1.1.59 (Cruzeiro.lcc.ufms.br) (ttyp0)
Cruzeiro login: guest
Password:
Linux 1.1.59 (POSIX).
$

2 - Usando o Modo de Comando :


$ telnet

Introdução ao Linux
Ferramentas de Comunicação 100

telnet> open Cruzeiro


Trying 200.17.52.209...
Connected to Cruzeiro.lcc.ufms.br.
...

4. Electronic Mail
Eletronic mail (e-mail) é um método para enviar uma mensagem de um usuário
num computador para um ou vários usuários em outros computadores. E-mail provê
transporte rápido e eficiente de dados e documentos. Para alguém com acesso a Internet,
e-mail provê um meio de comunicação com amigos em todo o mundo.
Há diferentes programas que podem ser usados para ler um mail. Os dois
programas mais comuns são: mail e mailx (Berkeley Mail). Há também programas mais
sofisticados como elm ou Pine.

4.1. Usando mailx


Suponha que alguém tenha enviado para você um mail. Como você saberia? O
sistema de mail procede mostrando uma mensagem quando você loga :
...
Linux 1.1.59 (POSIX)
You have new mail.
$

Para ler a mensagem digite o comando mail no prompt :


$ mail
Mail version 5.5 6/1/90. Type ? for help.
“var/spool/mail/guest” : 2 messages 2 new
>N 1 guest@Corinthians Thu Sep 15 02:23 131/4311 “Testando mail “
>N 2 guest@Cruzeiro Thu Sep 15 02:23 65/2748 “Aula de Linux “
&

Neste exemplo, guest recebeu duas mensagens. As mensagens tem um >N


indicando que são mensagens novas, seguidas do número da mensagem, o endereço do
remetente, o dia do mês, a data e a hora que a mensagem foi enviada e o assunto da
mensagem.
O símbolo & é o prompt do sistema de mail. Você pode ler as mensagens
digitando o número da mensagem neste prompt.

Introdução ao Linux
Ferramentas de Comunicação 101

&1
Message 1 :
From guest@Corinthians Thu Sep 15 02:23 1995
...
&

Para ver os comandos que podem ser usados no sistem de mail, digite ? no
prompt. Para sair do sistema de mail digite q no prompt.

Para enviar uma mensagem use o comando mail seguido do endereço eletronico :
$ mail guest@Cruzeiro
Subject : Teste
Testando mail ...

Para terminar o conteúdo da mensagem use CTRL D. A sequinte mensagem


aparece :
Use “.” to terminate letter
.
EOT
$

Introdução ao Linux
Ferramentas de Comunicação 102

Exercícios

1 - Usando FTP conecte-se a máquina de um colega e copie para a sua o arquivo


musica.preferida.
2 - Envie um mail para um colega. Não esqueça de colocar o assunto da mensagem.
3 - Abra uma sessão em outra máquina, usando telnet, e liste todo o conteúdo do
diretório base da outra máquina. Crie um arquivo chamado ola e escreva : Estive aqui <
nome da sua máquina. Encerre a sessão.

Introdução ao Linux