19.04.2013 Views

Curso Básico de Shell Curso de Linux - Scix 2006 Instituto de Física ...

Curso Básico de Shell Curso de Linux - Scix 2006 Instituto de Física ...

Curso Básico de Shell Curso de Linux - Scix 2006 Instituto de Física ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Curso</strong> <strong>Básico</strong> <strong>de</strong> <strong>Shell</strong><br />

<strong>Curso</strong> <strong>de</strong> <strong>Linux</strong> - <strong>Scix</strong> <strong>2006</strong><br />

<strong>Instituto</strong> <strong>de</strong> <strong>Física</strong><br />

da<br />

Universida<strong>de</strong> <strong>de</strong> São Paulo<br />

Roberto Parra<br />

27 <strong>de</strong> julho <strong>de</strong> <strong>2006</strong><br />

1


Sumário<br />

1 PREFÁCIO 3<br />

2 PRIMEIROS PASSOS 4<br />

3 ARQUIVOS 4<br />

4 ROTAS E NOMES DE ARQUIVOS 6<br />

5 COMANDOS 6<br />

6 OPÇõES 7<br />

7 ARGUMENTOS 8<br />

8 ROTAS HIERÁRQUICAS 8<br />

9 SHELL PREFERIDA: BASH 9<br />

10 NAVEGANDO PELO SISTEMA DE ARQUIVOS: CD 11<br />

11 TRABALHANDO COM DIRETÓRIOS: RMDIR, MKDIR, LS 11<br />

12 MOVENDO ARQUIVOS: MV 13<br />

13 COPIANDO ARQUIVOS: CP 14<br />

14 CRIANDO NOVOS COMANDOS: ALIAS 15<br />

15 MANIPULANDO ARQUIVOS: REDIRECIONAMENTO 17<br />

16 PROCURANDO ARQUIVOS: FIND 18<br />

17 LISTANDO O COTEÚDO DE ARQUIVOS: CAT 20<br />

18 SUBSTITUINDO TEXTO: SED 20<br />

19 PROGRAMANDO 21<br />

A SciX 23<br />

B Recursos 23<br />

2


1 PREFÁCIO<br />

A maior dificulda<strong>de</strong> que uma pessoa contemporânea enfrenta ao migrar do ruimDOS 1 para o <strong>Linux</strong> é certamente o<br />

vício que a interface gráfica impõe. Enquanto é totalmente possível utilizar este último igualmente com a interface<br />

gráfica, é na interface <strong>de</strong> texto puro que conseguimos pináculos <strong>de</strong> produtivida<strong>de</strong>.<br />

Deve-se sempre ter em mente, que uma interface gráfica disponibiliza somente os recursos e opções que aquele grupo<br />

ou pessoa que a programaram acham que precisamos. Na interface <strong>de</strong> linha <strong>de</strong> comando, entretanto temos à nossa<br />

disposição, a totalida<strong>de</strong> das opções disponíveis, tornando-a insuperavelmente flexível.<br />

Ao contrário daquilo que po<strong>de</strong>ríamos, numa licença poética às avessas, chamar <strong>de</strong> contraparte do terminal, no ruim-<br />

DOS, qualquer interpretador <strong>de</strong> comandos no linux é totalmente programável e a<strong>de</strong>quável aos mais variados ambientes<br />

e possibilida<strong>de</strong>s <strong>de</strong> configuração.<br />

Nestes módulos básicos apresentaremos a interface <strong>de</strong> texto, a temida por alguns, "linha <strong>de</strong> comando", e bem poucos<br />

comandos, o suficiente apenas para po<strong>de</strong>rmos prosseguir com o curso, <strong>de</strong>mostrando que embora existam várias<br />

<strong>de</strong>zenas <strong>de</strong>les, utilizaremos com freqüência apenas cerca <strong>de</strong> 6 comandos, <strong>de</strong> modo a própria <strong>de</strong>senvoltura propiciará<br />

ocasiões <strong>de</strong> se <strong>de</strong>scobrir novos comandos e modos <strong>de</strong> utilizá-los.<br />

Bem Vindos à gran<strong>de</strong> aventura do conhecimento !<br />

Roberto Parra<br />

1 Utilizaremos a versão pejorativa do nome do sistema operacional "Microsoft (r) Windows (TM)"porque entre outras razões, não gostamos <strong>de</strong><br />

ficar per<strong>de</strong>ndo tempo <strong>de</strong> digitar tantos "(r)"e "(TM)", como que se mencionando-os estivéssemos subtraindo alguma coisa <strong>de</strong> seus donos. Somos<br />

partidários da filosofia "copyleft", totalmente FreeSource do movimento GNU.<br />

3


2 PRIMEIROS PASSOS<br />

<strong>Shell</strong> é como chamaremos todo programa <strong>de</strong>dicado a interpretar comandos, vindos ou não <strong>de</strong> digitação humana, para o<br />

sistema operacional. É também a primeira (e em nossa opinião ainda a mais eficaz) interface com o OS imediatamente<br />

subjacente.<br />

Assim, a shell é o programa que recebe comandos do ser humano operador do sistema, interpreta-os como funções<br />

disponíveis no núcleo, efetuando <strong>de</strong>ssa forma, a função requisitada. Esses comandos po<strong>de</strong>m <strong>de</strong> fato vir da interação<br />

com um ser humano na forma <strong>de</strong> comandos digitados pelo teclado, ou <strong>de</strong> qualquer outro dispositivo com as mesmas<br />

características como portas USB, touchscreens 2 , etc.<br />

É interessante ressaltar que a shell trabalha com entrada <strong>de</strong> texto. Desse modo, um mouse não lhe serve como dispositivo<br />

<strong>de</strong> entrada 3 , pois a informação fornecida por esse tipo <strong>de</strong> aparelho consiste em pares <strong>de</strong> coor<strong>de</strong>nadas <strong>de</strong><br />

modo gráfico, e da condição <strong>de</strong> pressionado ou não <strong>de</strong> seus botões. Para trabalhar com mouse, é necessário uma outra<br />

interface, que será tratada em outro módulo do curso.<br />

Tudo no computador se resume em informação: os programas são instruções que o processador enten<strong>de</strong> e portanto é<br />

capaz <strong>de</strong> executar. Seus dados, figuras, sons, etc são também coleções <strong>de</strong> unida<strong>de</strong>s <strong>de</strong> informação 4 . A essas coleções<br />

<strong>de</strong> unida<strong>de</strong>s informacionais (bytes) chamaremos genericamente arquivos.<br />

3 ARQUIVOS<br />

Um arquivo para o <strong>Linux</strong> é na verda<strong>de</strong> uma pequena lista <strong>de</strong> informações sobre o que normalmente se pensa que é <strong>de</strong><br />

fato o arquivo: essa lista contém entre outras coisas o en<strong>de</strong>reço físico no disco rígido (por exemplo) on<strong>de</strong> começa a<br />

