You are on page 1of 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 ............................................. Introdução ........................................................ Iniciando .......................................................... Arquivos e Diretórios ....................................... O Editor vi ....................................................... Segurança ......................................................... Redirecionamento ............................................ Gerenciamento da execução de comandos ...... Shell do Linux .................................................. Ferramentas de Comunicação ......................... 3 12 18 29 50 59 67 74 83 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, convencionouse 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 1 byte 1 kilobyte 1 megabyte Medida 8 bits 1024 B 1024 KB Abreviação B KB MB

Introdução ao Linux

Conceitos Básicos
1 gigabyte 1 terabyte Software (Programas) 1024 MB 1024 GB GB TB

7

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 80386 80386 80486 80486 80486 Pentium Capacidade 32 bits 32 bits 32 bits 32 bits 32 bits 64 bits Modelo SX DX DX DX2 DX4 -Clock 33 Mhz 50 Mhz 55 Mhz 66 Mhz 75 Mhz 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 date cal <ano> who clear - exibe lista do conteúdo do diretório corrente - exibe a data e hora do sistema - exibe calendário do ano especificado - exibe lista de todos os usuários ativos no sistema - limpa a tela

Exemplos de comandos interativos: passwd ftp mail - modifica a senha - permite transferência de arquivos - 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 subdiretó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 : $ls curso/ $ Use o comando ls para mostrar o conteúdo do diretório corrente

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
diretório. Exemplos : 1 - Use o comando ls para listar o conteúdo do diretório corrente : $ls . curso/ teste.txt $

26

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

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
eles podem exatamente.

29

Esses caracteres especiais poupam tempo de digitação. O mais importante é que ser usados para fazer referência a arquivos cujo nome não se conhece

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 drwxr-xr-x 3 $ls -l curso total 1 drwxr-xr-x 2 $ 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; guest users 1024 May 15 21:27 guest users 1024 May 15 21:33 teste/ curso/

guest users 1024 May 15 21:33

aula1/

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 -a -C -F -p -d Lista todos os itens do diretório, inclusive os que começam com ponto, exceto os itens . e .. não são listados; Lista todos os itens, inclusive os que começam com pontos; Listagem em várias colunas, em ordem alfabética; Coloca uma / após itens que são diretórios e um * após itens que são arquivos executáveis; Coloca uma / após itens que são diretórios; 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
-l -m vírgula; -R -r reversa; -s -t -u -c -x Mostra o tamanho em blocos de cada item; Lista o conteúdo de um item que é diretório;

34

Formata a saída como texto corrido, os itens são separados por Lista todos os diretórios encontrados e seus subdiretórios; Lista em ordem alfabética reversa, ou em ordem de hora/data

Ordena os itens por hora/data de modificação; Usada em conjunto com -t para ordenar pela hora/data do último acesso, ao invés de pela última modificação; Usada em conjunto com -t para ordenar pela hora/data da última modificação do item na tabela de arquivos do Sistema de Arquivos; 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/ $ 3 - Liste o conteúdo do diretório corrente e seus subdiretórios : $ls -R curso/ curso : teste/ 1 teste/

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 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; Atualiza a hora/data de acesso dos arquivos para a hora/data

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
Opções: -s -v -t -e

38

Suprime mensagens de erro que normalmente aparecem quando tenta-se utilizar o cat em um arquivo inexistente; Mostra os caracteres de controle, utilizando o formato ^X, onde X é uma letra; Mostra as tabulações em um arquivo como ^I. Deve ser usada em conjunto com a opção -v; 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
Opções:

39

-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); Limpa a tela antes de exibir a próxima tela; -c -e -f -n +linha Elimina a pausa que normalmente ocorre entre exibição de dois arquivos; Impede divisão de linhas (quebra de linhas) longas na tela; Elimina a necessidade de digitar ENTER após cada comando interno dado ao pg; 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
mv : replace ‘teste/file.teste ‘ ? y $ ls teste file.teste $ 2- Troque o nome do arquivo teste.file par a copia : $ mv teste.arquivo copia $ls curso/ $ novo copia teste/ nota1/

41

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
$ 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

42

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
-i -r prompt para que se confirme a remoção. Remove recursivamente o diretório citado e seus subdiretórios.

43

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

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 -n Começa a impressão na página n ao invés de na página 1; 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; Usa espaço duplo na exibição;

-d

Introdução ao Linux

Arquivos e Diretórios
-ecn

44

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

-ncn

numérico c deve preceder o caracter numérico n; 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

-wn -on -ln

