You are on page 1of 29

Captulo 1

Por que?
Por que aprender a mexer com linha de comando? O autor sobre o qual se baseia este texto conta a seguinte histria: Alguns anos atrs, tivemos um problema onde eu trabalhava. Havia um disco cujo espao era compartilhado entre vrios usurios, em um de nossos servidores, onde frequentemente cvamos sem espao. Nem tenho que dizer que o sistema operacional que se usava no suportava quotas, ou seja, limites de espao para cada um dos usurios. De qualquer modo, o servidor cava sem espao frequentemente, e as pessoas no conseguiam trabalhar quando isto acontecia. Um de nossos engenheiros de software passou quase um dia inteiro escrevendo um programa em C++ que vericaria todos os diretrios de todos os usurios, somaria todos os tamanhos de arquivo para cada um deles, e faria uma listagem dos resultados. Uma vez que eu era forado a usar este sistema operacional, instalei um ambiente de linha de comando similar ao Linux para ele. Quando soube deste problema, me dei conta que eu podia fazer todo o trabalho que este engenheiro de software tinha penado para fazer em C++ com apenas uma linha: du -s * | sort -nr > $HOME/user_space_report.txt Vemos que h uma boa razo prtica para administradores de sistemas quererem usar Linux ao invs de Windows: ca evidente que a linha de comando oferece uma exibilidade mpar para executar tarefas com apenas uma linha, muito concisa, sem a necessidade de se fazer longos programas para executar determinadas tarefas. O Linux j contm muitos utilitrios de linha de comando com sintaxe simples, que permitem mesmo compor vrios comandos para obter um resultado nal que nenhum deles isoladamente proporcionaria. No entanto, o objetivo deste curso no formar administradores de sistemas (ainda que vocs possam querer vir a ser sysadmins), mas cientistas que usam a computao para fazer cincia. Ento, por que aprender a usar a linha de comando? Atualmente, na rea de simulao computacional, a competio entre grupos por publicaes na rea cientca muito intensa. Hoje, em muitas reas, 1

CAPTULO 1. POR QUE?

indispensvel fazer clculos que envolvem volumes enormes de dados, com quantidades de operaes matemticas que requerem poder computacional da ordem de TeraFLOPs 1 , e isto s alcanado atravs de computao massivamente paralela, onde uma tarefa distribuda entre diversos processadores. O nmero de processadores usado em um clculo em paralelo depende da intensidade de operaes, mas pode chegar at mais de 1000 processadores. Obviamente, ningum ter em casa um tal poder de processamento sua disposio, e nem dinheiro para gastar comprando computadores que possam operar em conjunto e chegar a este nmero impressionante de operaes por segundo. Hoje existem, ao redor do mundo, diversas instalaes que oferecem tal poder computacional para a comunidade cientca, e todas elas tm como sistema operacional o Linux ou uma variante do UNIX, como o AIX, por exemplo. O Linux um sistema que permite acesso remoto aos processadores destas instalaes, ou seja, de nossas casas, podemos nos conectar a estas instalaes e executar programas remotamente. O problema que por uma questo de segurana, de velocidade de comunicao e de maximizao da ecincia de operao destes sistemas, o acesso remoto feito via interfaces que no envolvem elementos grcos, tais como janelas e objetos que se pode copiar e colar com um mouse. O acesso e a movimentao (a passagem de um diretrio para outro, e a manipulao de arquivos dentro destes diretrios) nos sistemas Linux remotos feito, frequentemente, por interfaces somente de texto. Do ponto de vista de ecincia, interfaces grcas so ruins porque ocupam memria e tempo de processamento. Em um sistema onde pode haver duzentos usurios conectados ao mesmo tempo com diversos processos rodando e apenas poucos processadores se dedicam ao gerenciamento de operaes do sistema e de processo de usurios, cada byte de memria e ciclo de CPU valem ouro, e us-los para simplesmente haver uma interface bonitinha um desperdcio. Por outro lado, se formos executar um clculo em uma instalao de supercomputao em outra cidade, estado ou at mesmo pas, possvel, em princpio, enviar todos os elementos grcos via rede para um desktop virtual que ser exibido no computado do usurio. No entanto, a largura de banda necessria para isto muitas vezes proibitiva: mais uma vez, neste tipo de instalao h frequentemente muitos usurios conectados ao mesmo tempo, e enviar elementos grcos para muitos computadores ao mesmo tempo acaba sendo impossvel. Assim, as instalaes de supercomputao, para ns cientcos ou no, no possuem instalado um sistema de janelas, a menos que seu m seja especicamente de visualizao massiva de dados. Em um nvel mais mundano, Interfaces Grcas de Usurios (GUIs) podem at ajudar em muitos casos, mas no so adequadas para todo tipo de tarefa. A impresso que se tem que hoje no a eletricidade dos computadores que os faz funcionar mas, sim, a energia dada pelo movimento e dos cliques no mouse.
1 FLOPs quer dizer FLoating Point Operations per second, ou operaes de ponto utuante por segundo. So operaes que exigem a manipulao de nmeros reais. O prexo Tera signica que temos 1012 destas operaes. Algumas aplicaes requerem poder computacional ainda maior, e j existem diversas mquinas ao redor do mundo que oferecem capacidades de processamento que chegam a PetaFLOPs, ou 1015 operaes de ponto utuante por segundo!

3 A verdade que muitas vezes, pode-se demorar muito mais para fazer coisas com o mouse, que para digit-las atravs de comandos no computador. Uma vez que dominemos a linha de comando, veremos que ela na verdade facilita bastante diversas tarefas. Algum autor, uma vez, disse que quando voc criana, voc usa um computador olhando as gurinhas, e quando voc cresce, voc aprende a ler e a escrever. Bem-vindo maturidade.

CAPTULO 1. POR QUE?

Captulo 2

O que "O Shell"?