fila <strong>de</strong> bytes que é o "conteúdo"do arquivo. Outras informações <strong>de</strong>ssa tabela são por exemplo; datas do último acesso,<br />

criação, última modificação, permissões <strong>de</strong> acesso e muitas outras, como ilustrativamente foi esquematizado na seguinte<br />

figura :<br />

2 é muito difícil, e com o passar do tempo temo, praticamente impossível evitar estrangeirismos quando o assunto é informática. Muitos dos<br />

termos são impossíveis <strong>de</strong> serem traduzidos por apenas uma palavra como é o caso da maioria dos termos em inglês. Nosso idioma não possui<br />

mecanismos <strong>de</strong> construção <strong>de</strong> palavras novas por aglutinação como o alemão, <strong>de</strong> modo que qualquer tradução que faça sentido toma, freqüêntemente<br />

várias palavras, tornando <strong>de</strong>ssa forma seu uso impraticável.<br />

3 É possível configurar um terminal para que possamos utilizar o mouse como por exemplo selecionar e copiar trechos <strong>de</strong> texto. Apesar do autor<br />

entretanto, achar muito pouco prático, esta é mais uma ocasião em que o <strong>Linux</strong> <strong>de</strong>monstra flexibilida<strong>de</strong>.<br />

4 na era dos computadores pessoais, <strong>de</strong>finiu-se como unida<strong>de</strong> padrão <strong>de</strong> memória, um conjunto <strong>de</strong> 8 bits (unida<strong>de</strong>s <strong>de</strong> informação binária; do<br />

inglês dígito binário: BInary digIT) chamadas <strong>de</strong> byte. Não há qualquer razão especial para se usar conjuntos <strong>de</strong> 8 bits além das puramentes<br />

históricas. Hoje todos os processadores são direcionados para se valerem da arquitetura <strong>de</strong> múltiplos <strong>de</strong> bytes, que o mercado solidificou como<br />

padrão.<br />

4


1031−89−1317−16<br />

<strong>2006</strong>0601−211007<br />

<strong>2006</strong>0201−211118<br />

rw−r−−r−−<br />

um arquivo<br />

FIGURA 1: estrutura <strong>de</strong> um arquivo<br />

En<strong>de</strong>reco Fisico no Disco Rigido<br />

cyl: 1031 hed: 89 sec: 1317 cls: 16<br />

amanha,<br />

~<br />

sera ´ um lindo dia,<br />

da mais louca alegria, que<br />

se possa imaginar,, amanha~<br />

, apesar <strong>de</strong> hoje, sera ´ a e<br />

strada que surge, pra se t<br />

rilhar,, amanha, ~ odios ´ afa<br />

gados, temores abrandados,<br />

sera ´ pleno.<br />

conteudo do arquivo<br />

Aquilo que consi<strong>de</strong>ramos o conteúdo do arquivo é na verda<strong>de</strong> um texto formatado da seguinte maneira:<br />

amanhã, amanhã,<br />

será um lindo dia, apesar <strong>de</strong> hoje,<br />

da mais louca alegria, será a estrada que surge,<br />

que se possa imaginar, pra se trilhar,<br />

amanhã,<br />

ódios afagados,<br />

temores abrandados,<br />

será pleno.<br />

Os códigos <strong>de</strong> texto que fazem as quebras <strong>de</strong> linhas (neste caso estão sempre após as vírgulas e são invisíveis), aparecem<br />

no exemplo também como vírgulas 5 .<br />

Assim como acontece na internet, on<strong>de</strong> os en<strong>de</strong>reços físicos dos servidores (IP Addresses) são escondidos por servidores<br />

<strong>de</strong> nomes, facilitando assim a interação com os seres humanos, o sistema operacional disponibiliza um meio<br />

para que os humanos possam se localizar na estrutura <strong>de</strong> arquivos, fornecendo um nome para cada en<strong>de</strong>reço físico<br />

disponível na unida<strong>de</strong> <strong>de</strong> armazenamento.<br />

No mundo *NIX separamos duas gran<strong>de</strong>s categorias <strong>de</strong> arquivos, os arquivos texto puro e os arquivos binários. Texto<br />

Puro i<strong>de</strong>ntifica que o conteúdo <strong>de</strong> um arquivo contém apenas caracteres cujos códigos estão compreendidos entre<br />

ASCII 0x20 e ASCII 0x7F inclusive. Isso quer dizer, do caracter ’espaço’ (código hexa<strong>de</strong>cimal 0x20, ou <strong>de</strong>cimal 32)<br />

ao caracter ’<strong>de</strong>lete’ (sim, voltar e apagar um espaço <strong>de</strong> caracter também é um caracter, entenda-o como um comando<br />

- código hexa<strong>de</strong>cimal 0x7F ou <strong>de</strong>cimal 127). Esses arquivos po<strong>de</strong>m conter também 3 outros caracteres comando: o<br />

ASCII 0x09 (tab), o ASCII 0x0A (newline), ASCII 0x0C (newpage) e o ASCII 0x0D (carriage return). Leitores<br />

perspicazes notarão que tais comandos são nomes <strong>de</strong> teclas das (já) antigas máquinas <strong>de</strong> escrever, e suas funções são<br />

exatamente aquelas.<br />

5 este é um trecho da letra da música Amanhã <strong>de</strong> Guilherme Arantes.<br />

5<br />

.


Caso o arquivo contenha algums dos caracteres ASCII restantes, ou seja, caracteres menores que ASCII 0x20 e/ou<br />

maiores que ASCII 0x7F conhecidos como caracteres não imprimíveis ou no inglês : non printable characters), ele<br />

será conhecido como arquivo binário.<br />

Na verda<strong>de</strong>, como <strong>de</strong>ve ser facilmente percebido, todos os arquivos são tecnicamente falando binários. A distinção<br />

ocorre por causa dos caracteres não imprimíveis que necessitam <strong>de</strong> ferramentas e/ou chaves especiais para serem<br />

editados, inseridos e reconhecidos, sendo normalmente comandos para a shell (que ’conversa’ com o processador que<br />

só enten<strong>de</strong> binário) e não informação para o usuário.<br />

4 ROTAS E NOMES DE ARQUIVOS<br />

Uma foto por exemplo guardada no disco rígido no diretório "/tmp", po<strong>de</strong> ser lembrada pela rota que possui no sistema<br />

<strong>de</strong> arquivos: "/tmp/foto-da-balada.jpg". Esse nome do arquivo <strong>de</strong>ve ser entendido da seguinte forma:<br />

/ diretório raiz, ou<br />

"principal" da estrutura <strong>de</strong><br />

arquivos do sistema.<br />

tmp/ diretório <strong>de</strong> nome "tmp/".<br />

foto-da-balada.jpg arquivo <strong>de</strong> nome "foto-da-balada.jpg".<br />

Um diretório é, no linux, também um arquivo, mas um arquivo especial, pois ao invés <strong>de</strong> conter um en<strong>de</strong>reço físico<br />