separador será uma tabulação; Ajusta o tamanho das linhas para n caracteres. Útil quando se imprime em várias colunas; Desloca (identando) as linhas com n caracteres; 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 -p especificado entre aspas; 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
O comando lp solicita e cancela serviços de impressão em impressoras.

45

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 -m Para utilizar comandos especiais de manipulação; 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úmer o(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
-P

46

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 -ttítulo -w

Suprime mensagens resultantes do comando lp; Imprime título na página de capa; 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 -r -t Exibe o destino (impressora) padrão do sistema; Exibe o estado do gerenciador de solicitações de lp; 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; Imprime o caminho de qualquer arquivo encontrado, isto é, que -print 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 (exp) que está sendo avaliado; Um ponto e virgula marcado encerra a ação; 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; 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;

-o

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
$ 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 {} \; $

49

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 -n Ignora maiúsculas ou minúsculas; 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
-l -v várias ocorrências da sequência de caracteres) ; Mostra todas as linhas que não contém a sequência de caracteres;

50

Mostra apenas uma vez o nome do arquivo (para arquivos que contêm

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 file Não diferencia maiúsculas de minúsculas Ordem numérica Salva o outpute no arquivo citado

Introdução ao Linux

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

51

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
- 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.

52

5- Apague o arquivo minha.musica de seu de seu diretório base. 6- C r i e n subdir3 uma ligação para o arquivo minha.musica, que está no subdir1, o 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
vi <nome -arquivo>

55

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). (append) Inclui texto após o cursor; a A i I o O (append) Inclui o texto ao final da linha corrente, não importando em que posição o cursor está na linha; (insert) Insere texto antes do cursor; (insert) Insere o texto no início da linha corrente, não importando em que posição o cursor está na linha; (open) Abre uma nova linha abaixo da linha corrente e coloca o cursor no início desta nova linha; (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): Equivale à seta →; De fato faz o mesmo que a barra de espaços, e no l h modo escape serve para avançar adiante na linha; Equivale à seta ←; De fato faz o mesmo que backspace, e no modo

escape serve para retornar na linha; Para mover o cursor para a linha de baixo. Equivale à seta ↓ ; j Para mover o cursor para a linha de cima. Equivale à seta ↑ ; k 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
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;

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

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 permissões

octal

do

modo

de

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 1 2 3 4 5 6 7 Nenhum acesso Apenas execução Apenas gravação Gravação e execução Apenas leitura Leitura e execução Leitura e gravação 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 permissões

simbólico

do

modo

de

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 ) Grupo g o a Outros 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 Leitura r w Gravação Execução x 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
ler o

66 2- Mude as permissões do arquivo prog2 para que todos os usuários possam 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 Novas permissões Arquivos: Permissão padrão Valor em umask 023 754 666 022 (rwxr -xr--) (rw-rw-rw-)

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 superusuário poderá fazer isso. Exemplo : Mude o grupo do arquivo memo1 para users2 : $ ls -l memo1 -rw-r--r-1 guest users $ chgrp users2 memo1 $ ls -l memo1 -rw-r--r-1 $ guest 984 May 12 11:02 memo1

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: Que modifica a identificação de grupo associada a um arquivo ou chgrp 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 ) $ newgrp users2 GID=100( users ) GROUPS=100( users )

Introdução ao Linux

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

69

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
comando < arquivo

73

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 $ 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 guest $ tty1 May 20 WST 1996 08:52 WST 1996

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 -i -u Faz a saída ser anexada aos arquivos especificados, em vez de substituir seus conteúdos; Ignora o sinal de interrupção; 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 1 Entrada padrão; Saída padrão;

Introdução ao Linux

Redirecionamento
2 Saída de erro padrão;

76

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 Maria, Ricardo Silva, Joao Souza, Thiago students2 Freitas, Pedro Garcia, Maria 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
os Exemplo : Procure a partir da raiz, todos os arquivos com extensão .c, desvie 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 -f -l -e -u usr -t term Mostra informações sobre processos pertencentes a outros usuários; Gera uma lista com oito colunas de informações; Exibe uma lista com 15 colunas de informações; Enumera informações correntemente; sobre cada processo em execução

Exibe informações de processos do usuário indicado; Exibe informações de processos para o terminal especificado;

Cabeçalhos da Coluna: F S Valor em octal que dá maiores informações sobre a situação corrente do processo; 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; UID PID PPID C PRI NI ADDR B - Esperando (blocked); Identificação do usuário proprietário do processo; Identificação do processo; Identificação do processo pai; Taxa de utilização do processador (CPU); Prioridade do processo (valores mais altos indicam prioridades mais baixas); Valor utilizado na computação da prioridade. Pode ser atribuído pelo usuário, através do comando nice; Endereço da memória do processo;