De um modo simplicado, o shell um programa que recebe comandos do teclado e os envia ao sistema operacional para execuo. Antigamente, era a nica interface disponvel em um sistema tipo Unix como o Linux. Hoje, existem diversas Interfaces Grcas de Usurio (GUIs 1 ), alm de Interfaces de Comando de Linha (CLIs 2 ) como o shell. Na maioria dos sistemas Linux h um programa chamado bash (um acrnimo para Bourne Again SHell 3 , uma verso melhorada do programa shell original do Unix, sh, escrito por Steven Bourne), que age como o programa de shell. Alm do bash, h outros programas de shell que podem ser instalados em um sistema Linux. Eles incluem os shells 4 ksh, tcsh and zsh.

2.1

O que um Terminal?

Terminal o nome curto para um emulador de terminal. um programa que abre uma janela e permite que voc interaja com o shell. H vrios emuladores de terminal que podem ser usados. A maioria das distribuies de Linux fornecem diversos emuladores, tais como: gnome-terminal, konsole, xterm, rxvt, kvt, nxterm, e eterm.

2.2

Iniciando um Terminal

Seu sistema de gerenciamento de janelas permite que um terminal seja iniciado a partir do menu de aplicativos. D uma olhada na lista de programas para ver
ingls Graphical User Interfaces (N.T.). ingls Command Line Interface (N.T.). 3 Aqui h uma piada geek com o sobrenome de Steven Bourne e a palavra inglesa born, de pronncia similar, que quer dizer nascido. Desta maneira, Bourne Again um trocadilho com a expresso renascido. Este estilo de brincadeira recorrente no mundo Linux, inclusive em nomes de pacotes. 4 De agora em diante, usaremos a expresso shell para nos referirmos simplesmente a um programa de shell.
2 Do 1 Do

CAPTULO 2. O QUE "O SHELL"?

se algo parece um emulador de terminal. Se voc usar o KDE5 , este programa se chama konsole, no Gnome ele se chama gnome-terminal 6. Voc pode iniciar quantos terminais queira, e experimentar com eles. Apesar de existirem diversos tipos de emuladores de terminal, todos eles fazem a mesma coisa: eles lhe do acesso a uma sesso de shell. Algum deles provavelmente se tornar seu favorito, baseado nas caractersticas que voc mais gostar.

2.3

Teclando

OK, vamos teclar um pouco. Abra uma janela de terminal. Voc dever ver um prompt de shell 7 que contm seu nome de usurio e o nome da mquina, seguido de um sinal de dlar. Algo do tipo [me@linuxbox me]$ Excelente! Agora digite alguns caracteres ao acaso e aperte a tecla Enter. [me@linuxbox me]$ kdkjflajfks Se tudo tiver corrido bem, voc dever ter recebido uma mensagem de erro reclamando que o shell no entendeu o que voc escreveu: [me@linuxbox me]$ kdkjflajfks bash: kdkjflajfks: command not found Maravilha! Agora aperte a seta para cima, na parte inferior do seu teclado. Veja que o comando digitado anteriormente, "kdkjajfks", aparece novamente. Temos aqui, ento, o histrico de comandos. Aperte a seta para baixo e voltamos linha em branco. Faa aparecer o comando "kdkjajfks", usando a seta para cima. Agora use as setas para a direita e para a esquerda. Voc pode posicionar o cursor em qualquer lugar da linha de comando. Isto permite que voc corrija erros facilmente com a tecla delete ou a tecla backspace.

5 Um outro sistema de janelas, que se assemelha mais interface Windows, mas consome muito mais recursos do sistema que o Gnome. 6 No Ubuntu Linux, no menu Aplicaes, o gnome-terminal aparece listado simplesmente como Terminal. 7 Prompt uma palavra que remete ideia de prontido.

2.5. USANDO O MOUSE

2.4

Quem voc, Clark Kent?

Se o ltimo caractere do seu prompt for um #, ao invs de um $, voc estar operando como o superusurio, ou usurio root. Isto quer dizer que voc tem privilgios administrativos e pode apagar ou sobrescrever qualquer arquivo de sistema, inclusive arquivos vitais para o funcionamento do Linux, sejam eles arquivos binrios executveis ou arquivos de congurao do sistema. Nem preciso dizer que isto pode ser perigosssimo, no ? A menos que voc precise realmente ter este privilgio, no opere como root.

2.5

Usando o mouse

Apesar de o shell ser uma interface de linha de comando, o mouse de grande utilidade nesta interface. Alm de usar o mouse para rolar a barra lateral da janela e ver texto acima da rea visvel, voc pode copiar textos com o mouse. Posicione o mouse sobre algum comando (por exemplo, kdkjajfks, que voc escreveu anteriormente na janela), aperte o boto direito e arraste o mouse segurando o boto esquerdo. Isto selecionar o texto, mudando-o de cor. Ao acabar de selecionar, solte o boto esquerdo, reposicione seu mouse direita do prompt (o $) e aperte o boto do meio do mouse (se voc estiver trabalhando em um notebook e usando o touchpad, aperte simultaneamente os dois botes do touchpad). O texto que voc copiou dever, neste ponto, ter sido colado na linha de comando. Para execut-lo, pressione enter; se quiser cancelar o comando, basta pressionar CTRL+C (as teclas CTRL e C) simultaneamente.

CAPTULO 2. O QUE "O SHELL"?

Captulo 3

Navegar preciso
Nesta lio, vamos ver trs comandos iniciais: pwd ( imprimir diretrio de trabalho 1 ), cd (mudar de diretrio)2 , e ls (listar arquivos e diretrios)3 . Eles permitiro que voc se mova (navegue) atravs da estrutura de diretrios do Linux e copie e/ou mova arquivos de um diretrio para outro. Se voc nunca trabalhou com uma linha de comando antes, voc dever prestar bastante ateno prxima seo, uma vez que os conceitos expostos a seguir devero ser compreendidos para que voc possa navegar no Linux.

3.1