que contém uma lista <strong>de</strong> bytes (o conteúdo do arquivo) ele apresenta uma lista <strong>de</strong> en<strong>de</strong>reços para outros arquivos.<br />

No caso o diretório "/"não aponta para um lugar físico no HD que contém uma fila <strong>de</strong> bytes, mas aponta para uma<br />

lista <strong>de</strong> arquivos. Esses arquivos po<strong>de</strong>m ser outros diretórios. No caso um <strong>de</strong>les <strong>de</strong> fato o é, "tmp/"que tem a mesma<br />

característica, ou seja, aponta para uma lista <strong>de</strong> arquivos, sendo que um <strong>de</strong>les é finalmente a "foto-da-balada.jpg".<br />

Lembre-se que os nomes dos diretórios terminam com "/", enquanto que os arquivos regulares não. Para a maioria dos<br />

comandos não é necessário fazer-se essa distinção, porém para aqueles que estão começando a gran<strong>de</strong> aventura pelo<br />

<strong>Linux</strong>, seria interessante observar essa norma.<br />

5 COMANDOS<br />

O próximo passo para enten<strong>de</strong>r a shell é agora i<strong>de</strong>ntificar o que seria um comando. Um comando é normalmente uma<br />

palavra-chave reservada pela shell que apresenta um comportamento específico. Todo comando aceita dois tipos <strong>de</strong><br />

complementos: (palavras)chaves <strong>de</strong> opção e argumentos, sendo uma regra geral:<br />

comando opções argumentos<br />

Para enviarmos o comando para a shell, normalmente teclamos ENTER, que é o termo inglês para entrada, no caso,<br />

entrada <strong>de</strong> dados para a interpretação da shell. Se por exemplo enviarmos para a shell o comando:<br />

find /tmp/ -iname "*.mp3" -print<br />

ele será interpretado da seguinte maneira:<br />

find<br />

é o comando propriamente dito. Esse comando necessita <strong>de</strong> opções e argumentos para executar sua função à contento.<br />

6


tmp/<br />

é o argumento do comando, que neste caso é a rota <strong>de</strong> um diretório <strong>de</strong> nome "tmp/".<br />

-iname "*.mp3" -print<br />

são algumas das opções que o comando aceita. o<br />

iname<br />

é uma opção que necessita <strong>de</strong> um argumento, no caso<br />

"*.mp3"<br />

, e o<br />

-print<br />

é uma opção que não necessita <strong>de</strong> argumentos.<br />

Esse comando busca no diretório /tmp/ por qualquer arquivo cuja extensão seja .mp3 e os imprime na tela como resultado.<br />

Mas como sabemos que tipo <strong>de</strong> opções e argumentos <strong>de</strong>vemos informar para cada comando ? Uma das<br />

maravilhas do mundo opensource do qual o <strong>Linux</strong> faz parte, é a po<strong>de</strong>rosa e <strong>de</strong>talhada documentação disponível. Sempre<br />

que você tiver alguma dúvida sobre o comportamento ou mesmo sobre a existência <strong>de</strong> um comando, basta chamar<br />

o man:<br />

man man<br />

esse comando vem do inglês MANual (manual ou livro <strong>de</strong> procedimentos) e no exemplo anterior buscamos informações<br />

<strong>de</strong> como utilizar ele mesmo; ou seja, pedimos para a shell buscar informação (o comando man) sobre o comando<br />

man. Se quisermos saber como funciona o comando find utilizado anteriormente, o processo é o mesmo:<br />

man find<br />

Recomendamos fortemente que sempre seja dada priorida<strong>de</strong> para a busca pelo man para qualquer dúvida. A documentação<br />

nos sistemas <strong>Linux</strong> é excelente, e perguntas frívolas que <strong>de</strong>monstram que o cidadão não se <strong>de</strong>u ao trabalho<br />

<strong>de</strong> utilizar esse recurso, <strong>de</strong>ixam qualquer administrador <strong>de</strong> sistema irritado; portanto procure sempre seguir o seguinte<br />

conselho: na dúvida, consulte o man !<br />

Note também que sendo um comando uma só palavra, a shell interpreta os argumentos e opções por dois mecanismos:<br />

6 OPÇõES<br />

o padrão do Unix para opções <strong>de</strong> comandos é que comecem com um hífen se a opção é apenas um caracter (caso em<br />

que são chamadas <strong>de</strong> "short options"ou opções curtas), ou dois hífens se a opção contiver mais <strong>de</strong> um caracter (caso<br />

em que são chamadas <strong>de</strong> "long options"ou opções longas). Existem vários comandos que implementam sua própria<br />

forma <strong>de</strong> interpretar esse padrão. O comando "find"por exemplo que não possui nenhuma opção curta, utiliza apenas<br />

um único hífen para <strong>de</strong>signar suas opções, que são todas longas.<br />

7


7 ARGUMENTOS<br />

Os argumentos dos comandos são entendidos pela shell que utiliza o caracter "espaço"(ASCII 0x20) 6 como separador<br />

padrão. Esse separador po<strong>de</strong> ser modificado, e veremos como e para que nos módulos avançados. No momento tenha<br />

sempre em mente que um (ou mais) espaço(s) separam argumentos portanto:<br />

e<br />

find /aquele/diretorio-ali/<br />

find /aquele/diretorio ali/<br />

são interpretados <strong>de</strong> maneira diferente ! o primeiro tem um único argumento que é a rota para um diretório <strong>de</strong> nome<br />

"/aquele/diretorio-ali/", enquanto que o segundo tem dois argumentos pois a shell enten<strong>de</strong> que espaços os separam, ou<br />

seja: "/aquele/diretorio/"e "ali/". Lembre-se que neste caso específico, para o comando "find", "/aquele/diretorio/"e<br />

"/aquele/diretorio"tem o mesmo significado.<br />

Tenha sempre como regra básica, enquanto estiver no <strong>Linux</strong>: Não utilize espaços nem letras acentuadas para <strong>de</strong>signar<br />

arquivos. Enquanto, o uso <strong>de</strong> espaços e letras acentuadas é perfeitamente válido quando estamos em modo<br />

gráfico, em modo texto, nos dificulta tremendamente, e traz pouquíssimas vantagens.<br />

8 ROTAS HIERÁRQUICAS<br />

/ (diretório raiz do sistema)<br />

---|<br />

bin<br />

sbin<br />

usr ---|<br />

home ---|<br />

eu<br />

ze<br />

os-caras<br />

root<br />

lib<br />

opt<br />

var<br />

tmp ---|<br />

foto-da-balada.jpg<br />

outra-foto-da-balada.jpg<br />

mais-uma-foto-da-balada.jpg<br />

o caminho ou rota hierárquica que é necessário seguir para i<strong>de</strong>ntificar <strong>de</strong> modo único um arquivo é chamado <strong>de</strong> rota<br />

(ou path em inglês).<br />

os vários comandos que a shell põe à nossa disposição possibilitam a navegação e manipulação <strong>de</strong> arquivos fornecendo<br />

