Professional Documents
Culture Documents
Prefcio
O Programa de Educao Tutorial (PET) possui como objetivo maior realizar atividades de pesquisa, ensino e extenso de forma no dissociada, isto , desenvolver projetos que integrem em si estes trs aspectos. Neste contexto, o grupo PET-Tele desenvolve diversas apostilas, no como um m em si mesmas, mas como forma de realizar tambm outras atividades. O desenvolvimento dessas apostilas iniciado com um trabalho de pesquisa sobre o tema escolhido. Aps este perodo inicial, produz-se material didtico sobre o assunto, visando transmitir o conhecimento adquirido para os alunos do curso de graduao e outros interessados. Eventualmente, quando ocorre alguma solicitao, os alunos do grupo fornecem cursos sobre os assuntos abordados na apostila. At o momento, as seguintes apostilas esto disponveis no site do PET:
LaTeX Sistema de edio de texto largamente utilizado em meios acadmicos e cientcos, bem como
por algumas editoras nacionais e internacionais. o shell.
LINUX e Script-Shell Introduo ao sistema operacional GNU/Linux e programao em utilizando MATLAB Ambiente de simulao matemtica, utilizado em diversas reas prossionais. SPICE Ambiente de simulao de circuitos eltricos (analgicos e digitais), utilizado em projeto de
circuitos discretos e integrados.
A segunda contm os aspectos bsicos do Linux, assim como os principais comandos utilizados para realizar tarefas no Linux. A ltima parte da apostila envolve os principais conceitos de programao utilizando o shell do Linux. O principal motivo da abordagem desses 3 temas em uma nica apostila foi o de levar o usurio iniciante a ter uma viso mais ampla do funcionamento de um sistema operacional quando um comando digitado na tela de um terminal ou quando executado um script. No se pretende com este manual apresentar todos os comandos do Linux e suas aplicaes mais usadas. Cada usurio usar mais um conjunto de comandos do que outros dependendo de seus objetivos. Existem comandos especcos para redes, para manipulao de arquivos, para congurao de dispositivos, etc. Um livro seria pouco para esgotar todas as facilidades e funes que o Linux oferece. Espera-se que com essa apostila o usurio iniciante conhea o bsico do Linux de forma clara e o usurio mais experiente a use como referncia. Quanto ao aspecto de programao, vale lembrar que um usurio no se tornar um grande programador apenas lendo uma apostila ou um livro. preciso prtica, fazer programas, testar funes, estudar programas prontos para entender seu funcionamento, etc. Uma grande vantagem do Linux que suas distribuies vm com os scripts abertos, para que o usurio possa ler, entender e adaptar s suas necessidades, podendo at mesmo fazer uma nova distribuio com base na outra. Bastando para isso, vontade de aprender e curiosidade. As man pages do Unix e dos interpretadores de comandos como o bash possuem tudo o que for necessrio para entender os comandos de uma forma mais completa. No m da apostila, se encontra um guia de sites, livros e apostilas usados como base para a construo desta. E outras referncias importantes contendo um amplo e importante contedo para o leitor usar am de aprimorar seu conhecimento no Linux e programao utilizando o shell.
ii
TELE))) PET
Sumrio
Prefcio 1 Conceitos Gerais
1.1 Introduo ao Hardware . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Resoluo de problemas X Mapeamento de domnios . . . 1.1.2 Funes lgicas e aritmticas bsicas . . . . . . . . . . . . 1.1.3 Implementao de funes matemticas por circuitos . . . 1.1.4 Computador X Mquina de nveis . . . . . . . . . . . . . . Introduo ao software . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Computador X Sistema Operacional . . . . . . . . . . . . 1.2.2 Interface de comunicao com o Sistema Operacional (SO) 1.2.3 Interpretador de comandos (shell ) de um SO . . . . . . . . Famlia UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Sistemas UNIX . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Interfaces do UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i 2
2 2 2 3 3 4 4 5 5 5 5 7
1.2
1.3
2 Introduo ao Linux
2.1
2.2
2.3
Aspectos bsicos do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 Startup e shutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.2 Abertura de seo no Linux . . . . . . . . . . . . . . . . . . . . . . 2.1.3 Usurio, superusurio (root ), grupos, acesso, proteo . . . . . . . . 2.1.4 Sesso, login, password, logout . . . . . . . . . . . . . . . . . . . . . 2.1.5 Consoles virtuais . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sistema de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2.1 Sistema hierrquico, rvore de diretrios, montagem de ramicaes 2.2.2 Tipos bsicos de arquivos: plain les, directory . . . . . . . . . . . 2.2.3 Permisses para acesso a arquivos . . . . . . . . . . . . . . . . . . . 2.2.4 Diretrios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Processos e subprocessos . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Controle de processos . . . . . . . . . . . . . . . . . . . . . . . . . . Comandos de ajuda . . . . . . . . . . . . . . . Comandos e utilitrios bsicos . . . . . . . . . 3.2.1 Comandos de manipulao de arquivos 3.2.2 Redirecionamento de entrada e sada . iii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10 10 10 10 11 11 11 11 12 12 14 15 15 16
3 Comandos
3.1 3.2
18
18 19 19 34
Sumrio
3.3 4.1 4.2 4.3 4.4 4.5 4.6 4.7 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 6.1 6.2 6.3 6.4 6.5 6.6 7.1 7.2 7.3
Sumrio
Expresses Regulares e Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . Aspectos bsicos . . . . . . . . . . . . . . 4.1.1 Script e Script Shell . . . . . . . . Execuo do programa . . . . . . . . . . . 4.2.1 Erros na execuo . . . . . . . . . . 4.2.2 Quoting . . . . . . . . . . . . . . . Comentrios . . . . . . . . . . . . . . . . . Impresso na tela . . . . . . . . . . . . . Passagem de parmetros e argumentos . . 4.5.1 Leitura de parmetros . . . . . . . Funes . . . . . . . . . . . . . . . . . . . 4.6.1 Execuo de script por outro script Depurao . . . . . . . . . . . . . . . . . . Palavras Reservadas . . Criao de uma varivel Deleo de uma varivel Visualizao de variveis Proteo de uma varivel Substituio de variveis Variveis em vetores . . Variveis do sistema . . Cdigo de retorno . . . . Avaliao das expresses Operadores booleanos . . Testes Numricos . . . . 6.4.1 O Comando let Testes de Strings . . . . Testes de arquivos . . . . Deciso simples . . . . . Deciso mltipla . . . . 7.2.1 O comando case Controle de loop . . . . . 7.3.1 While . . . . . . 7.3.2 Until . . . . . . . 7.3.3 For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
46
46 46 47 48 48 49 50 51 53 55 57 59 60 60 62 62 62 62 63 63 66 66 67 67 68 69 71 72 73 73 74 74 75 75 78
5 Manipulao de variveis
60
66
7 Controle de uxo
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
72
78
iv
TELE))) PET
Sumrio
Sumrio
B Editor de textos vi B.1 Comandos internos - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . B.2 Comandos da ltima linha - vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . Referncias Bibliogrcas
80
80 81 82
TELE))) PET
Nvel 0 - o hardware da mquina. Consiste nas portas lgicas formando os circuitos. Nvel 1 - o nvel onde esto os microprogramas. o verdadeiro nvel de linguagem de mquina. Esses microprogramas interpretam as instrues do nvel 2, para o nvel 0 executar.
1 Entende-se
TELE))) PET
Nvel 2 - Nvel de mquina convencional. Contm o conjunto de instrues que sero interpretados pelo microprograma. Nvel 3 - um nvel hbrido pois possui instrues do nvel 2 e outras caractersticas novas. chamado de sistema operacional. Nvel 4 - Nvel de montagem. Nvel 5 - Contm as linguagens usadas pelos programadores para resolver programas. Nvel 6 - Consiste nos programas feitos para trabalhar em determinada aplicao. Ex: editores de texto, simuladores matemticos, eltricos, etc.
Programas de sistema - Gerenciam a operao do computador. O mais importante destes o Sistema Operacional. Programas de aplicao - So aqueles que o usurio trabalha usualmente para resolver determinados problemas como editores de imagem, texto, jogos, etc.
TELE))) PET
Interativa: os comandos so digitados no prompt de comando e passados ao interpretador de comandos um a um. Neste modo, o computador depende do usurio para executar uma tarefa ou prximo comando.
No-interativa: so usados arquivos de comandos criados pelo usurio (scripts ) para o computador
executar os comandos na ordem encontrada no arquivo. Neste modo, o computador executa os comandos do arquivo um por um e dependendo do trmino do comando, o script pode checar qual ser o prximo comando a ser executado. O captulo 4 descreve a construo de scripts.
Histrico do UNIX
Abaixo temos um cronograma da criao do UNIX:
Dcadas de 40 e 50:
Todos os computadores eram pessoais quanto a forma de utilizao. O usurio reservava um horrio para utiliz-lo.
Dcada de 60:
Atravs dos sistemas Batch , o usurio enviava ao centro de processamento de dados um job em cartes perfurados para que esse fosse processado pelo computador. Aproximadamente uma
Universidade Federal Fluminense
TELE))) PET
hora depois da submisso, o usurio podia buscar os resultados de seu programa. Porm, se houvesse algum erro no programa escrito, o usurio s saberia horas depois, perdendo seu tempo. Para resolver esse problema, foi criado um sistema de compartilhamento de tempo, o CTSS, no MIT, onde cada usurio tinha um terminal on-line sua disposio. Aps o CTSS, os Laboratrios Bell com o MIT e a General Eletric comearam um programa grandioso de criar um novo sistema operacional que suportasse centenas de usurios simultaneamente em regime de compartilhamento de tempo (timesharing ). Tal sistema foi denominado MULTICS (MULTiplexed Information and Computing Service), que seria multi-usurio, multitarefa e teria um sistema de arquivos hierrquico.
Dcada de 70:
A AT&T, controladora da Bell Labs, insatisfeita com o progresso do MULTICS cortou o projeto e alguns programadores da Bell que trabalharam no projeto, como Ken Thompson, implementaram a verso monousurio do MULTICS em linguagem de montagem em um minicomputador, o PDP-7. Brian Kernighan, outro programador da Bell, deu o nome do novo sistema de UNICS como deboche ao nome do sistema anterior. Mais tarde o nome foi mudado para o conhecido UNIX. Em seguinda, o UNIX foi escrito para mquinas do tipo PDP-11. E como era necessrio reescrever o sistema toda vez que ele fosse transportado para outra mquina, Thompson reescreveu o UNIX em uma linguagem de alto nvel desenvolvida por ele, a Linguagem B. Para corrigir algumas imperfeies, Denni Ritchie, que tambm trabalhava na Bell Labs, desenvolveu a Linguagem C. Juntos, em 1973, eles reescreveram o UNIX em C. Dessa forma, foi garantida a portabilidade. Em 1974, Thompson e Ritchie publicaram um artigo sobre o novo sistema operacional UNIX, o que gerou um grande entusiasmo no meio acadmico. Como a AT&T era um monoplio controlado atuante na rea das telecomunicaes, no foi permitida sua entrada no ramo da computao. Assim, a Bell Labs no colocou objees para licenciar o UNIX para as universidades e empresas. Em 1977 existiam cerca de 500 computadores com UNIX no mundo todo. Pelo fato do UNIX ser fornecido com seu cdigo fonte completo, muitas pessoas passaram a estud-lo e organizar seminrios para trocas de informaes, visando a eliminao de Bugs e incluso de melhoramentos. A primeira verso padro do UNIX foi denominda Verso 6 pois estava descrita na sexta edio do Manual do Programador UNIX.
Dcada de 80:
Com a diviso da AT&T em vrias companhias independentes, imposta pelo gorverno americano em 1984, foi possvel a criao de uma subsidiria dela no ramo da computao. Ento foi lanado pela AT&T a primeira verso comercial do UNIX, o System III, seguida pelo System V , sendo que cada verso era maior e mais complicada que a antecessora. Auxiliada pela DARPA (Defense Advanced Research Projects Agency ), a Universidade de Berkeley passou a distribuir uma verso melhorada da Verso 6, chamada 1BSD (First Berkeley Software Distribution ), seguida pela 2BSD, 3BSD e 4BSD. Esta ltima possuindo muitos melhoramentos, sendo o principal, o uso de memria virtual e da paginao, permitindo que programas
TELE))) PET
fossem maiores que a memria fsica. Tambm, a ligao de mquinas UNIX em rede, desenvolvida em Berkeley, fez com que o padro de rede BSD, o TCP/IP, se tornasse padro universal. Essas modicaes zeram com que fabricantes de computadores, como a Sun Microsystems e a DEC, baseassem suas verses no UNIX de Berkeley. Em 1984 j existiam cerca de 100.000 computadores com UNIX rodando em diferentes plataformas. No nal da dcada, estavam circulando duas verses diferentes e incompatveis, a 4.3BSD e o System V Release 3. Isso tornou praticamente impossvel aos fornecedores de software ter a certeza de que seus programas pudessem rodar em qualquer sistema UNIX. Ento, o Comit de Padronizao do IEEE fez a primeira tentativa de unicao dos dois padres. O nome escolhido do projeto foi POSIX (Portable Operating System). Foi criado aps grandes discusses o padro denominado 1003.1, contendo a interseo das caractersticas tanto da 4.3 BSD quanto do System V. Porm, um consrcio, denominado OSF (Open Software Foundation ), foi formado principalmente pela IBM (que comercializava o sistema AIX ), DEC, Hewlett-Packard com o intuito de formar um sistema de acordo com o padro 1003.1, alm de caractersticas adicionais. Em reao, em 1988 a AT&T e Sun se unem no consrcio UI (UNIX International) para desenvolver Solaris e UNIXWare. Com isso, passaram a existir, novamente, verses diferentes oferecidas pelos consrcios, tendo como caracterstica comum o fato de serem grandes e complexas, contrariando a idia principal do UNIX Uma tentativa de fuga desses sistemas foi a criao de uma nova verso UNIX-like mais simples e menor, o sistema do tipo MINIX.
Interface de chamadas de sistema; Interface de biblioteca de procedimentos; Interface formada pelo conjunto de programas utilitrios, considerada erroneamente por alguns usurios como sendo a verdadeira interface do UNIX.
TELE))) PET
Portabilidade
Linux hoje um dos kernels de sistema operacional mais portados, rodando em sistemas desde o iPaq (um computador porttil) at o IBM S/390 (um massivo e altamente custoso mainframe), embora este tipo de portabilidade no fosse um dos objetivos principais de Linus Torvalds. Seu esforo era tornar seu sistema porttil no sentido de ter habilidade de facilmente compilar aplicativos de uma variedade de fontes no seu sistema. Portanto, o Linux originalmente se tornou popular em parte devido ao esforo para que as fontes GPL ou outras favoritas de todos rodassem no Linux.
Distribuies
O sistema operacional completo (GNU/Linux) considerado uma Distribuio Linux. uma coleo de softwares livres (e s vezes no-livres) criados por indivduos, grupos e organizaes ao redor do mundo, e tendo o kernel como seu ncleo. Atualmente, companhias como a Red Hat, a SuSE,a MandrakeSoft ou a Conectiva, bem como projetos de comunidades com a Debian ou a Gentoo, compilam o software e fornecem um sistema completo, pronto para instalao e uso. Alm disso, h projetos pessoais como o de Patrick Volkerding que fornece uma distribuio Linux, a Slackware e Carlos E. Morinoto que lanou a distribuio chamada Kurumin. Est ltima roda em CD, bastando as conguraes do computador aceitarem o boot pelo drive do CD. 8
Logo que Linus Torvalds passou a disponibilizar o Linux, ele apenas disponibilizava o Kernel com alguns comandos bsicos. O prprio usurio devia arrumar os outros programas, compil-los e congurlos. Para evitar esse trabalho, comeou ento a disponibilizao de programas pr-compilados para o usurio apenas instalar. Foi assim que surgiu a MCC (Manchester Computer Centre), a primeira distribuio Linux, feita pela Universidade de Manchester. Algumas distribuies so maiores, outras menores, dependendo do nmero de aplicativos e sua nalidade. Algumas distribuies de tamanhos menores cabem em um disquete com 1,44 MB, outras precisam de vrios CDs. Todas elas tem seu pblico e sua nalidade, as pequenas (que ocupam poucos disquetes) so usadas para recuperao de sistemas danicados ou em monitoramentos de redes de computadores. O que faz a diferena como esto organizados e pr-congurados os aplicativos.
Startup e shutdown
Correspondem respectivamente aos procedimentos de ligar e desligar o computador. O primeiro diz respeito basicamente ao fornecimento de energia para o funcionamento dos circuitos eletrnicos da mquina e no requer do usurio grandes precaues. Por outro lado o processo de Shutdown requer cuidado, uma vez que o desligamento inadequado do computador pode causar danos ao sistema operacional destruindo as tabelas internas de que ele necessita para funcionar. Quando o computador "trava", portanto, deslig-lo deve ser a ltima escolha. Uma opo iniciar outra sesso, vericar onde est o problema e encerrar a sesso travada com um comando apropriado.
Usurio : a pessoa que criou o arquivo. O dono do arquivo. Grupo : uma categoria que rene vrios usurios. Cada usurio pode fazer parte de um ou mais
grupos, que permitem acesso a arquivos que pertencem ao grupo correspondente. Por padro, o grupo de usurios inicial o mesmo de seu nome de usurio. A identicao do grupo chamada de gid (group id ).
TELE))) PET
As permisses de acesso para donos, grupos e outros usurios so independentes uma das outras, permitindo assim um nvel de acesso diferenciado. A conta root tambm chamada de super usurio. Este um login que no possui restries de segurana. A conta root somente deve ser usada para fazer a administrao do sistema. Utilize a conta de usurio normal ao invs da conta root para operar seu sistema. Uma razo para evitar usar privilgios root devido facilidade de se cometer danos irreparveis ao sistema.
10
TELE))) PET
Arquivos comuns: Usados para armazenar dados. Os usurios podem acrescentar dados diretamente em arquivos comuns, como, por exemplo, atravs de um editor. Os programas executveis tambm so guardados como arquivos comuns. Arquivos de diretrio: Um arquivo de diretrio contm uma lista de arquivos. Cada insero na lista consiste em duas partes: o nome do arquivo e um ponteiro para o arquivo real em disco. Por outro lado, os diretrios se comportam exatamente como arquivos comuns, exceto pelo fato de que alguns comandos usados para manipulao de arquivos comuns no funcionarem para arquivos de diretrio. Arquivos especiais: Estes arquivos so usados para fazer referncia a dispositivos fsicos como os terminais, as impressoras, os discos. Eles so lidos e gravados como arquivos comuns, mas tais associaes causam a ativao do dispositivo fsico ligado a ele.
O Linux case sensitive, ou seja, ele diferencia letras maisculas e minsculas nos arquivos. O diretrio, como qualquer outro arquivo, tambm case sensitive. Em um mesmo diretrio, no podem existir dois arquivos com o mesmo nome ou um arquivo com mesmo nome de um subdiretrio. Os diretrios no Linux so especicados por uma "/". OBS: Estamos habituados a ver os nomes de arquivos como sendo: nome.ext, onde ext a extenso do tipo de arquivo, por exemplo .txt, .html, .doc. Porm, no Linux os nomes no precisam seguir essa regra. Os nomes podem podem ser formados por vrias extenses, como: lista.ord.txt, nomes.maius.classe, livros.meu.ord.txt. O Linux organiza seu lesystem atravs de inodes. Inodes so estruturas de dados em disco que descrevem e armazenam os atributos do arquivo, incluindo sua localizao. Campos de um inode : user, group, tipo do arquivo, tempo de criao, acesso, modo (modicao), nmero de links, tamanho e endereo no disco. Existem mecanismos que permitem que vrios lenames reram-se a um nico arquivo no disco. Esses mecanismos so os links. Existem dois tipos de links : hard link (ou simblico) ou soft link.
hard link : associa dois ou mais lenames como mesmo inode. Os hard links compartilham o mesmo bloco de dados embora funcionando como entradas de diretrio independentes. soft link : estes so pointers les que apontam para outro lename no lesystem.
11
TELE))) PET
para isso. Porm esse usurio no pode restringir ou permitir o acesso ao arquivo. Os usurios que no so nem proprietrios nem pertenam a um grupo que tenha acesso ao arquivo formam a ltima categoria, conhecida simplesmente como "outros".
Proprietrio (designado por u, de user ): quem criou o arquivo. Grupo (designado por g, de group ): o grupo formado por um ou mais usurios que podem ter acesso ao arquivo. Outros (designado por o, de others ): refere-se a qualquer outro usurio do sistema.
O sistema Unix permite ainda trs modos de acesso aos arquivos: leitura, escrita e execuo. Os trs modos de acesso so relativamente lgicos, porm o signicado desses trs modos de acesso diferente para arquivos de diretrios. O usurio com permisso de leitura pode ler o contedo do diretrio, por exemplo com o comando "ls". O usurio com permisso de escrita pode usar alguns programas privilegiados para gravar em um diretrio. A permisso de gravao necessria para criar ou remover arquivos do diretrio. Um usurio deve ter permisso de execuo em um diretrio para ter acesso aos arquivos ali alocados. Se um usurio tem permisso para leitura e escrita em um arquivo comum que est listado em um diretrio mas no tem permisso de execuo para aquele diretrio, o sistema no o deixa ler nem gravar o contedo daquele arquivo comum. Assim temos:
Figura 2.1: Permisses de Arquivos Um arquivo que tiver suas permisses como as do exemplo acima poderia ser lido, escrito ou executado pelo dono ou por qualquer outra pessoa. J no exemplo abaixo, o dono poder ler e escrever, os outros s podero ler e ningum poder execut-lo.
User r w -
Group r - -
Others r - -
Para alterar essas permisses, utliza-se o comando chmod. Veja explicao do uso desse comando no prximo captulo.
2.2.4 Diretrios
Chamamos de rvore de diretrios organizao dos arquivos de diretrios, fazendo uma aluso s suas ramicaes, semelhantes aos galhos de uma rvore. Damos o nome de "raiz " ao diretrio principal que contm todos os outros subdiretrios.
12
TELE))) PET
Diretrio "home" onde a conta do usurio est registrada. Diretrio ascendente o diretrio onde determinado arquivo ou diretrio est contido. Diretrio descendente o diretrio contido em outro diretrio. O "path " consiste na lista de diretrios que precisa ser atravessada, desde o diretrio raiz at o arquivo, com barras separando os componentes. Path absoluto o caminho completo desde a raiz at o arquivo. Se o caminho completo desde a raiz at o arquivo for /UFF/pet/cursos/Linux e o diretrio de trabalho do usurio fosse pet no momento, bastaria que ele digitasse cursos/Linux. Este nome chamado caminho relativo.
Figura 2.2: Padro dos principais diretrios do UNIX. Os diretrios principais, alm de outros, com seu contedo esto listados abaixo: /etc - Arquivos para administrao do sistema.
/bin - Comandos UNIX mais comumente usados. /usr - Todas as contas de usurios e alguns comandos. /dev - Arquivos de dispositivos de entrada e sada. /lib - Arquivos bibliotecas para programao em C. /tmp - Armazenamento de arquivos temporrios. /mmt - Montagem de discos e perifricos. /sbin - Diretrio usado na inicializao do sistema. Demais pacotes para a administrao do sistema devem car em /usr/sbin ou /usr/local/sbin. /var - Diretrio que contm arquivos variveis, tais como spool (las de e-mail, crontab, impresso) e logs. Este diretrio existe para que os arquivos que necessitem ser modicados quem nele e no no /usr. /home - Contm os diretrios pessoais dos usurios. /root - o diretrio que contm os arquivos do administrador (seu home ). Porm alguns sistemas Unix-like utilizam /home/root.
TELE))) PET
13
2.3. Processos
/proc - Diretrio virtual onde o kernel armazena suas informaes. /boot - Contm a imagem do kernel e tudo o que for necessrio ao processo de boot, menos conguraes.
2.3 Processos
2.3.1 Processos e subprocessos
Um processo um simples programa que est rodando em seu espao de endereamento virtual prprio. distinto de um 'job ' ou comando, que, em sistemas UNIX, pode ser composto de muitos processos realizando uma nica tarefa. Comandos simples como `ls' so executados como simples processos. Um comando composto, contendo pipes, ir executar um processo por segmento pipe. Para acompanhar o status de cada processo o sistema cria um PID (Process ID) para cada processo aberto. Existem elementos chamados guias de controle de execuo que ajudam a controlar a execuo do programa.
Fork : a chamada de sistema cuja execuo cria um processo (lho) idntico quele que o chamou.
Processo pai : processo que gera um novo processo. Processo lho : Processo gerado pelo processo pai. Pid (Process ID) : um nmero que identica unicamente cada processo e usado para referir-se
a ele.
14
TELE))) PET
2.3. Processos
jobs lista os jobs em background. fg [job] leva o job para foreground. bg [job] leva o job para background. ps mostra os processos que esto sendo rodados no computador. top mostra continuamente o status de cada processo que est rodando no computador. kill [Pid] encerra o processo.
O exemplo abaixo ilustra o uso de alguns desses comandos. Existe o seguinte script rodando no sistema:
$ ./trava.sh & [1] 2906 $ jobs [1]+ Running ./trava.sh & $ ps PID TTY TIME CMD 1916 ttyp1 00:00:00 bash 2906 ttyp1 00:00:00 trava.sh 2907 ttyp1 00:00:00 sleep 2909 ttyp1 00:00:00 ps $ $ fg 1 ./trava.sh aqui foi digitado: ctrl + z [1]+ Stopped ./trava.sh $ jobs [1]+ Stopped ./trava.sh $ jobs
Universidade Federal Fluminense
15
TELE))) PET
2.3. Processos
[1]+ Stopped ./trava.sh $ bg 1 [1]+ ./trava.sh & $ jobs [1]+ Running ./trava.sh & $ ... comandos diversos do usurio enquanto ele espera a mensagem aparecer ... $ T na Hora de Sair!! Ter Jan 10 16:01:51 BRST 2006 aqui foi digitado: enter [1]+ Done ./trava.sh $ jobs $ ps PID TTY TIME CMD 1916 ttyp1 00:00:00 bash 2935 ttyp1 00:00:00 ps $
Como pode ser visto, o programa foi executado em background. O comando jobs mostrou o job trava.sh em todos os seus estados: rodando, suspenso e executando, assim como fez o comando ps.
16
TELE))) PET
Captulo 3 Comandos
Os sistemas operacionais UNIX e os que so derivados do UNIX (FreeBSD, Linux, etc) possuem muitos comandos e aplicativos. Em geral a sintaxe de uma comando da seguinte forma:
$ comando -opes argumentos Podem ser inseridos comandos seguidos na mesma linha separando-os por ponto-vrgula. Ex: $ cd;pwd
$ man -k palavra-chave Outros comandos so: info, whatis, apropos. Consulte o manual para informaes sobre esses comandos. . apropos : procura por comandos/programas pela descrio
Sintaxe: apropos <descrio> til quando precisamos fazer alguma coisa mas no sabemos qual comando usar. Ele faz sua pesquisa nas pginas de manual e suas descries e lista os comandos/programas que atendem consulta.
17
Captulo 3. Comandos
-n Numera as linhas. -E Exibe $ ao nal de cada linha. -A Exibe todo o contedo incluindo caracteres especiais, como acentos e espaos na forma de cdigos.
Ex: Mostra o contedo do arquivo com as linhas numeradas.
$ cat -n arqu1.txt 1 2 "Software Livre" uma questo 3 de liberdade, no de preo. 4 Para entender o conceito, 5 voc deve pensar em 6 "liberdade de expresso", 7 no em "cerveja grtis". 8
Ex: Concatena na sada padro o contedo dos dois arquivos.
$ cat
arqu1.txt arqu2.txt
"Software Livre" uma questo de liberdade, no de preo. Para entender o conceito, voc deve pensar em "liberdade de expresso", no em "cerveja grtis".
Universidade Federal Fluminense
18
TELE))) PET
Captulo 3. Comandos
=> A liberdade de executar o programa, para qualquer propsito (liberdade no. 0) => A liberdade de estudar como o programa funciona, e adapt-lo para as suas necessidades (liberdade no. 1). Aceso ao cdigo-fonte um pr-requisito para esta liberdade. => A liberdade de redistribuir cpias de modo que voc possa ajudar ao seu prximo (liberdade no. 2). => A liberdade de aperfeioar o programa e liberar os seus aperfeioamentos, de modo que toda a comunidade se beneficie. (liberdade no. 3). Acesso ao cdigo-fonte um pr-requisito para esta liberdade. tac - Semelhante ao comando cat, porm exibe o contedo em ordem reversa.
Sintaxe: tac [opo] <arquivo>
/usr/share/misc/magic ou /etc/magic
O segundo arquivo, /etc/magic, pode ser editado pelo prprio usurio para identicar seus arquivos. Ex:
$ file arqu1.txt arqu1.txt: ISO-8859 text $ file image.jpg image.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), 100 x 100 $ file h264 h264: directory
Pelo exemplo acima, vemos que os tipos de arquivos foram: text, image e directory. Alm desses podem haver: executable, (para arquivos executveis resultado da compilao de um programa), data (contendo dados geralmente no imprimveis). Veja mais opes no manual do sistema.
19
TELE))) PET
Captulo 3. Comandos
arqfont o arquivo a ser copiado; arqdest o nome da cpia a ser criada. O nome do arqdest deve ser diferente do arqfont caso se esteja fazendo uma cpia para o mesmo diretrio. Se o arquivo destino no existir, ele criado com o nome arqdest. E caso exista e no seja um diretrio, seu contedo ser sobrescrito.
As opes podem ser:
-i Pede conrmao para copiar o arquivo. -p Mantm os dados, como por exemplo permisses e datas do arquivo original. -r Copia os arquivos e diretrios recursivamente.
Ex:
novoarq.txt 1 1 1 1 1 1 1 1 1 1 kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin kurumin 395 167 606 0 5684 167 5740 113 125 214 2005-03-08 2005-03-08 2005-03-08 2005-03-08 2005-03-05 2005-03-08 2005-03-08 2005-03-08 2005-03-08 2005-03-08 21:46 22:53 22:43 20:09 19:29 23:23 20:08 21:42 21:41 21:40 apend.tex arqu1.txt arqu2.txt cap2.tex imag.jpg novoarq.txt page.html parIII.tex parII.tex parI.tex
Como pode ser visto no exemplo, foi criado um arquivo chamado novoarq.txt
-f Remove todos os arquivos mesmo no tendo permisso de escrita sem pedir conrmao do usurio. -i Remove o arquivo interativamente, ou seja, pede a conrmao do usurio.
Universidade Federal Fluminense
20
TELE))) PET
Captulo 3. Comandos
$ rm -i cap2.tex rm: remove arquivo comum `cap2.tex'? y $ ls apend.tex arqu2.txt novoarq.txt parIII.tex arqu1.txt imag.jpg page.html parII.tex $
parI.tex
Foi pedida conrmao para a excluso do arquivo, a letra y foi digitada para conrmar, em seguida foi usado o comando ls para listar os arquivos. Como pode ser visto, o arquivo foi apagado.
$mv $mv
imag.jpg nova.jpg Renomeia o arquivo imag.jpg para nova.jpg. list.tex ~/teste/ Move o arquivo list.tex para o diretrio ~/teste/.
$ls apend.tex arqu2.txt nova.jpg page.html parII.tex arqu1.txt list.tex novoarq.txt parIII.tex parI.tex ln Cria links entre arquivos.
Sintaxe: ln [opo] arquivo1 arquivo2 Sem opo, o comando ln d um outro nome para um mesmo arquivo na memria. Ou seja, um mesmo arquivo pode ser referenciado de duas maneiras diferentes. J usando a opo -s criado um link simblico, ou seja, um arquivo que aponta para a rea onde est o arquivo original. Ex: Tendo o arquivo chamado arq2.txt, ser criado um link de hardware e simblico para ele. Observe a diferena no tamanho dos arquivos criados. O link simblico apenas um "atalho"para o arquivo original, por isso seu tamanho menor. Atente tambm para o fato do uso do comando ln sem opo no igual ao comando cp como pode parecer, pois os arquivos continuam interligados. A modicao de um implica na modicao do outro.
Universidade Federal Fluminense
21
TELE))) PET
Captulo 3. Comandos
$ ls -l total 4 -rw-r--r-1 kurumin kurumin $ ln original.txt hard.txt $ ls -l total 8 -rw-r--r-2 kurumin kurumin -rw-r--r-2 kurumin kurumin $ cat hard.txt Esse o arquivo original $ cat >> hard.txt Primeira modificao $ cat hard.txt Esse o arquivo original Primeira modificao $ cat original.txt Esse o arquivo original Primeira modificao $ ls -l total 8 -rw-r--r-2 kurumin kurumin -rw-r--r-2 kurumin kurumin $ ln -s original.txt simb.txt $ ls -l total 9 -rw-r--r-2 kurumin kurumin -rw-r--r-2 kurumin kurumin lrwxrwxrwx 1 kurumin kurumin $ cat simb.txt Esse o arquivo original Primeira modificao $ cat >> simb.txt Segunda modificao $ cat simb.txt Esse o arquivo original Primeira modificao
Universidade Federal Fluminense
49 2006-02-03 10:38 hard.txt 49 2006-02-03 10:38 original.txt 12 2006-02-03 10:39 simb.txt -> original.txt
22
TELE))) PET
Captulo 3. Comandos
Segunda modificao $ cat original.txt Esse o arquivo original Primeira modificao Segunda modificao $ diff Exibe a diferena entre dois arquivos.
Sintaxe: di [opo] arquivo1 arquivo2 Algumas das opes so:
-b Ignora espaos e caracteres de tabulao. -i No diferencia maiscula de minscula. -r Processa subdiretrios quando diretrios so comparados.
Ex:
$ cat parI.tex parte um esta linha esta igual nos dois mas a linha seguinte no. $ cat parII.tex parte dois esta linha esta igual nos dois porem a linha seguinte no $ diff parI.tex parII.tex 1c1 < parte um --> parte dois 3c3 < mas a linha seguinte no. --> porem a linha seguinte no $
Universidade Federal Fluminense
23
TELE))) PET
Captulo 3. Comandos
-R Se o arquivo for um diretrio, o comando muda recursivamente o modo de acesso a todos os seus arquivos e subdiretrios. -c Mostra o resultado do uso do comando aps seu uso. permisses composto pela classe do usurio (u para dono, g para grupo, o para outros tipos e a todos), pelos caracteres operadores (+ para acrescentar permisses, - para retirar permisses e = para retirar todas as permisses) e pelos caracteres de permisso (r para leitura, w para escrita e x para execuo).
Exemplos:
$ ls -l --wx-wx-wx 1 ze ze 5684 2005-03-05 19:29 nova.jpg $ chmod -c a+rwx modo de `nova.jpg' mudado para 0777 (rwxrwxrwx) $ chmod -c og-x nova.jpg modo de `nova.jpg' mudado para 0766 (rwxrw-rw-)
A mudana de permisso tambm pode ser feita colocando o cdigo rwx na forma de nmeros octais. Abaixo segue a equivalncia do cdigo nas letras rwx pra nmeros. ----x -w-wx r-r-x rwrwx
0 1 2 3 4 5 6 7
kurumin kurumin
24
Captulo 3. Comandos
$ ls apend.tex arqu1.txt
parIII.tex parII.tex
parI.tex
O ls sem argumentos mostra apenas os nomes dos arquivos. Sintaxe: ls [opo] [arquivo] Os parmetros opcionais podem ser:
-l lista ordenada pelo nome e em formato longo -F mostra barra de diretrios -R mostra o contedo de todos os subdiretrios -x lista o resultado em vrias colunas na horizontal -a lista todos os arquivos, inclusive os ocultos -i exibe o nmero do inode na primeira coluna -t lista em ordem cronolgica em funo da hora da ltima modicao -1 lista somente os nomes dos arquivos ordenados.
Obs: podem ser usados vrios parmetros opcionais em conjunto. Ex:
2 31 1 1
ze ze ze ze
ze 4096 2005-03-08 21:46 . ze 4096 2005-03-08 21:59 .. ze 395 2005-03-08 21:46 apend.tex ze 159 2005-03-08 21:34 arqu1.txt
25
TELE))) PET
Captulo 3. Comandos
-rw-r--r--rw-r--r--rwxrwxrwx -rw-r--r--rw-r--r--rw-r--r--rw-r--r--
1 1 1 1 1 1 1
ze ze ze ze ze ze ze
ze ze ze ze ze ze ze
total 48 o nmero de blocos ocupados pelos arquivos no diretrio. Em algumas verses o tamanho
de cada bloco de 512 Bytes e em outras de 1K Byte.
Primeiro Campo Exibe as permisses dos arquivos. Segundo Campo Exibe o nmero de ligaes dos arquivos. Terceiro Campo Exibe o proprietrio do arquivo. Quarto Campo Exibe o grupo do arquivo. Quinto Campo Exibe o tamanho do arquivo em Bytes. Sexto Campo Exibe a data e hora da ltima modicao do arquivo. Stimo Campo Exibe informao sobre o arquivo ou diretrio.
pwd (Present Working Directory) : mostra o diretrio corrente segundo o percurso ab-
soluto de localizao.
Sintaxe: pwd
$ cd / Vai para o diretrio raiz. $ cd .. Vai para o diretrio pai. $ cd Vai para o diretrio home do usurio. $ cd - Vai para o ltimo diretrio acessado.
Ex: Suponha que o diretrio atual seja:
Universidade Federal Fluminense
26
TELE))) PET
Captulo 3. Comandos
$ pwd /home/ze/teste
Fazendo
$ ls curso notas artigos $ mkdir teste $ ls curso notas artigos teste rmdir : Remove diretrios vazios
Sintaxe: rmdir <diretrio> Exemplo: O diretrio teste criado no exemplo anterior ser removido.
27
TELE))) PET
Captulo 3. Comandos
$ su Password: # $ su user Password: /home/user$ sudo : Executa comandos como root. adduser : Adiciona um usurio ou grupo no sistema
Sintaxe: adduser [opes] <usurio/grupo> Por padro, quando um usurio adicionado, criado um grupo com o mesmo nome do usurio.
TELE))) PET
Captulo 3. Comandos
Comandos diversos
alias : Cria um apelido para o comando e seus parmetros
Sintaxe: alias <apelido>=`<comando + parmetros>' Exemplo: Ser criado um apelido para aprimorar o ls
cd/mnt/floppy'
29
TELE))) PET
Captulo 3. Comandos
$ date mes/dia/hora/minuto/ano
Ento para mudar a data atual para 25 de dezembro de 2020, s duas e meia da tarde, digite:
-a mostra o espao ocupado por todos os arquivos -b mostra o espao ocupado em bytes -c faz uma totalizao de todo o espao listado -D no conta links simblicos -k mostra o espao ocupado em kbytes -m mostra o espao ocupado em Mbytes -S no calcula o espao ocupado por subdiretrios
du (disk usage ) : Mostra o espao utilizado por arquivos e diretrios do diretrio atual
Sintaxe: du [opes] , onde opes podem ser os parmetros listados abaixo:
30
TELE))) PET
Captulo 3. Comandos
$find / -name prova ( procura no diretrio raiz e subdiretrios um arquivo chamado prova) $find / -name prova -maxdepth 3 (procura no diretrio raiz e subdiretrios, at o 3 nvel, um arquivo chamado prova) $find / -mmin 10'' (procura no diretrio raiz e subdiretrios um arquivo modicado h 10 minutos atrs) $find / -links 4'' (procura no diretrio raiz e subdiretrios, todos os arquivos que possuem 4 links como referncia) sync : Grava os dados do cache de disco na memria RAM para os disco rgidos e
exveis
Sintaxe: sync O cache um mecanismo de acelerao que permite que um arquivo seja armazenado na memria ao invs de ser imediatamente gravado no disco. Quando o sistema estiver ocioso, o arquivo gravado para o disco. O Linux pode usar toda memria RAM disponvel para o cache de programas acelerando seu desempenho de leitura/gravao. O uso do sync til em disquetes quando gravamos um programa e precisamos que os dados sejam gravados imediatamente para retirar o disquete da unidade.
Opes de compactao
O Linux possui programas de armazenamento de arquivos que podem ou no compactar os mesmos.
tar : armazena vrios arquivos e diretrios dentro de um nico arquivo (*.tar) ou dis-
positivo
Sintaxe: tar [opes] <arquivo> , As opes podem ser os parmetros listados abaixo:
Universidade Federal Fluminense
31
TELE))) PET
Captulo 3. Comandos
-c cria um novo arquivo tar -h armazena os arquivos apontados por links, ao invs dos links -r inclui arquivos ao nal (append ) de um arquivo tar -t lista o contedo de um arquivo tar -u somente inclui arquivos que no esto presentes ou so mais novos do que o arquivo tar -w pede conrmao para cada ao a ser tomada -v mostra na tela o que est sendo feito -x extrai arquivos armazenados em um arquivo tar $ ls arq1.txt arq2.txt hard.txt original.txt simb.txt $ tar -cvf junto.tar arq*.txt arq1.txt arq2.txt $ ls arq1.txt arq2.txt hard.txt junto.tar original.txt $
simb.txt
A m de reduzir o espao ocupado no disco, o uso da compactao deste arquivo se torna til e eciente. Para esta tarefa usamos o comando gzip.
-c concatena sada de dados -h lista todas as opes -l lista os nomes no contedo do arquivo .gz -r exibe em modo recursivo -t usado para testar arquivos -v modo verbose, exibe informaes sobre compactao. $ ls arq1.txt arq2.txt hard.txt junto.tar original.txt simb.txt $ gzip -v junto.tar junto.tar: 97.6% -- replaced with junto.tar.gz $ ls arq1.txt arq2.txt hard.txt junto.tar.gz original.txt simb.txt
32
TELE))) PET
Captulo 3. Comandos
$ ls arq1.txt arq2.txt hard.txt junto.tar.gz original.txt simb.txt $ gunzip junto.tar.gz $ ls arq1.txt arq2.txt hard.txt junto.tar original.txt simb.txt $
Existem outras opes de compactadores em sistemas UNIX. Cada um dene um arquivo com uma extenso diferente, como os exemplos:
33
TELE))) PET
Captulo 3. Comandos
$date > datas $cat datas Qui Mar 17 21:22:31 BRT 2005 $echo FIM DO ARQUIVO >> datas $ cat datas Qui Mar 17 21:22:31 BRT 2005 FIM DO ARQUIVO
No caso de erros, deve-se utilizar os smbolos 2> ou 2 para direcionar o erro da sada padro para um determinado arquivo. Exemplo:
$ write 2> erros $ cat erros write: write: you have write permission turned off. $ cd f 2>> erros $ cat erros write: write: you have write permission turned off. bash: cd: f: No such file or directory $
Da mesma forma que a sada de um comando pode ser direcionada para um arquivo, um arquivo pode ser direcionado como entrada de um comando. Isso feito utilizando o smbolo < . Na prxima seo teremos um exemplo de como fazer isso. Tambm possvel fazer redirecionamento de entrada utilizando o sinal . Este smbolo indica ao shell que o escopo de um comando comea na linha seguinte e termina quando ele encontrar o label que o segue. Este comando muito usado para exibir um texto em vrias linhas, sem precisar de car usando o comando echo para cada linha. Exemplo:
34
TELE))) PET
Captulo 3. Comandos
cat <<FIM 1 - Opo UM 2 - Opo DOIS 3 - Opo TRS FIM - Opo UM - Opo DOIS - Opo TRS
$cat nomes Deri Cod Pato Brunaldo KK $ $sort < nomes Brunaldo Cod Deri KK Pato $
A sada poderia ser redirecionada ao mesmo tempo para um arquivo, como mostrado abaixo:
$sort < nomes > $cat nomesord Brunaldo Cod Deri KK Pato $
nomesord
O sort leu o contedo do arquivo "nomes", classicou-os e a sada, que seria feita na tela, foi jogada para um novo arquivo chamado "nomesord". Um detalhe importante: os arquivos de entrada e sada devem ser diferentes, pois a primeira parte do comando a criao do arquivo de sada. Se este for igual ao de entrada, ele zerado.
Universidade Federal Fluminense
35
TELE))) PET
Captulo 3. Comandos
Filtros
Os chamados programas "ltro "pegam sua entrada de stdin, fazem alguma modicao nesses dados e colocam a sada em um stdout (tela do terminal). O mais simples programa ltro o cat, que faz uma cpia el da entrada na sada. Outros programas desse tipo so: sort, wc, que conta as linhas, caracteres e palavras, grep, que mostra as linhas de um arquivo contendo uma seqncia de caracteres, e muitos outros comandos UNIX. No so programas ltro: ls, who, date, cal, pois, embora a sada seja para stdout, a entrada no stdin.
$ cat lista Alexandre Jos Felipe Tatiana Beatriz Eduardo Enrico Aline Erica Jos $ uniq lista Alexandre Jos Felipe Tatiana Beatriz Eduardo Enrico Aline Erica Jos $ sort lista | uniq Alexandre Aline Beatriz Eduardo Enrico
Universidade Federal Fluminense
36
TELE))) PET
Captulo 3. Comandos
Erica Felipe Jos Tatiana $ sort lista | uniq -d Jos $ split : Divide o arquivo em partes.
As principais opes so:
-bn Divide o arquivo em partes com n bytes de tamanho. A unidade de n pode ser em k (kilobytes ) ou M (Megabytes). -ln Divide o arquivo em partes com n linhas de tamanho.
Sintaxe: split [opes] <arquivo> [prefixo] Ex: O arquivo arqu2.txt ser dividido em arquivos de 3 linhas cada.
$ split -l3 arqu2.txt arqlin $ ls -l total 1080 -rw-r--r-1 kurumin kurumin 139 2006-01-11 -rw-r--r-1 kurumin kurumin 131 2006-01-11 -rw-r--r-1 kurumin kurumin 111 2006-01-11 -rw-r--r-1 kurumin kurumin 130 2006-01-11 -rw-r--r-1 kurumin kurumin 89 2006-01-11 -rwxrwxrwx 1 kurumin kurumin 161 2005-04-09 -rwxrwxrwx 1 kurumin kurumin 600 2006-01-11 -rwxrwxrwx 1 kurumin kurumin 10 2005-03-27 -rwxrwxrwx 1 kurumin kurumin 5615 2005-03-27 -rwxrwxrwx 1 kurumin kurumin 71 2005-03-27 -rwxrwxrwx 1 kurumin kurumin 10 2005-03-27 -rwxrwxrwx 1 kurumin kurumin 69 2006-01-10 -rwxr-xr-1 kurumin kurumin 67 2006-01-10 -rwxrwxrwx 1 kurumin kurumin 161 2005-04-09 $ cat arqlinaa => A liberdade de executar o programa, para qualquer propsito (liberdade no. 0) => A liberdade de estudar como o programa funciona, $ cat arqlinab e adapt-lo para as suas necessidades (liberdade no. 1). Aceso ao cdigo-fonte um pr-requisito para esta liberdade.
Universidade Federal Fluminense
11:36 11:36 11:36 11:36 11:36 21:42 11:27 12:57 13:02 13:00 12:58 16:42 16:40 21:42
arqlinaa arqlinab arqlinac arqlinad arqlinae arqu1.txt arqu2.txt cap2.tex image.jpg page.html parIII.tex parII.tex parI.tex texto.txt
37
TELE))) PET
Captulo 3. Comandos
-b Seleciona campos por bytes. -c Seleciona campos por caracteres. -f campos Seleciona lista de campos, onde podem ser nmeros separados por vrgula ou faixas de nmeros (n1-n2), ou combinao de ambas. -d Especica o delimitador de campo.
E: O delimitador de campo informado no exemplo abaixo um espao em branco. Veja o resultado da escolha do campo 4 do comando date.
$ date Qua Jan 11 14:04:49 BRST 2006 $ date|cut -d" " -f 4 14:06:31 $ date|cut -c 5 J $ tr : Substitui caracteres
Pode ser usado para trocar as letras de maisculas para minsculas. Sintaxe: tr [opes] <string1> <string2> As opes principais so:
-c Realiza a troca de todos os caracteres, exceto da string1. -d Elimina os caracteres especicados em string1, ignorando string2. -s Comprime a seqncia de caracteres repetidos da string2.
Ex: Converte as letras minsculas para maisculas.
38
TELE))) PET
Captulo 3. Comandos
$ cat capital.txt|tr "[a-z]" "[A-Z]" RIO DE JANEIRO SO PAULO VITRIA BELO HORIZONTE $
Ex: Converte mltiplos espaos em branco em um nico espao.
$ cat capital.txt Rio de Janeiro So Paulo Vitria Belo Horizonte $ cat capital.txt|tr -s " " Rio de Janeiro So Paulo Vitria Belo Horizonte $ paste : Exibe lado a lado contedo de arquivos.
Sintaxe: paste [opes] <arquivo1> <arquivo2> As opes so:
-s exibe as linhas de um arquivo em srie em vez de uma abaixo da outra. -d c Especica o delimitador de campos como sendo o caracter c em vez da tabulao.
Ex: Sejam os arquivos estado.txt e capital.txt. O estado ser colocado ao lado da capital, separados por ": ".
$ cat estado.txt Rio de Janeiro So Paulo Esprito Santo Minas Gerais $ cat capital.txt Rio de Janeiro So Paulo Vitria Belo Horizonte
Universidade Federal Fluminense
39
TELE))) PET
Captulo 3. Comandos
$ paste -d: estado.txt capital.txt Rio de Janeiro:Rio de Janeiro So Paulo:So Paulo Esprito Santo:Vitria Minas Gerais:Belo Horizonte $ wc : Conta o nmero de linhas.
Com as opes:
-l Mostra apenas o nmero de linhas. -w Apenas o nmero de palavras -c Apenas o nmero de caracteres.
Sintaxe: wc [opes] <arquivo>
600 arqu2.txt
$ tail -n 5 arqu1.txt Para entender o conceito, voc deve pensar em "liberdade de expresso", no em "cerveja grtis". $
As opes so semelhantes a do comando head, porm sero mostradas as ltimas m linhas ou ltimos m bytes.
Universidade Federal Fluminense
40
TELE))) PET
Captulo 3. Comandos
$ grep liberdade *.txt arqu1.txt: de liberdade, no de preo. arqu1.txt:"liberdade de expresso", arqu2.txt:=> A liberdade de executar o programa, para qualquer arqu2.txt: propsito (liberdade no. 0) arqu2.txt:=> A liberdade de estudar como o programa funciona, arqu2.txt: (liberdade no. 1). Aceso ao cdigo-fonte arqu2.txt: um pr-requisito para esta liberdade. arqu2.txt:=> A liberdade de redistribuir cpias de modo arqu2.txt: (liberdade no. 2). arqu2.txt:=> A liberdade de aperfeioar o programa, e arqu2.txt: (liberdade no. 3). Acesso ao cdigo-fonte arqu2.txt: um pr-requisito para esta liberdad
Exemplo: Sero listadas as informaes referentes aos arquivos .jpg do diretrio corrente.
H tambm comandos variantes do grep: o egrep e o fgrep. O primeiro tem como caracterstica adicional a possibilidade do uso de metacaracteres. O segundo no apresenta essa funcionalidade. A vantagem deste ltimo sobre o comando grep sua rapidez. Exemplo: Sero localizadas as linhas que comeam com um caracter qualquer seguido das letras S ou P do arquivo arq1.txt.
$ egrep '^.(S|P)' arqu1.txt "Software Livre" uma questo Para entender o conceito,
Observe que foram usados apstrofos ' para limitar a expresso procurada. Seu uso importante para evitar erros de interpretao pelo shell, j que h caracteres com signicado especial. O caracter '' foi usado para indicar o incio da linha, o ponto . para indicar um caracter qualquer e a barra | foi usada para representar ou lgico. A expresso ^.(S|P), ento, signica incio de linha com qualquer caracter seguido das letras S ou P. As expresses com uso desses caracteres
Universidade Federal Fluminense
41
TELE))) PET
Captulo 3. Comandos
especiais so chamadas de expresses regulares. A seo 3.3 tem mais sobre o uso de expresses regulares. As principais opes do grep so listadas abaixo:
-i Ignora a diferena entre maisculas e minsculas -c Mostra o nmero de linhas em que a expresso foi encontrada
Exemplo: Voltando ao exemplo anterior, vamos ver em quantas linhas ocorreu a palavra liberdade.
-l Lista somente o nome dos arquivos que contm a expresso -n Numera cada linha que contm a expresso procurada head : Mostra as linhas iniciais de um arquivo
Sintaxe: head [opes] <arquivo> As opes podem ser:
-c m Mostra o texto que ocupa o tamanho de m bytes. -n m Mostra o texto das m primeiras linhas. Por padro, so mostradas as 10 primeiras linhas se no for especicada nenhuma opo.
Exemplo:
$ head -c 23 arqu1.txt "Software Livre" uma $ more : Mostra arquivos texto tela a tela
Sintaxe: more [opo] <arquivo>
42
TELE))) PET
Captulo 3. Comandos
As principais opes so:
+n : exibe o arquivo a partir da linha n especicada. -s : exibe mltiplas linhas em branco como sendo apenas uma. As teclas associadas ao more so:
<espao>: para visualizar a prxima tela. <return>: para visualizar a prxima linha. <b>: para visualizar a tela anterior. <f>: para avanar uma tela. <q>: sair do comando.
Pipes
Os Pipes so a forma pela qual podemos construir uma conexo de dados entre a sada de um comando e a entrada de outro. A sada do comando anterior serve de entrada para o posterior. Forma de um comando pipe: comando1 | comando2 | ... Comandos conectados por pipe formam um pipeline. Por exemplo: `ls -la|more`. Este comando faz a listagem longa de arquivos, que enviada ao comando more. O comando more tem a funo de efetuar uma pausa a cada 25 linhas do arquivo.
Comando tee
Envia o resultado do programa para a sada padro do terminal e, ao mesmo tempo, para uma sada escolhida, por exemplo, um arquivo. Este comando deve ser usado com o comando pipe. Exemplo:
ls -la|tee listagem.txt A sada do comando ser mostrada normalmente no terminal e, ao mesmo tempo, gravada no arquivo listagem.txt.
43
TELE))) PET
Captulo 3. Comandos
Caracter Descrio
[ ] [^] ? * + {} ^ $ \b \ | () .* *? +? {}?
. Coringa de um caracter Coincide com qualquer um dos caracteres listados Coincide com qualquer um dos caracteres, exceto os listados O caracter anterior pode aparecer ou no O caracter anterior pode aparecer em qualquer quantidade O caracter anterior deve aparecer no mnimo uma vez O caracter anterior deve aparecer na quantidade indicada Coincide com o comeo da linha Coincide com o m da linha Limita uma palavra (letras, nmeros e sublinhado) Torna os metacaracteres caracteres comuns. Atua como operador "ou". Faz com que vrios caracteres sejam vistos como um s. Qualquer caracter, em qualquer quantidade. Semelhante ao asterisco. Semelhante ao sinal de mais. Semelhante s chaves simples. Tabela 3.2: Expresses Regulares
Exemplos
vi.a
[gpr]ato [^mf]ato meios? go*gle go+gle go{1,5}gle ^rio mente$ \b(meu) srio\? (co|fu)mo (sai)?rei eu.*voc
44
TELE))) PET
45
.bash_profile ou .bash_login ou .profile ou .bashrc : Estes arquivos cam no diretrio home do usurio. As modicaes feitas nesse arquivo s valem para o prprio usurio. Podemos, ento, abrir o arquivo .bashrc e colocar nele o novo PATH. Alm disso, podemos incluir tambm aliases. Ex: Se tivssemos um diretrio chamado scripts e quisssemos coloc-lo no PATH, bastaria acrescentar a linha abaixo ao arquivo .bashrc. Tambm foram colocados alguns aliases.
46
TELE))) PET
Vamos fazer um exemplo passo-a-passo agora para criar e executar um programa. Escreva em seu editor de texto o programa abaixo e salve como um.sh.
$ sh um.sh
Neste caso o arquivo estava no mesmo diretrio de trabalho. E se o arquivo estivesse em um diretrio diferente? Lembre-se de mudar o PATH!
"command not found - Esse quer dizer que o shell no encontrou seu programa.
A razo para isso pode ser que o nome do comando foi digitado de forma diferente do nome do arquivo. Certique-se de que o nome est igual. Outra razo possvel que o arquivo est em um local diferente do PATH padro. Nesse caso, deve-se proceder conforme explicado na seo anterior, que explica como salvar o arquivo.
"Permission denied - A permisso para execuo do arquivo foi negada. O usurio deve mudar a permisso do arquivo para executvel. Outro erro comum o de sintaxe. Nesse caso o shell encontra o script e indica a linha onde ocorreu o erro no programa.
4.2.2
Quoting
Denomina-se quoting a funo de remover a predenio ou signicado especial dos metacaracteres. Dessa forma, possvel escrever os caracteres literalmente. H 3 tipos de mecanismos para quoting : 1. Barra invertida (\) - Chamada de caracter de escape, ela remove o signicado especial do caracter seguinte ela. Exemplo:
Universidade Federal Fluminense
47
TELE))) PET
4.3. Comentrios
echo agora a barra est sendo\ usada para que seja possvel\ continuar escrevendo em outra linha\ Veja que apareceu um prompt secundrio \ Mas na hora da impresso as linhas saem seguidas. agora a barra est sendousada para que seja possvelcontinuar escrevendo em outra linhaVeja que apareceu um prompt secundrio Mas na hora da impresso as linhas saem seguidas.
Neste exemplo a barra suprimiu o signicado de m de linha. 2. Aspas simples (') - Todos os caracteres que vem entre estas aspas tem seu signicado removido. Exemplo:
$ echo 'Com aspas simples no necessrio colocar\ > barra para cada caracter # $ * !' Com aspas simples no necessrio colocar barra para cada caracter # $ * !
3. Aspas duplas (") - semelhante anterior, porm no remove o signicado de $, \, ", ' e {varivel}.
4.3 Comentrios
Para deixar seu programa mais claro e fcil de entender, o usurio no s pode como deve acrescentar comentrios em seu cdigo-fonte utilizando o caracter # no incio da linha. Esta linha no ser executada pelo shell quando ele o encontrar. Isso bastante til para permitir a leitura posterior do arquivo, correo de erros, mudanas no programa entre outras tarefas. Por exemplo, no incio de um script poderia ser escrita a sua funo.
48
TELE))) PET
Um bom cdigo-fonte deve ter um cabealho identicando o autor e as funes do programa. importante lembrar que, independentemente da linguagem usada, comentrios so essenciais para um bom entendimento do programa escrito, tanto pelo autor como por outros usurios. Abaixo segue uma lista de recomendaes que um programador deve seguir:
Escreva os comentrios no momento em que estiver escrevendo o programa. Os comentrios devem acrescentar algo e no apenas descrever o funcionamento do comando. Utilize espaos em branco para aumentar a legibilidade. Coloque um comando por linha, caso a situao permita. Escolha nomes representativos para as variveis.
\\ - Barra invertida (backslash ). \nnn - Escreve o caracter cujo octal nnn. \xHH - Escreve o caracter cujo hexadecimal HH. \a - Caracter de alerta sonoro (beep ). \b - Backspace. \c - Suprime newline, forando a continuao na mesma linha. \f - Alimentao de formulrio. \n - Inicia um nova linha. \r - Carriege return. Retorna ao incio da linha. \t - Equivale a um espao de tabulao horizontal. \v - Equivale a um espao de tabulao vertical.
Ex:
49
TELE))) PET
$ echo -e "Este exemplo mostra o uso de alguns dos caracteres mostrados: > Comeando pela contra-barra \\ > Caracter hexadecimal \100 > Usando backspace\b > iniciando \n nova linha > apagando o que foi \r escrito anteriormente na linha > e tabulando \t horizontalmente e \v verticalmente." Este exemplo mostra o uso de alguns dos caracteres mostrados: Comeando pela contra-barra \ Caracter hexadecimal @ Usando backspace iniciando nova linha escrito anteriormente na linha e tabulando horizontalmente e verticalmente.
OBS: Para saber a representao octal e hexadecinal correspondente ao caracter desejado, consulte a tabela ASCII no manual: man ascii. Quando o usurio no desejar que a sada do comando echo pule de linha, ele deve usar a opo -n.
$ cat local.sh #Programa recebe e mostra dados echo Cidade: $1 echo Estado: $2 echo Pas: $3 $ ./local.sh Niteri "Rio de Janeiro" Brasil Cidade: Niteri Estado: Rio de Janeiro Pas: Brasil
Como pode ser visto no exemplo, o programa chamado local recebe 3 argumentos. O primeiro, Cidade, guardado na varivel $1, o segundo, Estado, em $2 e o terceiro, Pas, em $3. Porm, o shell limita em 9 o nmero de argumentos. Para trabalhar com essa limitao, existe o comando shift n que faz com que os primeiros n argumentos passados no faam parte na contagem de argumentos.
Universidade Federal Fluminense
50
TELE))) PET
Exemplo: Sero passados mais de 9 argumentos para o programa, mas atravs do uso do comando shift ser possvel listar todos.
$ cat shift.sh #Programa recebe e mostra dados usando shift echo Argumento1: $1 echo Argumento2: $2 echo Argumento3: $3 echo Argumento4: $4 echo Argumento5: $5 echo Argumento6: $6 echo Argumento7: $7 echo Argumento8: $8 echo Argumento9: $9 shift 9 echo Argumento10: $1 echo Argumento11: $2 $ ./shift.sh a b c d e f g h i j l m n Argumento1: a Argumento2: b Argumento3: c Argumento4: d Argumento5: e Argumento6: f Argumento7: g Argumento8: h Argumento9: i Argumento10: j Argumento11: l
$ * - Este parmetro informa uma string com todos os argumentos passados para o programa, onde
cada argumento aparece separado pelo IFS (veja a seo 5.8, que fala de variveis de sistema). em branco.
$ @ - Este parmetro semelhante ao anterior, porm os argumentos aparecem separados por espaos $# - Este informa o nmero de argumentos passados na chamada do programa. $? - Este guarda o valor de retorno do ltimo comando executado. Quando a execuo do programa
acontece normalmente, retornado 0, e se tiver ocorrido algum erro retornado um valor diferente de zero.
51
TELE))) PET
$! - Informa o nmero do processo do ltimo programa sendo executado em background. $0 - Informa o nome do shell script executado.
Exemplo: Ser visto o uso de alguns desses parmetros especiais.
$ cat parametros.sh # Mostra os dados relativos aos parametros passados echo Foram passados $# argumentos. echo Os argumentos foram: $@. $ ./parametros.sh um dois trs quatro Foram passados 4 argumentos. Os argumentos foram: um dois trs quatro.
$ cat read.sh # uso do comando read echo Digite uma palavra: read algo echo Voc digitou: \"$algo\" $ ./read.sh Digite uma palavra: Por que no uma frase? Voc digitou: "Porque no uma frase?"
Este comando permite ainda a passagem de uma lista de variveis, desde que estas venham separadas entre espaos em branco. Exemplo: Agora o programa read sofreu uma modicao para receber uma lista de variveis.
$ cat read.sh # uso do comando read echo Digite umas palavras: read prim segun ter echo Voc digitou:
Universidade Federal Fluminense
52
TELE))) PET
$ ./read.sh Digite umas palavras: Mas agora eu quero digitar uma frase! Voc digitou: "Mas" "agora" "eu quero digitar uma frase!"
Se forem passadas mais variveis do que o comando read vai ler, a varivel excedente interpretada como se zesse parte da ltima varivel. Como pode ser visto pelo exemplo anterior, onde foram passadas mais variveis do que as 3 que o programa leria. Ento, a terceira varivel cou com uma frase. Algumas opes podem ser usadas com o comando read. So elas:
-p Nos exemplos acima foi preciso usar o comando echo toda vez antes do comando read. Porm, isso no necessrio, basta usar esta opo. O prximo exemplo mostra como.
Exemplo:
$ cat read.sh # uso do comando read read -p "Digite umas palavras:" prim segun ter echo Voc digitou: echo \"$prim\" echo \"$segun\" echo \"$ter\" $ ./read.sh Digite umas palavras:Dessa vez o echo no foi usado antes Voc digitou: "Dessa" "vez" "o echo no foi usado antes"
-s Esse parmetro serve para no ecoar o que foi digitado. Seu uso principal na leitura de senhas. -n Este parmetro permite limitar o nmero de caracteres que sero lidos pelo read. Sua sintaxe : read -n N string. Ler apenas os N caracteres da string digitada.
Universidade Federal Fluminense
53
TELE))) PET
4.6. Funes
4.6 Funes
Funes so estruturas que renem comandos na forma de blocos lgicos, permitindo a separao do programa em partes. Quando o nome de uma funo chamado dentro do script como um comando, todos os comandos associados a esta funo so executados. A sintaxe para o uso de funes da forma:
#!/bin/bash # # # Este script executa as funes bsicas de uma calculadora: # Soma, Subtrao, Multiplicao e Diviso. # # # # clear menu() { echo echo echo echo echo echo echo echo echo echo echo echo
" Calculadora Bsica " " Operao apenas com inteiros " "|-----------------------------------|" "| Escolha uma das opes abaixo: |" "|-----------------------------------|" "| 1) Soma |" "| 2) Subtrao |" "| 3) Multiplicao |" "| 4) Diviso |" "| 5) Sair |" "|-----------------------------------|" "|-----------------------------------|"
54
TELE))) PET
4.6. Funes
soma ;; subtra ;; mult ;; div ;; exit ;; "Opo Inexistente" ; clear ; menu ;; esac }
1) 2) 3) 4) 5) *)
soma() { clear echo "Informe o primeiro nmero" read num1 echo "Informe o segundo nmero" read num2 echo "Resposta = `expr $num1 "+" $num2`" menu } subtra() { clear echo "Informe o primeiro nmero" read num1 echo "Informe o segundo nmero" read num2 echo "Resposta = `expr $num1 "-" $num2`" menu } mult() { clear echo "Informe o primeiro nmero" read num1 echo "Informe o segundo nmero" read num2 echo "Resposta = `expr $num1 "*" $num2`" menu
55
TELE))) PET
4.6. Funes
} div() {
} menu
clear echo "Informe o primeiro nmero" read num1 echo "Informe o segundo nmero" read num2 echo "Resposta = `expr $num1 "/" $num2`" menu
Repare no script acima que a funo menu foi colocada no nal do programa. Experimente chamar a funo menu no incio e veja o que acontece.
#!/bin/bash # # # Este script executa as funes bsicas de uma calculadora: # Soma, Subtrao, Multiplicao e Diviso. # # PARTE -> MENU # # clear menu(){ echo echo echo echo echo " Calculadora Bsica " " Operao apenas com inteiros " "|-----------------------------------|" "| Escolha uma das opes abaixo: |" "|-----------------------------------|"
56
TELE))) PET
4.6. Funes
"| 1) Soma |" "| 2) Subtrao |" "| 3) Multiplicao |" "| 4) Diviso |" "| 5) Sair |" "|-----------------------------------|" "|-----------------------------------|"
read opcao case $opcao in 1) . soma.sh ;; 2) . subtra ;; 3) . mult ;; 4) . div ;; 5) exit ;; *) "Opo Inexistente" ; clear ; menu ;; esac } menu
O script seguinte refere-se a operao de soma.
#!/bin/bash # # # Este script executa as funes bsicas de uma calculadora: # Soma, Subtrao, Multiplicao e Diviso. # # PARTE -> SOMA soma() { clear echo "Informe o primeiro nmero" read num1 echo "Informe o segundo nmero" read num2 echo "Resposta = `expr $num1 "+" $num2`" menu } soma
57
TELE))) PET
4.7. Depurao
4.7 Depurao
Para vericar os problemas e possveis causas de erros que acontecem nos scripts, basta rodar o programa da seguinte forma:
$ sh -x programa A opo -x faz com que o programa seja executado passo-a-passo, facilitando a identicao de erros.
58
TELE))) PET
if
in
Alm disso, o Unix possui outros comandos, vistos nos captulos anteriores. Em programao, geralmente trabalhamos com manipulao de variveis. Dessa forma, importante lembrar que o uso dessas palavras deve ser evitado, tanto no nome dado s variveis quanto no nome dado ao script.
$ nomevar=valor Uma varivel reconhecida pelo shell quando ela vem precedida pelo smbolo $. Quando este smbolo encontrado, o shell substitui a varivel pelo seu contedo. nomevar o nome da varivel e valor o contedo que ser atribudo varivel. importante assegurar que no haja espao antes e depois do sinal "="para evitar possveis erros de interpretao. No exemplo acima, foi criada uma varivel local. Para criar um varivel global, usado o comando export. $ export nomevar ou $ export nomevar=valor Exemplo: Ser atribudo um valor varivel chamada var, e em seguida este valor ser mostrado pelo comando echo.
59
O nome da varivel s pode comear com letras ou underline. So permitidos caracteres alfanumricos. No devem haver espaos em branco nem acentos.
Exemplo: Veja o uso de aspas simples, duplas e crases com variveis:
$ variavel="Meu login : $user" $ echo $variavel Meu login : ze $ variavel='Meu hostname : $HOSTNAME' $ echo $variavel Meu hostname : $HOSTNAME $ variavel="O diretorio de trabalho : `pwd`" $ echo $variavel O diretorio de trabalho : /home/ze
Quando vamos executar um script ou comando, um outro shell chamado, executa os comandos e ento retorna ao shell original onde foi feita a chamada. Por isso importante lembrar de exportar suas variveis para que elas sejam reconhecidas pelo "shell lho".
$ cat dir.sh #!/bin/bash echo "Veja que o diretrio vai mudar" echo "Inicialmente o diretrio era: $PWD" # neste ponto o diretorio mudou cd /usr/bin echo "Agora o diretrio atual $PWD" echo "Mas terminado o programa parece que nada aconteceu. O diretrio continua sendo o inicial." $ sh dir.sh Veja que o diretrio vai mudar Inicialmente o diretrio era: /home/kurumin/scripts Agora o diretrio atual /usr/bin Mas terminado o programa parece que nada aconteceu. O diretrio continua sendo o inicial. $
Universidade Federal Fluminense
60
TELE))) PET
$ readonly nomevar Todas as variveis readonly, uma vez declaradas, no podem ser "unsetadas"ou ter seus valores modicados. O nico meio de apagar as variveis readonly declaradas pelo usurio saindo do shell (logout).
Substituio de comando - Nesse caso, o nome do comando substitudo pelo resultado de sua operao quando ele for precedido pelo smbolo $ e entre () ou vier entre sinais de crase (`).
$(comando) ou `comando`
Geralmente este tipo de manipulao utilizada na passagem do resultado de um comando para uma varivel ou para outro comando. Exemplo:
Universidade Federal Fluminense
61
TELE))) PET
$ dir=`pwd` $ echo "O diretrio atual tem o seguinte caminho: $dir" O diretrio atual tem o seguinte caminho: /home/kurumin/scripts
$ camada[0]=Fsica $ camada[1]=Enlace $ camada[2]=Redes $ echo "As 3 camadas mais baixas da internet so: ${camada[*]}" As 3 camadas mais baixas da internet so: Fsica Enlace Redes
Outra forma de se atribuir valores em array : nomevar=(valor1, valor2, ..., valorn).
$ camada=(Fsica, Enlace, Redes) $ echo "As 3 camadas mais baixas da internet so: ${camada[*]}" As 3 camadas mais baixas da internet so: Fsica, Enlace, Redes
Para fazer referncia a um elemento do array s fazer: ${nomevar[indice]}. Para ver toda a lista de valores do array basta fazer ${nomevar[*]} ou ${nomevar[@]}. A diferena entre o uso do * ou @ semelhante a diferena vista no uso de parametros especiais.
HOME Contm o diretrio home do usurio. LOGNAME Contm o nome do usurio atual. IFS Contm o separador de campos ou argumento (Internal Field Separator ). Geralmente, o IFS
um espao, tab, ou nova linha. Mas possvel mudar para outro tipo de separador. Exemplo:
62
TELE))) PET
$ num=(1 2 3 4 5) $ echo "${num[*]}" 1 2 3 4 5 $ echo "${num[@]}" 1 2 3 4 5 $ OLDIFS=$IFS $ IFS='-' $ echo "${num[*]}" 1-2-3-4-5 $ echo "${num[@]}" 1 2 3 4 5 $ echo $IFS $ echo "$IFS" $ IFS=$OLDIFS $ echo "$IFS"
Vamos entender o que foi feito: foi criado um vetor para ilustrar o IFS quando forem usados os caracteres e * para listar o array. O IFS inicial um espao em branco, ento tanto pelo uso do como pelo uso do *, os elementos foram listados separados por um espao em branco. Em seguida uma varivel chamada OLDIFS recebeu o contedo de IFS e IFS recebeu um hfen (-). A separao na listagem dos elementos saiu diferente, ou seja, o novo separador foi usado quando foi usado o asterisco. Finalmente, o IFS recebeu seu valor inicial, espao em branco. Essa mudana permanece somente na seo em que foi modicada e at que ela seja fechada.
PATH Armazena uma lista de diretrios onde o shell procurar pelo comando digitado. PWD Contm o diretrio corrente. PS1 Esta denominada Primary Prompting String. Ou seja, ela a string que est no prompt que
vemos no shell. Geralmente a string utilizada : \u@\h:\w $. O signicado desses caracteres e de outros principais est explicado abaixo:
\s O nome do shell. \u Nome do usurio que est usando o shell. \h O hostname \w Contm o nome do diretrio corrente desde a raiz. \d Mostra a data no formato: dia_da_semana ms dia. \nnn Mostra o caracter correspondente em nmeros na base octal. \t Mostra a hora atual no formato de 24 horas, HH:MM:SS. \T Mostra a hora atual no formato de 12 horas, HH:MM:SS.
Universidade Federal Fluminense
63
TELE))) PET
PS2 Esta denominada Secondary Prompting String. Ela armazena a string do prompt secundrio.
O padro usado o caracter >. Mas pode ser mudado para os caracteres mostrados acima.
MAIL o nome do arquivo onde cam guardados os e-mails. COLUMNS Contm o nmero de colunas da tela do terminal. LINES Contm o nmero de linhas da tela do terminal.
Existem muitas outras variveis que so descritas na pgina do manual do Bash, na seo Shell Variables.
64
TELE))) PET
$ echo "$PS1" \u@\h:\w\$ $ echo $? 0 $ rm documento.txt rm: cannot lstat `documento.txt': No such file or directory $ echo $? 1
$ $ $ 1 $ $ 0
65
$ cat boole.sh #!/bin/bash read -p "Informe um nmero e uma letra: " num letra if [ \( "$num" -gt 0 -a "$num" -lt 10 \) -o \( $letra = v \) ] then echo "Acertou a faixa do numero ou a letra." else echo "Errou as duas informaes." fi $ sh boole.sh Informe um nmero e uma letra: 15 v Acertou o faixa do numero ou a letra. $
-eq Igual (equal to ). -gt Maior que (greater than ). -ge Maior ou igual (greater or equal ). -lt Menor que (less than ). -le Menor ou igual (less or equal ). -ne No-igual a (not equal to ).
Universidade Federal Fluminense
66
TELE))) PET
[ var/nmero relao var/nmero ] onde var/nmero indica o contedo da varivel ou um nmero. Exemplo: $ $ 1 $ 1 $ 0 num=10 [ $num -eq 9 ]; echo $? [ $num -le 9 ]; echo $? [ $num -ge 9 ]; echo $?
Outra maneira de realizar o teste colocando var/nmero entre aspas. Dessa forma evitamos a ocorrncia de erros.
[ "var/nmero" relao "var/nmero" ] Exemplo: Observe o que acontece quando a expresso comparada com o valor nulo sem aspas
$ [ $num -ge ]; echo $? bash: [: 10: unary operator expected 2 $ [ "$num" -ge " " ]; echo $? 0
== Igual > Maior que >= Maior ou igual < Menor que <= Menor ou igual != No-igual
A sintaxe :
TELE))) PET
((expresso))
$ num=102 $ let num++ $ echo $num 103 $ num=$[$num + 1] $ echo $num 104 $ num=$((num+1)) $ echo $num 105 $ let num=num+1 $ echo $num 106 $ let num+=4 $ echo $num 110
68
TELE))) PET
comp=$(expr length $senha) if [ "$comp" -lt 6 -o "$comp" -gt 9 ] then echo "Senha Invlida." echo "Por segurana no so aceitas senhas com menos de 6 caracteres ou mais que 9." echo "Informe uma nova senha." else echo "Senha aceita." fi
Os operadores para testes de string podem ser:
Binrios
= - Retorna verdadeiro se as duas strings forem iguais.
Unrios
-z - Retorna verdadeiro se o comprimento da string igual 0. -n - Retorna verdadeiro se o comprimento da string diferente de 0.
$ [ -n $str ] $ echo $? 0
["var/string" relao "var/string"] A preferncia para o uso de aspas foi dada porque geralmente as strings contm espaos em branco. Assim, so evitados erros de interpretao pelo shell.
A sintaxe para a comparao de string segue o mesmo modelo para a comparao numrica:
69
TELE))) PET
-d O arquivo um diretrio. -e O arquivo existe. -f um arquivo normal. -s O tamanho do arquivo maior que zero. -r O arquivo tem permisso de leitura. -w O arquivo tem permisso de escrita. -x O arquivo tem permisso de execuo.
A sintaxe usada deve ser:
$ ls -l arqu1.txt data -rwxrwxrwx 1 pet linux -rw-r--r-1 pet linux drwxr-xr-x 3 pet linux $ [ -d scripts ] $ echo $? 0 $ [ -d arqu1.txt ] $ echo $? 1 $ [ -e arqu1.txt ] $ echo $? 0 $ [ -f arqu1.txt ] $ echo $? 0 $ [ -r data ] $ echo $? 0 $ [ -x data ] $ echo $? 1
161 95 1312
70
TELE))) PET
Ex: Este programa bem simples mostra o uso do if. H um arquivo chamado livro.txt cujo contedo segue abaixo:
read Livro if grep $Livro livro.txt>>/dev/null then echo "O livro $Livro possui `grep $Livro livro.txt|cut -f2` exemplares." else echo "Este livro no est na lista" fi
Obs: O diretrio /dev/null um lugar para onde redirecionamos a sada de um comando quando no desejvel que ela aparea no prompt.
if [expresso]; then comando elif [expresso]; then comando elif [expresso]; then ... comando
else comando fi
72
TELE))) PET
echo "Insira o cdigo DDD: " read cod case $cod in 21) echo "Rio de Janeiro";; 11) echo "So Paulo";; 3[0-8]) echo "Minas Gerais";; *) Echo "Insira outro cdigo";; esac
Deciso com && e || Esses caracteres permitem a tomada de decises de uma forma mais reduzida.
A sintaxe usada :
7.3.1
While
Nesta estrutura feito o teste da condio, em seguida ocorre a execuo dos comandos. A repetio ocorre enquanto a condio for verdadeira.
73
TELE))) PET
condio pode ser um teste, uma avaliao ou um comando. Ex: #!/bin/bash echo "Tabela de Multiplicao do 7: " i=7; n=0; while [ $n -le 10 ] do echo $i x $n = $(($i * $n)) let n++ done
7.3.2
Until
Neste caso, a repetio ocorre enquanto a condio for falsa. Ou seja, primeiramente a condio testada, se o cdigo de retorno for diferente de zero os comandos so executados. Caso contrrio, a execuo do programa continua aps o loop.
until <condio> do <comandos> done condio pode ser um teste, uma avaliao ou um comando. Ex: Este exemplo semelhante ao exemplo anterior do comando while. O que mudou foi a condio de teste. #!/bin/bash echo "Tabela de Multiplicao do 7: " i=7; n=10; until [ $n -eq 0 ] do echo $i x $n = $(($i * $n)) let n-done
7.3.3
For
74
TELE))) PET
break [n] - Este comando aborta a execuo do loop e salta para a prxima instruo aps o loop.
continue [n] - Este comando faz com que o uxo de execuo do programa volte para o incio do loop antes de complet-lo.
Ex: O Exemplo abaixo ilustra o uso de break e do continue
#!/bin/bash echo "Tente acertar o nmero " echo "Dica: Ele est entre 10 e 50. " i=1 while true do echo "Digite o Nmero: " read num if [ $num != 30 ] then echo "Voc errou. Tente outra vez" let i++ continue
Universidade Federal Fluminense
75
TELE))) PET
fi if [ $num == 30 -a $i == 1 ] then echo Voc acertou de primeira. Parabns! break fi if [ $num == 30 ] then echo Voc acertou aps $i tentativas. break fi done
76
TELE))) PET
77
2. A liberdade de estudar como o programa funciona e adapt-lo para as suas necessidades. Acesso ao cdigo-fonte um pr-requisito para esta liberdade. 3. A liberdade de redistribuir cpias de modo que voc possa ajudar ao seu prximo. 4. A liberdade de aperfeioar o programa e liberar os seus aperfeioamentos, de modo que toda a comunidade se benecie. Acesso ao cdigo-fonte um pr-requisito para esta liberdade. importante ressaltar que Software Livre est ligada liberdade de expresso, e no de preo.
78
TELE))) PET
modo digitao ("a"ou "i") modo comando interno (<ESC>) comando na ltima linha (<ESC>":")
n repete o ltimo / ou ?
80
TELE))) PET
Referncias Bibliogrcas
[1] Neves, Julio Cezar, Programao Shell Linux, Editora Brasport, Rio de Janeiro, 2000. [2] Araujo, Jiro, Comandos do Linux - Uso eciente e avanado, Editora Cincia Moderna Ltda., Rio de janeiro, 2001 [3] Tanenbaum, Andrew S., Sistemas Operacionais, Traduo D. A. Polli, USP, 2000. [4] Raimundo, Rodivaldo Marcelo, Curso Bsico de programao em POSIX-Shell Script, Editora Book Express, Rio de janeiro, 2000. [5] Tanenbaum, Andrew S., Organizao Estruturada de Computadores , Terceira edio, Editora Prentice/Hall do Brasil , Rio de Janeiro, 1992.
Sites
[6] Guia focalinux , www.focalinux.org, Este site contm guias sobre GNU/Linux de todos os nveis. [7] Bash FAQ, ftp://ftp.cwru.edu/pub/bash/FAQ, Perguntas e dvidas mais freqentes relacionadas ao Bash. [8] Expresses Regulares , http://guia-er.sourceforge.net, Guia sobre expresses regulares. [9] Lista de discusso , http://br.groups.yahoo.com/group/shell-script, Lista de discusso do yahoogrupos. [10] Shell Script - Por que programar tem que ser divertido, www.aurelio.net, Aurlio Marinho Jargas, pgina pessoal. Contm uma vasta lista para referncias sobre script-shell. [11] Projeto GNU, www.gnu.org, Pgina ocial do projeto GNU [12] www.br-linux.org [13] www.vivaolinux.com.br [14] www.scriptbrasil.com.br
81