A organizao do sistema de arquivos

Para quem gosta de Windows e tem alguma familiaridade com ele, os arquivos em um sistema Linux esto organizados no que se chama de estrutura hierrquica de diretrios, de modo semelhando ao sistema operacional de Redmond 4 . Isto quer dizer que os arquivos esto organizados em um padro semelhante a uma rvore de diretrios (chamados de pastas em outros sistemas). Um diretrio pode conter tanto arquivos como outros diretrios dentro de si, e estes diretrios, por sua vez, tambm podem conter outros arquivos e/ou diretrios, e assim por diante 5 . A maioria dos ambientes grcos modernos incluem um programa gerenciador de arquivos, no qual pode-se ver e manipular os contedos do sistema de arquivos. Frequentemente, voc ver o sistema de arquivos representado como na Figura 3.1.
ingls, print working directory. ingls, change directory. 3 Em ingls, list les and directories. 4 No se engane; o MS-DOS, sobre o qual o Windows foi construdo, inspirou-se no Unix para projetar sua estrutura de diretrios, e no o contrrio! 5 Normalmente, um diretrio contido em um outro diretrio chamado de subdiretrio. No entanto, esta nomenclatura especial irrelevante porque (a) todos os diretrios em que normalmente trabalhamos residem dentro de um diretrio inicial e (b) sob um ponto de vista prtico, podemos chegar ao ponto de ter que chamar um diretrio de sub-sub-sub-sub diretrio!
2 Em 1 Em

10

CAPTULO 3. NAVEGAR PRECISO

Figura 3.1: Uma captura de tela de parte de um gerenciador de janelas do Linux, mostrando a estrutura de rvore de diretrios. Uma importante diferena entre o Windows e sistemas operacionais tipo Unix, como o Linux, que o Linux no emprega o conceito de letras de disco, como C:, D:, E: e assim por diante. Letras de disco dividem o sistema de arquivos em diferentes rvores, e cada uma destas divises conhecida como uma partio do disco. No Linux, as parties existem, mas tudo apresentado como uma nica rvore. No Linux, diferentes dispositivos de armazenamento (como drives de CD) podem conter ramos diferentes da rvore de diretrios, mas h sempre apenas uma rvore.

3.2

pwd

Uma vez que uma interface de linha de comando no pode fornecer uma representao grca de um sistema de arquivos, ele deve represent-lo de modo diferente. Pense no sistema de arquivos como um labirinto com vrias salas, e voc est dentro dele. Em um dado instante do seu trabalho, voc est dentro de um diretrio, que eventualmente ser um subdiretrio de outros, e poder ter diretrios em seu interior (salas dentro da sala maior). Dentro deste diretrio, voc pode ver seus arquivos (o equivalente a mveis dentro da sala), o caminho (a porta de sada) para o diretrio logo acima (a sala maior que contm a sala onde voc se encontra), chamado de diretrio anterior 6 , e os caminhos para os subdiretrios do diretrio no qual voc se encontra (as salas menores dentro da sala onde voc se encontra). Bem-vindo ao Pas das Maravilhas, onde cada sala acaba tendo o mesmo tamanho, ou sendo maior que, a sala que a engloba! O diretrio no qual voc se encontra se chama seu diretrio atual ou diretrio de trabalho 7 . Para saber o nome do diretrio de trabalho, use o comando pwd:
Claramente, a coisa ca cansativa e impraticvel. 6 Em ingls, parent directory. 7 Em ingls, working directory, que d origem ao nome do comando pwd.

3.3. O COMANDO CD [me@linuxbox me]$ pwd /home/me

11

Logo que voc zer login em um sistema Linux, o diretrio de trabalho inicial ser o seu diretrio home 8 . neste diretrio, e em seus subdiretrios, que voc guardar seus arquivos pessoais. Na maioria dos sistemas, este diretrio ter o nome /home/seu_nome_de_usurio, mas ele poder ter qualquer nome, de acordo com a deciso organizacional do administrador do seu sistema. Para obter uma listagem dos arquivos no seu diretrio de trabalho, use o comando ls. [me@linuxbox me]$ ls Desktop Xrootenv.0 GNUstep bin GUILG00.GZ hitni123.jpg linuxcmd nedit.rpm nsmail

Voltaremos ao comando ls no prximo captulo. H muitas coisas legais que se pode fazer com o comando ls, mas antes temos que entender um pouco mais sobre caminhos e diretrios.

3.3

O comando cd

Para mudar seu diretrio de trabalho (a sala do labirinto onde voc est em um dado momento), utiliza-se o comando cd. Para faz-lo, digite cd seguido pelo caminho do diretrio de trabalho para onde se deseja ir. Um caminho a rota que voc toma nas ramicaes da rvore (a porta que se abre) para chegar ao diretrio (sala) onde voc deseja entrar. Caminhos podem ser especicados de duas maneiras: por nomes de caminho absolutos ou nomes de caminho relativos. Vamos dar uma olhada em nomes de caminho absolutos primeiro. Um nome de caminho absoluto comea com o diretrio raiz (a entrada de nosso labirinto, que sempre ser /) e segue com as ramicaes da rvore at que o caminho ao diretrio ou arquivo desejado se completem. Por exemplo, h um diretrio no seu sistema em que a maioria dos programas cam instalados. O nome de caminho deste diretrio /usr/bin. Isso quer dizer que, partindo do diretrio raiz (/), h um diretrio chamado usr, que contm um outro diretrio chamado bin. Tentemos a seguinte sequncia de comandos: [me@linuxbox me]$ cd /usr/bin [me@linuxbox bin]$ pwd /usr/bin [me@linuxbox bin]$ ls
8 Palavra

em ingls que quer dizer casa.

12 2to3 2to3-2.6 a2p aalib-config aconnect acpi_fakekey acpi_listen add-apt-repository addpart and muitos more...

CAPTULO 3. NAVEGAR PRECISO lwp-rget lxterm lz lzcat lzma lzmadec lzmainfo m17n-db magnifier