as rotas completas (por exemplo /tmp/foto-da-balada.jpg) e também para facilitar, rotas abreviadas que se<br />

baseiam numa variável dinâmicamente atualizada pela shell chamadas rota atual que representa qual é a rota na qual<br />

a shell se encontra no momento.<br />

6 ASCII é uma sigla em inglês para "American Standard for Comunication Interchange of Information"ou seja: padrão americano para o intercâmbio<br />

<strong>de</strong> informação via sistema <strong>de</strong> comunicações. Ele utiliza o padrão byte que possui 8 bits, e padroniza dando uma correspondência precisa para<br />

todos os caracteres que utilizam os 7 primeiros bits do mesmo. Assim, por exemplo, o caracter "A"tem um código associado que é o hexa<strong>de</strong>cimal<br />

"0x41"ou <strong>de</strong>cimal "65", e assim por diante.<br />

8


9 SHELL PREFERIDA: BASH<br />

O BASH 7 é a mais versátil e completa shell GNU disponível para *nix, além <strong>de</strong> ser a mais consistente tanto em termos<br />

<strong>de</strong> programação como <strong>de</strong> interpretação lógica <strong>de</strong> seus operandos, mostrando-se i<strong>de</strong>al para as aplicações que trataremos.<br />

7 enquanto não traduzimos shell para interpretador <strong>de</strong> linha <strong>de</strong> comandos, nos permitimos chamar no feminino uma shell, e no masculino o<br />

BASH (Bourne Again SHell).<br />

9


COMANDOS BÁSICOS DO BASH<br />

10


10 NAVEGANDO PELO SISTEMA DE ARQUIVOS: CD<br />

Navegar pelo sistema <strong>de</strong> arquivos significa tornar corrente para a shell, uma <strong>de</strong>terminada variável que indica o nome<br />

do diretório para on<strong>de</strong> fomos. Obviamente o movimento aqui consi<strong>de</strong>rado é metafórico, todo o efeito é causado pela<br />

gravação <strong>de</strong> um <strong>de</strong>terminado nome <strong>de</strong> diretório na variável 8 PWD automaticamente mantida pela shell. Para que essa<br />

variável seja atualizada, basta usar o comando cd do inglês change directory.<br />

A vantagem <strong>de</strong> navegar pelo sistema é que assim po<strong>de</strong>mos abreviar os comandos que copiam, movem, editam e etc<br />

os arquivos. É portanto, perfeitamente possível utilizar o sistema operacional sem se mover por ele, porém torna-se na<br />

maioria das vezes muito pouco prático.<br />

Por exemplo, supoonha que se <strong>de</strong>seja copiar o arquivo "/tmp/foto-da-balada.jpg"para o diretório "/usr/home/eu/fotos/":<br />

teria-se que digitar:<br />

cp /tmp/foto-da-balada.jpg /usr/home/eu/fotos/<br />

porém se antes nos movermos ou melhor, tornarmos corrente o diretório <strong>de</strong>stino só precisaríamos digitar:<br />

cd /usr/home/eu/fotos/<br />

cp /tmp/foto-da-balada.jpg ./<br />

O linux usa como pseudônimo para diretório corrente um ponto. Dois pontos seguidos significam o diretório acima na<br />

hierarquia do sistema, <strong>de</strong>sse modo no nosso exemplo:<br />

cd /usr/home/eu/fotos tornamos corrente o diretório<br />

/usr/home/eu/fotos/<br />

cd ./ estamos no mesmo diretório pois<br />

’./’ é sinônimo do diretório corrente<br />

cd ../ tornamos corrente o diretório<br />

’/usr/home/eu/<br />

( que é o diretório ’acima’ do ’fotos/’ )<br />

No exemplo <strong>de</strong> cópia anterior, acabamos por digitar mais coisas do que se tivéssemos dado o comando <strong>de</strong> cópia<br />

diretamente, porém a idéia por trás <strong>de</strong> navegar pelo sistema é pensar antes quantas operações po<strong>de</strong>remos fazer abreviadamente<br />

tornando outro diretório corrente, portanto fica, como em qualquer outra situação, a critério do usuário o<br />

que é mais conveniente.<br />

11 TRABALHANDO COM DIRETÓRIOS: RMDIR, MKDIR, LS<br />

Sabendo como nos mover pelos diretórios que já existem no sistema operacional, po<strong>de</strong>mos então listar seu conteúdo,<br />

remover e criar novos diretórios.<br />

8 variável, neste contexto po<strong>de</strong> ser entendida apenas como um região reservada na memória, que é manipulada pela shell. Essas variáveis,<br />

guardam configurações que normalmente são criadas dinâmicamente (o nome do usuário por exemplo) ajudando a funcionalida<strong>de</strong> do sistema.<br />

Veremos como utilizá-las no curso avançado que trata <strong>de</strong> programação. PWD vem do inglês Path of the Working Directory ou seja, rota do diretório<br />

<strong>de</strong> trabalho, que é o termo utilizado para <strong>de</strong>signar o que chamamos <strong>de</strong> diretório corrente.<br />

11


cd /usr/home/eu/<br />

ls<br />

o comando ls LiSta o conteúdo do diretório corrente (que é atualizado automaticamente na variável PWD) caso não<br />

tenha recebido nenhum argumento, ou lista o diretório especificado.<br />

ls /var/tmp/cache/<br />

lista o conteúdo do diretório cache que fica na rota /var/tmp/cache.<br />

para criar um diretório chamado fotos na sua home (diretório <strong>de</strong>fault <strong>de</strong> cada usuário, normalmente criados pelo sistema<br />

e resi<strong>de</strong>ntes no diretório /home, ou /usr/home)<br />

ou<br />

mkdir ~/fotos/<br />

mkdir /home/eu/fotos/<br />

note que o símbolo é uma abreviação para o diretório /home/eu/. Essa abreviação é possível porque existe uma variável<br />

do sistema que contém a rota <strong>de</strong>sse diretório e é inicializada quando a shell é chamada, <strong>de</strong> modo que mudando o<br />

usuário, o conteúdo <strong>de</strong>ssa variável muda <strong>de</strong> acordo, representando sempre uma atalho para a própria home do respectivo<br />

usuário.<br />

o comando mkdir então, cria um diretório cujo nome é o argumento do comando e vem do inglês MaKe DIRectory.<br />

Como a maioria dos comandos da shell, vários argumentos po<strong>de</strong>m ser fornecidos <strong>de</strong> uma só vez:<br />

mkdir ~/fotos ~/fotos/hoje/ ~/fotos/ontem/<br />

esse comando criaria na home do usuário, três novos diretórios com a seguinte estrutura hierárquica:<br />

fotos --hoje<br />

ontem<br />

para remover um diretório po<strong>de</strong>-se utilizar dois comandos distintos:<br />

rmdir fotos/ ou rm -fr fotos/<br />

o rmdir vem do inglês ReMove DIRectory, e como você já <strong>de</strong>ve ter percebido, tem a função <strong>de</strong> remover do sistema <strong>de</strong><br />

