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