Agora podemos ver que mudamos o diretrio atual de /home/me para /usr/bin e que ele tem diversos arquivos. Notou que o seu prompt mudou? Por uma questo de convenincia, geralmente (mas no sempre - pode-se personalizar isto de acordo com o gosto do fregus), ele geralmente congurado para exibir o nome do diretrio de trabalho. Se um nome de caminho absoluto comea do diretrio raiz (/) e leva ao seu destino nal (o diretrio de trabalho, ou o diretrio para onde se deseja ir), um nome de caminho relativo comea do diretrio de trabalho. Para isto, o Linux tem duas notaes especiais para representar posies relativas na rvore do sistema de arquivos. Estas notaes so . (ponto) e .. (ponto-ponto). A notao . se refere ao prprio diretrio de trabalho e a notao .. se refere ao diretrio anterior ao diretrio de trabalho. Eis como a coisa funciona. Vamos mudar para o diretrio /usr/bin novamente: [me@linuxbox me]$ cd /usr/bin [me@linuxbox bin]$ pwd /usr/bin Agora, digamos que queremos mudar de diretrio, indo do diretrio de trabalho (que no caso /usr/bin para o diretrio anterior (que ser /usr). Poderamos fazer isto de duas maneiras diferentes. Uma delas usar um nome de caminho absoluto: [me@linuxbox bin]$ cd /usr [me@linuxbox usr]$ pwd /usr ou um nome de caminho relativo: [me@linuxbox bin]$ cd .. [me@linuxbox usr]$ pwd /usr

3.3. O COMANDO CD

13

Os dois mtodos so diferentes, mas produzem resultados idnticos. Qual mtodo devemos usar? O que nos der menos trabalho para digitar, obviamente! No to bvio assim? Ento suponhamos que temos a rvore de diretrios da Figura 3.2.

Figura 3.2: Uma rvore de diretrios com vrias ramicaes. Esta rvore bastante ramicada, e o uso da notao .. e a vantagem no uso de diretrios relativos caro bastante claros (esperamos!) depois de analisarmos este exemplo. Antes de comearmos, para avaliarmos sua compreenso do que foi exposto at agora, responda s seguintes perguntas: 1) Qual o nome de usurio? 2) Qual o nome do computador em que o usurio est conectado? 3) Qual seu diretrio home? 4) Qual o diretrio de trabalho? 5) Qual o diretrio anterior ao diretrio de trabalho? 6) Qual o primeiro subdiretrio do diretrio de trabalho? 2) 3) 4) 5) 6) iron /home/mverissi /home/mverissi /home/ Turmas_2012

14

CAPTULO 3. NAVEGAR PRECISO

Na gura, digamos que queremos ir do diretrio de trabalho, que no caso /home/mverissi (basta ver a sada do comando pwd!) e ir para o subdiretrio Turmas_2012/Informatica/Listas/Lista1. Teramos que digitar o seguinte comando: mverissi@iron:~$ cd Turmas_2012/Informatica/Listas/Lista1 mverissi@iron:~/Turmas_2012/Informatica/Listas/Lista1$ Agora, digamos que eu quisesse ir para o subdiretrio Notas_de_aula, dentro do diretrio Informatica. H trs maneiras de se fazer isto. A primeira seria digitar o nome de caminho completo: mverissi@iron:~/Turmas_2012/Informatica/Listas/Lista1$ cd /home/mverissi/Turmas_2012/Informatica/Notas_de_aula mverissi@iron:~/Turmas_2012/Informatica/Notas_de_aula$ A segunda seria primeiro subir dois diretrios, para chegar ao diretrio Informatica e depois descer ao diretrio Notas_de_aula: mverissi@iron:~/Turmas_2012/Informatica/Listas/Lista1$ cd /../../ mverissi@iron:~/Turmas_2012/Informatica$ cd Notas\_de\_aula mverissi@iron:~/Turmas_2012/Informatica/Notas\_de\_aula$ pwd /home/mverissi/Turmas_2012/Informatica/Notas_de_aula Mas, talvez o modo mais fcil seja, ao invs de darmos os dois comandos cd, juntarmos os dois em um s: mverissi@iron:~/Turmas_2012/Informatica/Listas/Lista1\$ cd /../../Notas\_de\_aula mverissi@iron:~/Turmas_2012/Informatica/Notas\_de\_aula\$ pwd /home/mverissi/Turmas_2012/Informatica/Notas_de_aula O ltimo mtodo, que produz um resultado idntico aos dois mtodos anteriores, nos leva ao diretrio desejado com alguns toques a menos no teclado. H um ponto importante aqui, que pode acabar passando despercebido. Quando estvamos no diretrio home (/home/mverissi) e quisemos passar para o diretrio Turmas_2012, omitimos o diretrio ./ de nosso caminho relativo. Isto acontece porque o diretrio ./ j implcito quando usamos o comando cd, e em quase todos os casos de comandos que tenham um diretrio como argumento, podemos omiti-lo. H apenas um caso especial, de que trataremos mais para a frente.

Respostas: 1) mverissi

3.4. ALGUNS ATALHOS

15

3.4

Alguns atalhos

Se voc digitar cd sem nenhum diretrio-alvo, voc ir para o seu diretrio home. Um atalho relacionado a este cd nome_de_usurio. Neste caso, cd ir lhe direcionar para o diretrio home do usurio especicado. Ao digitarmos cd -, vamos para o diretrio onde estvamos antes de estarmos no diretrio de trabalho.

3.5

Fatos importantes sobre nomes de arquivo