arquivos, o diretório especificado no argumento. O comando rm (do inglês ReMove) é um comando mais genérico <strong>de</strong><br />

remoção <strong>de</strong> arquivos, e quando utilizado para remover diretórios, é necessário utilizar-se as opções -fr.<br />

Note aqui que as opções dadas ao comando "rm"são duas "f"e "r". Como cada uma <strong>de</strong>las é uma "short option", as<br />

mesmas po<strong>de</strong>m ser agrupadas seguindo apenas um hífen. Neste caso específico existem opções longas para os mesmo<br />

comportamento, e se quiséssemos torná-lo explícito (para por exemplo facilitar a leitura do que fazem num comando<br />

"alias" - veja mais adiante como utilizá-lo) teríamos:<br />

versão com opções longas:<br />

12


m --force --recursive fotos/<br />

versão com opções curtas:<br />

rm -fr fotos/<br />

ambas as formas comportam-se exatamente da mesma maneira, apenas que as opções longas facilitam a leitura <strong>de</strong><br />

seres humanos.<br />

12 MOVENDO ARQUIVOS: MV<br />

a sintaxe própria do comando mv é:<br />

mv [opções] origem <strong>de</strong>stino<br />

Este comando vem do inglês MoVe (move, <strong>de</strong>sloca, disposiciona) e o que ele faz realmente não é mover nada em<br />

termos <strong>de</strong> en<strong>de</strong>reços físicos, mas sim lógicos. Quem utilizou o DOS <strong>de</strong>ve se lembrar que mover arquivos era uma<br />

tarefa realmente chata, pois o DOS <strong>de</strong> fato movia o conteúdo do arquivo pelo disco rígido. Nos sistemas *nix, isso<br />

não apenas não é preciso como não é produtivo. Tenha sempre em mente que o <strong>Linux</strong>, assim como todo Unix, é um<br />

sistema operacional multitarefa, multiusuário, portanto todas suas operações <strong>de</strong>vem otimizar velocida<strong>de</strong> <strong>de</strong> acesso e<br />

consumo <strong>de</strong> recursos, coisas para as quais o DOS por exemplo não estava preparado.<br />

A sintaxe do mv é muito simples (suponha a estrutura <strong>de</strong> diretórios do exemplo anterior)<br />

mv fotos/hoje/baladinha.jpg fotos/ontem/<br />

esse comando moveu o arquivo "baladinha.jpg"que estava no diretório "fotos/hoje/"<br />

para o diretório "fotos/ontem". Po<strong>de</strong>ríamos ter utilizado vários recursos para abreviar o comando, já vistos:<br />

cd fotos/hoje<br />

mv baladinha.jpg ../ontem/<br />

com o comando cd, nós entramos (tornamos corrente) no diretório "fotos/hoje/", on<strong>de</strong> o arquivo "baladinha.jpg", resi<strong>de</strong>.<br />

Daí para movermos esse arquivo não é mais necessário utilizarmos a rota completa, apenas seu nome basta. A<br />

segunda abreviação vem do fato <strong>de</strong> que po<strong>de</strong>mos chamar o diretório anterior, seja ele qual for, <strong>de</strong> "../", assim, ao invés<br />

<strong>de</strong> escrevermos "fotos/ontem/", po<strong>de</strong>mos substituir pelo "../ontem/". Note que essa expressão "../ontem/"só signfica<br />

"fotos/ontem/"se estivermos num diretório <strong>de</strong> mesmo nível hierárquivo que o "ontem/"; neste caso o "hoje/".<br />

a mesma tarefa po<strong>de</strong>ria ainda ser feita da seguinte maneira:<br />

cd fotos/ontem/<br />

mv ../hoje/baladinha.jpg ./<br />

agora tornamos corrente o diretório <strong>de</strong>stino que é o "fotos/ontem/". Utilizamos o recurso do diretório acima ("../")<br />

para especificar a rota do arquivos que vamos mover, e como abreviação final, especificamos como <strong>de</strong>stino o diretório<br />

corrente, que po<strong>de</strong> ser chamado <strong>de</strong> "./"<br />

Outra utilida<strong>de</strong> do mv é a <strong>de</strong> RENOMEAR arquivos:<br />

mv baladinha.jpg balada-caragua.jpg<br />

13


no caso acima, o comando mv moveu o nome do arquivo "baladinha.jpg"para "balada-caragua.jpg", sendo que o arquivo<br />

em si, continua no mesmo diretório.<br />

Po<strong>de</strong>-se combinar os dois efeitos numa mesma linha <strong>de</strong> comando:<br />

mv fotos/ontem/baladinha.jpg /tmp/balada-caragua.jpg<br />

esse comando moveu o arquivo "baladinha.jpg", para outro diretório (sua origem era "fotos/ontem/") <strong>de</strong> nome "/tmp/",<br />

e "chegando lá", mudou também seu nome <strong>de</strong> "baladinha.jpg"para "balada-caragua.jpg".<br />

Se o último argumento do comando mv for um diretório, po<strong>de</strong>-se fornecer vários nomes <strong>de</strong> arquivos <strong>de</strong> uma vez:<br />

mv foto1.jpg foto2.jpg fotos/ontem/balada.jpg /tmp<br />

neste exemplo, o comando mv foi invocado com 4 argumentos:<br />

’foto1.jpg’ (1)<br />

’foto2.jpg’ (2)<br />

’fotos/ontem/balada.jpg’ (3)<br />

’/tmp’ (4)<br />

sendo que o último, o quarto, <strong>de</strong>signava um diretório. Portanto o mv, muito esperto, move todos os outros argumentos<br />

para lá. Note que se o último argumento fosse um arquivo, você estaria pedindo para shell gravar todos os outros<br />

arquivos no mesmo lugar, per<strong>de</strong>ndo portanto a informação ! O próprio comando interce<strong>de</strong> e impe<strong>de</strong> esse processo.<br />

13 COPIANDO ARQUIVOS: CP<br />

a sintaxe própria do comando cp é:<br />

cp [opções] origem <strong>de</strong>stino<br />

o comando cp que vem do inglês CoPy (cópia) duplica um arquivo que está na rota origem na rota <strong>de</strong>stino, funcionando<br />

praticamente como o mv no que diz respeito à sintaxe.<br />

cp fotos/hoje/baladinha.jpg /tmp/<br />

duplicamos o arquivo "baladinha.jpg"no diretório "/tmp/"<br />

Da mesma forma que com o mv, o cp po<strong>de</strong> copiar vários arquivos <strong>de</strong> uma vez, contanto que o último argumento seja<br />

um diretório:<br />

cp sinfonia.ogg rock1.mp3 rock3.ogg /home/eu/musicas/<br />

Nesse exemplo, o cp copiou os arquivos dados como argumentos: "sinfonia.ogg", "rock1.mp3"e "rock3.ogg"para o<br />