Tamanho do processo (em páginas ou blocos) na memória; SZ 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; Terminal controlador; TTY TIME Tempo de execução cumulativo do processo; Nome do comando e argumentos associados ao processo; CMD

Exemplos : 1- Mostre o status dos processos : $ ps PID 152 225 $ 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 TTY v01 v01 STAT S R TIME 0:00 0:00 COMMAND -bash 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 -sinal Enumera os nomes dos sinais; O sinal pode ser especificado com o nome simbólico ou valor numérico;

Exemplo : $ ps PID TTY 152 230 v01 v01

STAT S R S

TIME 0:00 0:00 0:00

COMMAND -bash ps sleep 30

231 v01 $ kill 231 $ ps PID 152 230 TTY v01 v01

STAT S R

TIME 0:00 0:00

COMMAND -bash 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 : Lista completa de todos os jobs incluindo PDIs -l Exibe somente PDIs associados com jobs em -p execução. fg id_job <^z> bg id_job stop id_job kill id_job Coloca o job em foreground Suspende job em foreground Coloca o job indicado em background Suspende o job indicado em background 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
de fluxo.

89

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

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 PS1 TERM Lista dos diretórios procurados durante a execução do comando Principal prompt do shell 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
uma variável, insira o valor entre aspas duplas. Exemplo : $ curso=“Introdução ao Linux” $ echo $curso Introdução ao Linux $

90

Para atribuir valores que contém espaço em branco ou caracteres espeiais a

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
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;

91

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; ! Operador lógico e ( and ) ; -a Operador lógico ou ( or ); -o -zs1 -ns1 s1 = s2 s1 != s2 n1 -eq n2 n1 -ne n2 n1 -gt n2 n1 -ge n2 n1 -lt n2 n1 -le n2 -r arquivo - w arquivo - x arquivo - f arquivo - d arquivo Verdadeiro se a string s1 for de tamanho zero; Verdadeiro se a string s1 tem tamanho diferente de zero; Verdadeiro se strings s1 e s2 forem identicas; Verdadeiro se strings s1 e s2 forem diferentes; Verdadeiro se os números n1 e n2 forem identicos; Verdadeiro se os números n1 e n2 forem diferentes; Verdadeiro se n1 é maior que n2 ; Verdadeiro se n1 é maior ou igual a n2 ; Verdadeiro se n1 é menor que n2 ; Verdadeiro se n1 é menor ou igual a n2 ; Verdadeiro se arquivo existe e pode ser lido; Verdadeiro se arquivo existe e pode ser alterado; Verdadeiro se arquivo existe e pode ser executado; Verdadeiro se arquivo existe e é um arquivo comum; Verdadeiro se arquivo existe e é um diretório;

Introdução ao Linux

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

92

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
*) comandos ;; esac

93

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
then echo “copia : $2 nao e um diretorio “ else cp $1 $2 fi

94

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 binary bye cd directory chmod mode file close delete file dir [ directory ] Seta o tipo dos arquivos transferidos para ASCII. Este é o tipo default. Seta o tipo dos arquivos transferidos para o modo binário. Termina a sessão de FTP com o servidor remoto e depois sai. Muda o diretório de trabalho na máquina remota para o diretório especificado. Muda o modo de permissão do arquivo remoto file. Termina a sessão de FTP com o servidor remoto. Apaga o arquivo file na máquina remota. Imprime o conteúdo do diretório directory na máquina remota.

O mesmo que close. disconnect 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 ] ls [ directory ] mdelete [ file ] mdir files mget files pwd quit rmdir directory size file status ? [ comand ] Imprime informaões sobre o comando especificado. Se nenhum comando é dado, imprime uma lista dos comandos conhecidos. Lista o conteúdo do diretório remoto directory. Deleta o arquivo file na máquina remota. O mesmo que dir, exceto que múltiplos arquivos remotos podem ser especificados. Igual ao get, mas para múltiplos arquivos. Imprime o nome do diretório de trabalho corrente na máquina remota. O mesmo que bye. Deleta um diretório na máquina remota. Retorna o tamanho do arquivo file na máquina remota. Mostra o status corrente do FTP. 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 open host quit Fecha uma sessão do telnet e retorna ao modo de comando. Abre uma conecção com o host especificado. 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
telnet> open Cruzeiro Trying 200.17.52.209... Connected to Cruzeiro.lcc.ufms.br. ...

100

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
&1 Message 1 : From guest@Corinthians Thu Sep 15 02:23 1995 ... &

101

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