1. Nomes de arquivo que comecem com um ponto (.) so arquivos ocultos. No confundamos isto com a notao . para os diretrios, pois so duas coisas diferentes. Isto s quer dizer que ls no vai list-los, a menos que voc digite ls -a. Quando sua conta de usurio foi criada, vrios arquivos ocultos foram colocados no seu diretrio home para congurar certas coisas para sua conta. Mais tarde, vamos ver com mais detalhes como se pode personalizar o seu ambiente. Alguns programas tambm colocaro arquivos de congurao no seu diretrio home como arquivos ocultos. 2. Nomes de arquivos e de diretrios no Linux so sensveis a maisculas e minsculas, ao contrrio do que acontece no Windows. Ento, Arquivo, arquivo, ARQuivo, ArqUIVO e ArQuIvO so coisas diferentes. Cuidado com maisculas e minsculas! 3. Ao contrrio do que ocorre no Windows, no Linux no existe o conceito de extenso de arquivo. Voc pode dar o nome que quiser aos seus arquivos. Entretanto, ainda que o Linux, como sistema operacional, no se importe com a extenso dos arquivos, muitos programas se importam. 4. Apesar de o Linux ter suporte a nomes de arquivos longos que contenham espaos e caracteres acentuados, limite caracteres no-alfanumricos a - (ex.: dia-tres), . (ex.: dia.tres) e o underscore (conhecido incorretamente como sublinhado, _; ex: dia_tres). Ainda mais importante, no coloque espaos nos nomes de arquivos. Se voc quiser representar espaos entre palavras em um nome de arquivo, faa-o com o underscore. Voc vai se agradecer mais tarde.

16

CAPTULO 3. NAVEGAR PRECISO

Captulo 4

Uma visita guiada


Chegou a hora de fazermos uma visita guiada pelos diretrios do Linux. A Tabela 4.1 lista lugares interessantes de serem explorados. A lista no , absolutamente, completa, mas estes so os lugares mais interessantes de um sistema Linux. Para cada um dos diretrios abaixo, faa o seguinte: cd para o diretrio listado Use ls para obter uma listagem do contedo do diretrio de trabalho. Se algum arquivo lhe deixar curioso, use o comando file para determinar o que ele contm - dados binrios ou de texto. Para arquios de texto, use o comando less para visualiz-los. Para sair do comando less, digite q. Tabela 4.1: Diretrios interessantes no Linux, e seus contedos Diretrio / /boot Descrio Este o diretrio raiz, onde comea o sistema de arquivos. Na maioria das vezes, o diretrio raiz contm apenas subdiretrios. Neste diretrio, o Linux mantm os arquivos do kernel e do boot loader (o programa onde eventualmente escolhemos qual sistema operacional carregar, e que contm as localizaes dos arquivos de inicializao para os sistemas operacionais presentes no sistema). O kernel est contido em um arquivo chamado vmlinuz.

17

18

CAPTULO 4. UMA VISITA GUIADA

Diretrios interessantes no Linux, e seus contedos (continuao) Diretrio /etc Descrio O diretrio /etc contm os arquivos de congurao do sistema Linux como um todo. Todos os arquivos neste diretrio devem ser arquivos de texto, que sero lidos pelos diferentes programas invocados pelo sistema. Alguns arquivos de especial interesse so: /etc/passwd O arquivo passwd contm as informaes essenciais para cada usurio, tais como alguns dados como nome completo, telefone e sala onde o usurio trabalha, alm do grupo de sistema ao qual pertence. neste arquivo que residem as denies de quais os usurios com acesso ao sistema. /etc/fstab O arquivo fstab contm uma tabela de dispositivos que so montados e acessveis quando o seu sistema inicializa. Este arquivo dene, por exemplo, seus drives de disco. /etc/hosts Este arquivo lista os nomes de servidores de e endereos de rede (IP) que so conhecidos intrinsecamente pelo sistema, isto , que no precisam de consulta a um servidor de nomes para que sejam encontrados. /etc/init.d Este diretrio contm os scripts (arquivos com sequncias de instrues) que inicializam diversos servios do sistema, que geralmente so carregados na hora da inicializao do sistema como um todo. /bin,/usr/bin Estes dois diretrios contm a maioria dos programas executveis do sistema. O diretrio /bin tem os programas essenciais operao do sistema operacional, e o diretrio /usr/bin contm programas que, em geral, sero invocados ou pelos usurios, ou por programas invocados pelos usurios. O diretrio sbin e seus subdiretrios contm programas destinados a uso pelos administradores do sistema, geralmente pelo usurio. No entanto, determinados usurios que no sejam administradores podem ter acesso a estes programas, a critrio do administrador, atravs do comando sudo. Estes usurios so denominados sudoers.

/sbin,/usr/sbin