diretório "/home/eu/musicas/". Note que como houve uma cópia, os três arquivos existem agora nos dois diretórios:<br />

no diretório corrente e no "/home/eu/musicas/".<br />

14


14 CRIANDO NOVOS COMANDOS: ALIAS<br />

A sintaxe própria do comando é:<br />

alias novocomando=’comandos’<br />

A shell é tão po<strong>de</strong>rosa que permite entre outros fantásticos recursos, que comandos criados pelo próprio usuário sejam<br />

assimilados e que passem então a compor seu repertório <strong>de</strong> funções. Para criar novos comandos, basta utilizar o<br />

comando alias:<br />

alias dir=’ls -C --color=tty’<br />

Nesse exemplo, acabamos <strong>de</strong> criar um comando chamado dir que simula aquele velho conhecido <strong>de</strong> quem já usou<br />

DOS, através da opção -C do comando ls. A outra opção " –color=tty", instrui o ls para que as listas que ele gera<br />

<strong>de</strong>vam ser coloridas, <strong>de</strong> acordo com a extensão dos arquivos encontrados. Assim, tipicamente, os diretórios aparecem<br />

em azul, arquivos compactados (.zip por exemplo) em vermelho, e arquivos executáveis em ver<strong>de</strong>. São cores apenas<br />

simbólicas para facilitar a visualização, e também são totalmente customizáveis. (Quer saber como modificar esse<br />

comportamento e colocar seu próprio esquema <strong>de</strong> cores ? Não esqueça: man ls )<br />

O comando alias serve tipicamente como atalho para diversas operações que são repetidamente executadas. Muitas<br />

vezes, são variações <strong>de</strong> opções para um mesmo comando:<br />

simula o ’dir’ do DOS<br />

alias dir=’ls -C --color=tty’<br />

mostra arquivos invisíveis<br />

alias la=’ls -al --color=tty --block-size=1’<br />

mostra arquivos em or<strong>de</strong>m <strong>de</strong> tamanho<br />

alias ll=’ls -lhS --color=tty’<br />

15


COMANDOS AVANÇADOS<br />

16


15 MANIPULANDO ARQUIVOS: REDIRECIONAMENTO<br />

Para que os comandos criados com o alias permaneçam disponíveis entre uma seção <strong>de</strong> shell e outra, é necessário que<br />

os mesmos sejam gravados num arquivo que a shell utiliza como instrução <strong>de</strong> entrada, por exemplo, um cujo nome é<br />

".bashrc"e caso não exista po<strong>de</strong> ser criado facilmente em sua "home".<br />

Como tudo que a shell faz é texto, po<strong>de</strong>mos capturar esse texto, normalmente resultado da ação <strong>de</strong> um ou mais comandos<br />

e gravá-los em arquivos. Para tanto utlizamos os operadores <strong>de</strong> redirecionamento: > < e |.<br />

O operador > (saída) redireciona a saída do argumento anterior para o argumento posterior:<br />

ls > /tmp/lista.txt<br />

Neste caso o argumento anterior foi ls e o posterior, que sempre <strong>de</strong>ve ser um arquivo ou equivalente (veremos os<br />

equivalentes nos módulos avançados), o arquivo "/tmp/lista.txt".<br />

O operador < (entrada) redireciona a entrada do argumento anterior para o argumento posterior. Um comando que<br />

po<strong>de</strong> se valer <strong>de</strong>sse recurso é o grep por exemplo. Note que o ls não faria uso <strong>de</strong>sse redirecionador, pois o mesmo não<br />

possui entrada <strong>de</strong> dados, já o comando grep possui (como se sabe isso ? Resp: man grep).<br />

grep "foto" < imagens.list<br />

O comando grep procura pelo primeiro argumento num arquivo ou lista <strong>de</strong> arquivos dado pelo segundo argumento.<br />

No caso ele estava procurando pela palavra foto <strong>de</strong>ntro do arquivo "imagens.list". Veremos mais sobre o grep adiante.<br />

Po<strong>de</strong>mos por exemplo concatenar comandos, on<strong>de</strong> a saída <strong>de</strong> um é a entrada <strong>de</strong> outro, sem precisarmos criar arquivos<br />

intermediários. Para isso utilizamos o operador | (concatena):<br />

ls | grep "fotos"<br />

Neste exemplo, a saída do comando ls foi utilizada como a entrada do comando grep, sem a necessida<strong>de</strong> <strong>de</strong> se criar<br />

arquivos intermediários.<br />

Quando se lista o conteúdo <strong>de</strong> um diretório, é colocado na tela do terminal, um texto que representa aquela lista. Esse<br />

texto po<strong>de</strong> ser capturado da seguinte forma:<br />

ls fotos/hoje/ > hoje.list<br />

Note que não aparece nada no terminal quando o comando é executado ! Isso acontece porque o redirecionador ><br />

capturou a saída do comando ls e jogou no arquivo hoje.list. Esse operador é muito po<strong>de</strong>roso, tanto que mal utilizado<br />

po<strong>de</strong> causar gran<strong>de</strong>s danos:<br />

ls fotos/hoje/ > hoje.list<br />

ls fotos/ontem/ > hoje.list<br />

Aconteceu que o operador > apagou o conteúdo anterior <strong>de</strong> "hoje.list"ao receber o comando seguinte "ls fotos/ontem/".<br />

Caso o arquivo já exista, e seja do seu interesse adicionar conteúdo a ele, utilize o operador "acrescenta">> :<br />

cria o arquivo "fotos.list", se o mesmo já existia, seu conteúdo é substituído.<br />

ls fotos/hoje/ > fotos.list<br />

17


acrescenta ao arquivo "fotos.list", à saída do comando ls.<br />

ls fotos/ontem/ >> fotos.list<br />

Se quisermos colocar um texto qualquer num arquivo, po<strong>de</strong>mos digitá-lo diretamente no terminal, utilizando para isso<br />

o comando echo (eco):<br />

echo "batatinha quando nasce,<br />

espalha ramas pelo chão" > poema.txt<br />

Neste exemplo, criamos o arquivo "poema.txt"redirecionando a saída do comando echo para o arquivo. Por que, não<br />

po<strong>de</strong>mos simplesmente fazer o seguinte:<br />

"batatinha quando nasce," > poema.txt<br />

Porque a shell tentará enten<strong>de</strong>r "batatinha..."como um comando a ser interpretado, que obviamente não existe. O comando<br />

echo instrui a shell que o texto a seguir <strong>de</strong>ve simplesmente ser ecoado no terminal. Daí o operador redireciona,<br />

consegue jogar a saída <strong>de</strong> texto para <strong>de</strong>ntro do arquivo "poema.txt".<br />

Seria interessante notar o efeito das aspas sobre os argumentos interpretados pela shell: se escrevêssemos:<br />

batatinha quando nasce, > poema .txt<br />

a shell daria um erro dizendo que o comando "batatinha"não existe. Agora se escrevêssemos:<br />

"batatinha quando nasce," > poema.txt<br />

, o erro reportado pela shell seria que o comando "batatinha quando nasce,"não existe. As aspas cobrem o efeito <strong>de</strong> que<br />

existem espaços, que são normalmente caracteres separadores, resultando então que a frase toda, incluindo os espaços,<br />

se torna um único argumento.<br />

16 PROCURANDO ARQUIVOS: FIND<br />

find [rota[s]] [opcoes]<br />

Do inglês "procurar", find irá procurar por arquivos em todas as rotas especificadas como argumentos. Todas as opções<br />

que seguem os argumentos, são precedidas por apenas um hífen apesar <strong>de</strong> possuírem mais <strong>de</strong> um caracter. Este<br />

comando é uma das excessões à regra geral das opções já discutida anteriormente. O find possui muitas opções, sendo<br />

um comando extremamente po<strong>de</strong>roso, utilize o man find e verifique por si próprio todas as possibilida<strong>de</strong>s.<br />

find ./ /tmp/ -iname "*.ogg"<br />

a linha <strong>de</strong> comando anterior executará da seguinte maneira:<br />

find<br />

invoka o comando find<br />

./ e /tmp/<br />

informa como argumentos 1 e 2, respectivamente as rotas "./"e "/tmp/"<br />

18


-iname "*.ogg"<br />

opção que informa que o find <strong>de</strong>ve procurar por arquivos que tenham qualquer seqüência <strong>de</strong> caracteres seguida <strong>de</strong> um<br />

ponto, seguida da palavra "ogg". A procura será feita ignorando-se a caixa dos caracteres. Se a opção tivesse sido<br />

-name "*.ogg"<br />