19 Diretrios interessantes no Linux, e seus contedos (continuao) Diretrio /usr Descrio O diretrio /usr contm uma srie de coisas que servem de apoio a aplicativos a serem invocados pelos usurios. Entre estas coisas, encontram-se: /usr/share/X11 Arquivos de suporte ao sistema X Windows - o sistema de janelas do Linux. /usr/share/dict Dicionrios para o vericador ortogrco aposto que voc no sabia que o Linux tem um ;). Procure, no Google ou no seu sistema, caso estejam instalados, as pginas de manual (man pages) dos programas look e aspell. /usr/share/doc Arquivos de documentao diversos, em vrios formatos diferentes. /usr/share/man Aqui cam as pginas de manual (man pages), com informaes sobre as sintaxes dos programas instalados. /usr/src Arquivos de cdigo-fonte. A partir deles, possvel recompilar os cdigos de programas que estejam instalados no sistema, inclusive o kernel - o cdigo completo do kernel do Linux estar neste diretrio. /usr/local O diretrio /usr/local, e seus subdiretrios, so utilizados para a instalao de software e outros arquivos para uso apenas na mquina local. O que isto quer dizer realmente que o software instalado aqui no faz parte, ocialmente, da distribuio, que geralmente instalado em /usr/bin. Toda vez que algum programa de seu interesse for instalado no sistema, por uma questo de organizao somente, ele deve ser instalado em algum diretrio dentro de /usr/local. Geralmente, o diretrio de escolha padro /usr/local/bin. O diretrio /var contm arquivos que mudam medida que o sistema operacional executado. Estes arquivos contm, entre outras coisas: /var/log Diretrio que contm os arquivos de atividade no sistema (log les). Estes arquivos so atualizados medida em que o sistema executado. de bom tom olhar os arquivos neste diretrio de tempos em tempos, uma vez que eles contm, alm de noticaes de erro dos programas sendo executados, a atividade dos usurios do sistema. /var/spool Este diretrio usado para guardar os arquivos que so jogados em las de processos, tais como envio de mensagens de e-mail e trabalhos de impresso. Quando um e-mail chega para um usurio no sistema local de gerenciamento (supondo que existe algum sistema local de gerenciamento de e-mail, as mensagens so inicialmente armazenadas em /var/spool/mail.

/var

20

CAPTULO 4. UMA VISITA GUIADA

Diretrios interessantes no Linux, e seus contedos (continuao) Diretrio /lib /home Descrio Aqui so guardadas as bibliotecas compartilhadas (semelhantes s DLLs do Windows).a O diretrio /home onde os usurios mantm seus arquivos de trabalho (ou no...) pessoais. Geralmente o nico lugar onde os usurios podem criar e apagar arquivos, o que ajuda a manter o sistema bonitinho e arrumadinho :-) Este o Olimpo do sistema Linux, onde mora o superusurio do sistema. /tmp um diretrio onde os programas podem escrever arquivos temporrios, que podem ser removidos aps seu uso sem causar problemas ou prejuzos a usurios, ou ao prprio sistema. O diretrio /dev um diretrio bastante especial, uma vez que ele no contm arquivos no sentido estrito da palavra. Em vez disso, ele contm dispositivos que so teis ao sistema. No Linux, assim como no Unix, os dispositivos so tratados como arquivos. Voc pode ler e escrever de/em dispositivos como se eles fossem arquivos. Por exemplo, /dev/fd0 o primeiro dispositivo de disquetes (se o seu sistema ainda for pr-histrico), e /dev/sda (/dev/hda em sistemas mais antigos) o primeiro disco rgido do sistema, caso haja mais de um. Todos os dispositivos com os quais o kernel seja capaz de lidar estaro presentes aqui. O diretrio /proc tambm especial, pois tambm no contm arquivos. Em verdade, este diretrio um pouco fantasma, pois ele no existe, realmente - ele completamente virtual. O diretrio /proc contm diversos buraquinhos para espiar o kernel. H um grupo de entradas numeradas neste diretrio, que correspondem a todos os processos em execuo no sistema. Alm disso, h uma srie de entradas com nomes que permitem o acesso congurao corrente do sistema. Muitas destas entradas podem ser visualizadas com cat, more ou less. Experimente visualizar o arquivo /proc/cpuinfo com o comando less. Ele lhe dar informaes que o kernel tem sobre a sua CPU.

/root /tmp

/dev

/proc

21

Diretrios interessantes no Linux, e seus contedos (continuao) Diretrio /media,/mnt Descrio Finalmente, chegamos ao diretrio /media, um diretrio normal, mas utilizado de um modo especial. Como vimos no Captulo 2, os diferentes dispositivos de armazenamento (tais como os discos rgidos) so ligados rvore do sistema operacional em diferentes lugares. O processo de ligao de um dispositivo rvore chamado de montagem 1 Para que um dispositivo que disponvel, ele deve inicialmente ser montado. Quando o Linux inicializa, ele l uma lista de instrues de montagem no arquivo /etc/fstab, que descreve qual dispositivo deve ser montado em cada ponto da rvore do sistema. Isto d conta dos discos rgidos xos do computador, mas pode ser que um usurio tambm queira usar dispositivos removveis, tais como discos rgidos externos, leitores de CD/DVD portteis, e pendrives. Uma vez que estes dispositivos so removveis, eles precisam ser montados no momento de sua insero no sistema, em tempo real, e desmontados no momento de sua remoo fsica. O diretrio /media usado pelos mecanismos automticos de montagem encontrados nas distribuies atuais de Linux. Em sistemas que requeiram montagens manuais de dispositivos removveis, o diretrio /mnt um ponto montagem bastante conveniente para estes dispositivos temporrios. Voc frequentemente encontrar os diretrios /mnt/usb0 e /mnt/cdrom. Para ver quais dispositivos, removveis ou no, esto montados em um dado momento no sistema, existe o comando mount.

22

CAPTULO 4. UMA VISITA GUIADA

Tem um arquivo meio estranho no meu mingau...


Durante nossa visita, voc provavelmente viu alguns arquivos meio estranhos, principalmente nos diretrios /boot e /lib. Quando listados com o comando ls -l, voc pode ter visto algo do tipo: lrwxrwxrwx 25 Jul 3 16:42 System.map -> /boot/System.map-2.0.36-3 -rw-r-$\,$-r-$\,$- 105911 Oct 13 1998 System.map-2.0.36-0.7 -rw-r-$\,$-r-$\,$- 105935 Dec 29 1998 System.map-2.0.36-3 -rw-r-$\,$-r-$\,$- 181986 Dec 11 1999 initrd-2.0.36-0.7.img -rw-r-$\,$-r-$\,$- 182001 Dec 11 1999 initrd-2.0.36.img lrwxrwxrwx 26 Jul 3 16:42 module-info -> /boot/module-info-2.0.36-3 -rw-r-$\,$-r-$\,$- 11773 Oct 13 1998 module-info-2.0.36-0.7 -rw-r-$\,$-r-$\,$- 11773 Dec 29 1998 module-info-2.0.36-3 lrwxrwxrwx 16 Dec 11 1999 vmlinuz -> vmlinuz-2.0.36-3 -rw-r-$\,$-r-$\,$- 454325 Oct 13 1998 vmlinuz-2.0.36-0.7 -rw-r-$\,$-r-$\,$- 454434 Dec 29 1998 vmlinuz-2.0.36-3 Note os arquivos System.map,module-info e vmlinuz. Viu como aparecem notaes estranhas para eles, depois de seus nomes? Estes arquivos so chamados ligaes simblicas 2 . Ligaes simblicas so um tipo especial de arquivos que apontam para outro. Com ligaes simblicas, possvel que um nico arquivo tenha vrios nomes diferentes. A coisa funciona assim: sempre que o sistema receber um nome de um arquivo que seja uma ligao simblica, ele o mapeia de forma transparente para o usurio ao arquivo para o qual ele aponta. E para que serve isto? Isto bastante til, na verdade. Vamos considerar a listagem anterior, que o diretrio /boot de um sistema Red Hat 5.2 antigo. Podemos ver, na listagem, os arquivos vmlinuz-2.0.36-0.7 e vmlinuz-2.0.36-3. estes nomes de arquivos sugerem que tanto a verso 2.0.36-0.7 como a 2.0.36-3 esto presentes no sistema. Uma vez que os nomes de arquivos contm o nmero da verso, fcil ver as diferenas na listagem do diretrio. No entanto, isto confundiria os programas que precisassem de um nome xo para o arquivo do kernel. Estes programas poderiam esperar que o kernel se chamasse, simplesmente, "vmlinuz". Aqui entra a beleza das ligaes simblicas; ao criar uma ligao simblica chamada vmlinuz, que aponta para vmlinuz-2.0.36-3, resolvemos o problema. O comando para criar ligaes simblicas se chama ln.

2 Em

ingls, symbolic links.

Captulo 5

Manipulando arquivos
Nesta lio, aprenderemos os seguintes comandos: cp - para copiar arquivos e diretrios mv - para mover ou renomear arquivos e diretrios rm - para remover (apagar) arquivos e diretrios mkdir - para criar diretrios Estes quatro comandos esto entre os mais usados entre todos os comandos do Linux. So comandos bsicos para a manipulao tanto de arquivos como de diretrios. Algumas tarefas feitas por este comando so mais facilmente executadas usando-se um gerenciador de arquios grco. Com um gerenciador grco de arquivos, consegue-se arrastar e soltar um arquivo de um diretrio a outro, cortar e colar arquivos, apag-los, e por a vai. Ento, por que usar estes programas antigos? de comando de linha? A resposta : porque eles tm mais poder e exibilidade. Ainda que seja fcil executar tarefas com um gerenciador grco, tarefas complicadas podem ser muito mais fceis com programas de comando de linha. Por exemplo, no comando de linha pode-se copiar todod os arquivos com uma dada extenso para outro, mas somente aqueles que no existem no diretrio de destino, ou ento aqueles que so mais novos que os j existentes com o mesmo nome no diretrio de destino. Isto seria bem mais difcil com um gerenciador grco. Alm disto, quando enfrentarmos situaes de acesso remoto, conforme explicadas no Captulo 1, no haver gerenciador grco para executar tarefas. E se vamos trabalhar com simulao computacional em larga escala, que muito importante hoje em dia na rea acadmica, certamente vamos nos defrontar com este tipo de situao. Com a linha de comando, isto torna-se muito simples, uma vez que se conhea os comandos e opes adequadas: 23

24

CAPTULO 5. MANIPULANDO ARQUIVOS

[me@linuxbox me]$ cp -u *.html destination Vamos ver, ento, exemplos de uso destes comandos:

5.1

Caracteres coringa

Antes de comear com os comandos, vale a pena dar uma palavrinha sobre uma caracterstica do shell que os faz to poderosos. Uma vez que o shell usa muito os nomes de arquivos, ele separa alguns caracteres especiais para ajudar a especicar rapidamente grupos de nomes. Estes caracteres especiais se chamam caracteres coringa 1 . os caracteres coringa permitem que se escolha arquivos baseado em padres de caracteres. A Tabela 5.1 lista os caracteres coringa e o que eles selecionam: Tabela 5.1: Resumo de caracteres coringa e seus signicados Caractere coringa * ? [characters ] Signicado Seleciona arquivos cujo nome contenha qualquer combinao de caracteres (todos os arquivos) Seleciona arquivos cujo nome contenha quaisquer caracteres com uma nica ocorrncia Seleciona arquivos cujo nome contenha qualquer caractere que esteja na lista de caracteres characters . O conjunto de caracteres tambm pode ser expressado como uma das classes de caracteres POSIX listadas abaixo: [:alnum:] - Caracteres alfanumricos [:alpha:] - Caracteres alfabticos [:digit:] - Numerais [:upper:] - Caracteres alfabticos maisculos [:lower:] - Caracteres alfabticos minsculos [!characters ] Seleciona arquivos cujo nome contenha qualquer caractere que no seja parte da lista characters

Com caracteres coringa, possvel construir critrios de seleo bastante sosticados para nomes de arquivo. A Tabela 5.2 demonstra alguns exemplos de padres e o que eles selecionam: Pode-se usar caracteres coringa com qualquer comando que aceite nomes de arquivos como argumentos.
1 Em

ingls, wildcards.

5.2. CP Tabela 5.2: Exemplos de uso de caracteres coringa Padro * g* b*.txt Data???

25

[abc]* [[:upper:]]*

BACKUP.[[:digit:]][[:digit:]]

*[![:lower:]]

Correspondncias Todos os nomes de arquivos Todos os nomes de arquivos que comecem com o caractere "g" Todos os nomes de arquivos que comecem com o caractere "b"e terminem com os caracteres ".txt" Todos os nomes de arquivos que comecem com os caracteres "Data", seguidos de exatamente trs caracteres mais Todos os nomes de arquivos que comecem com "a"ou "b"ou "c", seguidos de quaisquer outros caracteres Todos os nomes de arquivos que comecem com uma letra maiscula. Este um exemplo de uma classe de caracteres. Outro exemplo de classes de caracteres. Este padro seleciona qualquer nome de arquivo que comece com os caracteres "BACKUP.", seguidos de exatamente dois numerais. Qualquer nome de arquivo que no termine com uma letra minscula