apenas os arquivos cuja extensão (a palavra que se segue ao ponto, fose "ogg"porém em caixa baixa. um arquivo <strong>de</strong><br />

nome "sinfonia.OGG"por ter a palavra "ogg"escrita em caixa alta não seria listado neste caso mas seria no caso anterior.<br />

find /media/musicas/ -iname "*.ogg" -or -iname "*.mp3" -or "*.wav"<br />

a novida<strong>de</strong> aqui são as opções -or". Toda opção do comando find está implicitamente efetuando um "AND"lógico,<br />

ou seja se fornecemos as opções O1 e O2 para o find, ele listará arquivos tais que cumpram a opção O1 "E"a opção<br />

O2. Utilizando-se a opção -or"modificamos este comportamento e supondo o mesmo caso, o find listará arquivos que<br />

cumpram com as opções O1 "OU"a opção O2. No exemplo, o find listará arquivos que tenham qualquer nome seguido<br />

<strong>de</strong> ponto seguido da palavra "ogg"OU da palavra mp3 em quaisquer caixas que estiverem. Suponha que no diretório<br />

do exemplo "/media/musicas"existam os seguintes arquivos:<br />

ls /media/musicas/<br />

sinfonia_no_7.ogg<br />

sinfonia_NO_9.ogg<br />

dance_1_.MP3<br />

dance_2_.MP3<br />

dance_3_.Ogg<br />

beat_beat.mP3<br />

# procura por extensão "ogg" sem se preocupar com a caixa"<br />

find /media/musicas/ -iname "*.ogg"<br />

/media/musicas/sinfonia_no_7.ogg<br />

/media/musicas/sinfonia_NO_9.ogg<br />

/media/musicas/dance_3_.Ogg<br />

# procura por extensão "ogg" toda em minúsculas (caixa baixa)<br />

find /media/musicas/ -name "*.ogg"<br />

/media/musicas/sinfonia_no_7.ogg<br />

/media/musicas/sinfonia_NO_9.ogg<br />

# procura por extensões tanto "ogg" como "mp3" mas caixa baixa.<br />

find /media/musicas/ -name "*.ogg" -or -name "*.mp3"<br />

/media/musicas/sinfonia_no_7.ogg<br />

/media/musicas/sinfonia_NO_9.ogg<br />

# mesmo anterior, mas sem se preocupar com a caixa.<br />

# note que no caso anterior, não foi listado nenhum<br />

# arquivo <strong>de</strong> extensão MP3, pois não havia nenhum com todos<br />

# os caracteres em caixa baixa.<br />

find /media/musicas/ -iname "*.ogg" -or -iname "*.mp3"<br />

/media/musicas/sinfonia_no_7.ogg<br />

/media/musicas/sinfonia_NO_9.ogg<br />

/media/musicas/dance_1_.MP3<br />

/media/musicas/dance_2_.MP3<br />

19


media/musicas/dance_3_.Ogg<br />

/media/musicas/beat_beat.mP3<br />

17 LISTANDO O COTEÚDO DE ARQUIVOS: CAT<br />

cat [opcoes] [arquivos]<br />

do inglês ’catalog’, o ’cat’ ’joga’ no terminal o conteúdo <strong>de</strong> um arquivo. Po<strong>de</strong>-se utilizar coringas como argumento:<br />

cat estorias/*<br />

nesse caso, todos os arquivos presentes no diretório ’estorias/’ serão ’jogados’ na tela do terminal. Note que se o<br />

’cat’ for utilizado com arquivos ’binários’, o terminal po<strong>de</strong> (e na maioria das situações vai) interpretar algum <strong>de</strong>sses<br />

caracteres como comandos e os resultados serão funestos ! O ’cat’ é muito útil como gerador <strong>de</strong> entrada para outros<br />

comandos que efetuam funções <strong>de</strong> filtro, como veremos adiante.<br />

18 SUBSTITUINDO TEXTO: SED<br />

Um problema bastante comum quando se está migrando entre sistemas DOS e <strong>Linux</strong>, no tocante a arquivos <strong>de</strong> texto, é<br />

uma característica básica do primeiro que precisa para encerrar cada linha, dois códigos (ASCII 0x0D e ASCII 0x0A),<br />

enquanto que no segundo, basta um (ASCII 0x0A).<br />

Alguns editores <strong>de</strong> texto não enten<strong>de</strong>m essa peculiarida<strong>de</strong> e ao abrirem esses arquivos apresentam listagens do tipo:<br />

amanhã,^M<br />

será um lindo dia,^M<br />

da mais louca alegria,^M<br />

que se possa imaginar,^M<br />

amanhã,^M<br />

ódios afagados,^M<br />

temores abrandados,^M<br />

será pleno.^M<br />

Note os símbolos ’ˆM’ que são a versão para texto do código ’ASCII 0x0D’. Outro problema comum, é quando se está<br />

elaborando algum documento LATEXe se <strong>de</strong>seja por algum motivo inserir um trecho <strong>de</strong> um código fonte <strong>de</strong> linguagem<br />

<strong>de</strong> programação, como C, por exemplo, que normalmente é i<strong>de</strong>ntada utilizando-se caracteres ’TAB’ (ASCII 0x09). O<br />

LATEXignorará completamente esses caracteres, <strong>de</strong>ixando o código fonte bastante feio e difícil <strong>de</strong> se seguir. O códio<br />

abaixo por exemplo:<br />

#inclu<strong>de</strong> <br />

int main( void )<br />

{<br />

int i;<br />

}<br />

for( i=0; i


#inclu<strong>de</strong> <br />

int main( void )<br />

{<br />

int i;<br />

for( i=0; i texto.txt<br />

1. Utilizamos o cat com a opção -v (mostre caracteres não imprimívies, ou seja, aqueles menores que ’espaço’<br />

(ASCII 0x20).<br />

2. então utilizamos o ’sed’ para substituir o texto:<br />

(a) ’s’ indica que vamos efetuar uma ’substituição’.<br />

(b) ’/ˆM/’ o valor entre a primeira e a segunda barra, indica o padrão a ser localizado.<br />

(c) ’//’ (uma seqüência vazia). O valor entre a segunda e a terceira barra indica o padrão pelo qual o anterior<br />

<strong>de</strong>ve ser substituído.<br />

No caso do arquivo fonte em C:<br />

cat -vT fonte.c | sed "s/^I/ /g" > fonte_c.tex<br />

1. Utilizamos o cat com a opção -v (mostre caracteres não imprimívies, ou seja, aqueles menores que ’espaço’<br />

(ASCII 0x20).<br />

2. a opção ’T’, faz com que o ’cat’ substitua toda ocorrência do caracter ’TAB’ (ASCII 0x09) pela seqüência ’ˆI’<br />

3. então utilizamos o ’sed’ para substituir o texto:<br />

(a) ’s’ indica que vamos efetuar uma ’substituição’.<br />

(b) ’/ˆI/’ o valor entre a primeira e a segunda barra, indica o padrão a ser localizado.<br />

(c) ’/ /’ (uma seqüência <strong>de</strong> quatro espaços). O valor entre a segunda e a terceira barra indica o padrão pelo<br />

qual o anterior <strong>de</strong>ve ser substituído.<br />

(d) ’g’ após a terceira barra, indica que a operação <strong>de</strong>ve ser repetida, tantas vezes quantas forem encontradas<br />

o padrão. Caso seja omitido esse ’g’, o sed vai efetuar a substituição apenas uma vez por linha.<br />

19 PROGRAMANDO<br />

Para encerrar este curso <strong>de</strong> shell, daremos um exemplo <strong>de</strong> como a mesma po<strong>de</strong> ser programada para efetuar as mais<br />

diversas operações. Não entraremos em <strong>de</strong>talhes, pois esta é matéria <strong>de</strong> um próximo curso, tal é a extensão do assunto.<br />

O programa fornecido, ajudará ao leitor, <strong>de</strong>scobrir os comandos disponíveis no seu sistema. Lembramos que a estrutura<br />

<strong>de</strong> diretórios <strong>de</strong> um sistema recém instalado, possui normalmente dois diretórios nos quais focaremos no exemplo:<br />

21


in/ e /sbin/<br />

o diretório ’/bin/’ contém utilitários básicos a própria shell, e vários outros comandos, enquanto que o diretório ’/sbin/’<br />

contém via <strong>de</strong> regra, utilitários para manutenção do sistema. O programa a seguir, vale-se <strong>de</strong> recursos internos da shell,<br />

e mostra uma lista numerada <strong>de</strong> comandos. Cada vez que um número é digitado e teclado ENTER, o ’man’ daquele<br />

comando é mostrado.<br />

Dessa forma, po<strong>de</strong>-se passar alguns dias apren<strong>de</strong>ndo sobre a maioria dos comandos disponíveis no <strong>Linux</strong>. Digite o<br />

seguinte (lembre-se que linhas <strong>de</strong> comandos que começam com ’$’ indicam que os comandos estão sendo digitados<br />

por um usuário comum: se começarem por ’#’ o usuário será o root. Note também que esse símbolo não <strong>de</strong>ve ser<br />

digitado!):<br />

$ cd /bin<br />

$ select CMD in *; do man $CMD; done<br />

uma lista do seguinte tipo aparecerá:<br />

7) bunzip2 57) gzip 107) rm<br />

8) busybox 58) head 108) rmdir<br />

9) bzcat 59) hostid 109) rnano<br />

10) bzcmp 60) hostname 110) run-parts<br />

11) bzdiff 61) id 111) sed<br />

12) bzegrep 62) igawk 112) seq<br />

13) bzfgrep 63) install 113) setfont<br />

14) bzgrep 64) kill 114) sh<br />

15) bzip2 65) killall 115) sleep<br />

16) bzip2recover 66) ksh 116) sort<br />

17) bzless 67) link 117) split<br />

18) bzmore 68) ln 118) stat<br />

19) cat 69) loadkeys 119) stty<br />

20) chattr 70) login 120) su<br />

21) chgrp 71) logname 121) sync<br />

22) chmod 72) ls 122) tar<br />

#?<br />

o comando ’select’ da shell organizou uma lista dos arquivos disponíveis naquele diretório (/bin/). Se você agora<br />

digitar 111 e em seguida pressionar ENTER, o comando ’man sed’ será executado, e a página do manual referente ao<br />

comando ’mv’ (que é o comando 111 nessa listagem) será visualizado.<br />

Dessa forma, po<strong>de</strong>-se ir <strong>de</strong>scobrindo o que fazem, e como utilizar as funcionalida<strong>de</strong>s já disponíveis no seu sistema.<br />

Note que os números associados a cada comando não tem absolutamente nenhuma relação com os mesmos: são apenas<br />

um índice <strong>de</strong> contagem, portanto variarão <strong>de</strong> um sistema para outro.<br />

Para terminar o comando, termine primeiro a visualização da página do man, teclando ’q’ (<strong>de</strong> ’quit’ - <strong>de</strong>sistir). Quando<br />

o comando retornar à listagem como acima, tecle ’Ctrl-D’ e o ’prompt’ retornará para a linha <strong>de</strong> comando.<br />

Divirta-se !<br />

22


A SciX<br />

Esta apostila faz parte do curso <strong>de</strong> <strong>Linux</strong> da SciX.<br />

O responsável atualmente pelo grupo é Roberto Parra.<br />

O grupo SciX po<strong>de</strong> ser contactado pelo email: scientiaunix@gmail.com<br />

B Recursos<br />

Esta apostila foi elaborada completamente em LATEX.<br />

O editor <strong>de</strong> texto utilizado para escrever o código fonte foi o ’Nirvana Edit’ (http://www.nedit.org)<br />

Plataforma <strong>Linux</strong> GNU-Gentoo-2.6.15.1<br />

C Agra<strong>de</strong>cimentos<br />

Agra<strong>de</strong>cemos a Diretoria <strong>de</strong> Ensino do IFUSP, na pessoa <strong>de</strong> seu diretor Rafael Liguori, cuja atuação foi <strong>de</strong>cisiva para<br />

a disponibilização do curso e também à sua equipe, em especial à Ellen Corbato cuja eficiência e prestativida<strong>de</strong> foram<br />

muito apreciadas.<br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!