5.2

cp

O programa cp copia arquivos e diretrios. Em sua forma mais simples, ele copia um nico arquivo: [me@linuxbox me]$ cp arq1 arq2 Ele tambm pode ser usado para copiar mltiplos arquivos (e/ou diretrios) para um diretrio diferente: [me@linuxbox me]$ cp arq...diretrio_de_destino Uma observao sobre a notao utilizada: . . . signica que um item pode ser repetido uma ou mais vezes. Outros exemplos teis de cp e de suas opes incluem:

26

CAPTULO 5. MANIPULANDO ARQUIVOS Tabela 5.3: Exemplos para o comando cp Comando cp arq1 arq2 Resultados Copia o contedo do arquivo arq1 em arq2. Se o arquivo arq2 no existir, ele ser criado; seno, arq2 ser sobrescrito sem nenhum aviso, com o contedo de arq2 . Semelhante ao descrito acima. No entanto, uma vez que a opo -i (interativo) tenha sido especicada, se arq2 existir, o usurio ser questionado antes que arq2 seja sobrescrito com o contedo de arq1. Copia o contedo de arq1 para um diretrio dir1. O arquivo criado (ou sobrescrito) em dir1 ter o nome arq1. Copia o contedo do diretrio dir1. Se o diretrio dir2 no existir, ele ser criado. Seno, um diretrio chamado dir1 ser criado dentro do diretrio dir2.

cp -i arq1 arq2

cp arq1 dir1

cp -R dir1 dir2

5.3

mv

O comando mv move ou renomeia arquivos e diretrios, dependendo de como ele for usado. Ele tanto mover um ou mais arquivos e/ou diretrios para um diretrio diferente, inexistente ou no, como renomear um arquivo ou diretrio. Para renomear um arquivo, seu uso : [me@linuxbox me]$ mv arq1 arq2 Para mover arquivos (e/ou diretrios) para um diretrio diferente: [me@linuxbox me]$ mv arq ...dir A Tabela 5.4 mostra exemplos e opes do comando mv:

5.4. RM Tabela 5.4: Exemplos do comando mv Comando mv arq1 arq2

27

mv -i arq1 arq2

mv arq1 arq2 arq3 dir1

mv dir1 dir2

Resultados Se o arquivo arq2 no existir, ento arq1 renomeado para arq2. Se o arquivo arq2 existir, seu contedo ser sobrescrito com o contedo do arquivo arq2, sem nenhum aviso. Semelhante ao descrito acima. No entanto, uma vez que a opo -i for especicada, questiona-se o usurio, se arq2 existir, se ele deve ser sobrescrito com o contedo de arq1. Os arquivos arq1, arq2, arq3 so movidos para o diretrio dir1. Se dir1 no existir, mv encerrar sua ao com um aviso de erro. Se dir2 no existir, ento dir1 renomeado para dir2. Se dir2 existir, o diretrio dir1 ser movido para dentro do diretrio dir2.

5.4

rm

O comando mv remove (apaga) arquivos e/ou diretrios. [me@linuxbox me]$ rm arq... Tambm pode ser usado para apagar diretrios: [me@linuxbox me]$ rm -r dir... A Tabela 5.5 mostra alguns exemplos e opes para o comando rm. Tabela 5.5: Exemplos para o comando rm Comando rm arq1 arq2 rm -i arq1 arq2 Resultados Apaga arq1 e arq2. Semelhante ao descrito acima. No entanto, uma vez que a opo -i (interativo) for especicada, o usurio ser questionado antes de um arquivo ser apagado. Apaga os diretrios dir1 e dir2, juntamente com todo o seu contedo.

rm -r dir1 dir2

28

CAPTULO 5. MANIPULANDO ARQUIVOS

Muito cuidado com o comando rm!


O Linux no possui um comando para recuperar arquivos apagados. Uma vez que voc tenha apagado algo com rm... puf! J era. Voc pode fazer estragos enormes com o comando rm, especialmente se voc o usar em conjunto com caracteres coringa. Antes de usar rm com caracteres coringa, experimente este truque bastante til: verique o efeito de sua seleo usando, ao invs de rm, o comando ls. Com isto, voc poder ver o efeito dos caracteres coringa que voc escolheu antes de apagar os arquivos denitivamente. Depois de testar sua seleo com ls e certicar-se de que est correto, voc poder usar a seta para cima para fazer o comando ls aparecer novamente, mover o cursor at o comeo da linha e apagar ls, substituindo-o pelo comando rm.

5.5

mkdir

O comando mkdir usado para criar diretrios. Para us-lo, digite simplesmente [me@linuxbox me]$ mkdir dir...

5.6

Usando comandos com caracteres coringa

Uma vez que os comandos que acabamos de ver aceitam mltiplos nomes de arquivos e diretrios como argumentos, voc poder usar caracteres coringa para especicar nomes de arquivos com todos estes comandos. A Tabela 5.6 mostra alguns exemplos.

5.6. USANDO COMANDOS COM CARACTERES CORINGA

29

Tabela 5.6: Exemplos de comandos usando caracteres coringa Comando cp *.txt arquivos_de_texto Resultados Copia todos os arquivos no diretrio de trabalho com nomes terminando com os caracteres .txt para um diretrio chamado arquivos_de_texto. Move o subdiretrio meu_dir, e todos os arquivos terminando com os caracteres .bak no diretrio anterior ao diretrio de trabalho, para um diretrio existente chamado meu_novo_dir. Apaga todos os arquivos no diretrio de trabalho que terminem com o caractere . Alguns programas de edio de texto criam arquivos de backup usando este esquema de nomes. O uso deste comando eliminar todos eles do diretrio de trabalho.

mv meu_dir ../*.bak meu_novo_dir

rm *~