SlideShare uma empresa Scribd logo
LINUX B´ASICO
PET Computa¸c˜ao – UFPR
vers˜ao 1.2 – Outubro 2005
Linux basico
Sum´ario
1 Introdu¸c˜ao ao sistema operacional Linux 1
1.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 A hist´oria do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.3 Caracter´ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2 Como ´e o Linux 5
2.1 Ligando seu computador com o Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Conta de usu´ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Conectando-se ao sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 Primeiros passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.1 Quem sou eu? Onde estou? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.2 Mudan¸ca de Senha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3 Conceitos b´asicos 9
3.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
3.2 Diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 Sintaxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4 Manipulando diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
3.4.1 Criando e removendo diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.4.2 A ´arvore de diret´orios do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.5 Manipulando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5.1 Criando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.5.2 Arquivos ocultos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5.3 Copiando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5.4 Mudando o nome e o lugar de arquivos e diret´orios . . . . . . . . . . . . . . . . . . 19
3.5.5 Removendo arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5.6 Verificando o tipo de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.5.7 Vendo o conte´udo de arquivos texto . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6 Permiss˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6.1 Os tipos de permiss˜oes de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.6.2 Alterando permiss˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.6.3 Usando valores octais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.6.4 Estabelecendo as permiss˜oes padr˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.7 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.8 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4 Bash 27
4.1 Expans˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.1 Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.2 Edi¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4.2 Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3 Vari´aveis de ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.3.1 Vari´aveis de Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.3.2 Outras vari´aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
i
4.4 Arquivos .bash profile, .bash logout e .bashrc . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.5 Redirecionando entradas e sa´ıdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.5.1 Redirecionamentos destrutivo e n˜ao-destrutivo . . . . . . . . . . . . . . . . . . . . 36
4.5.2 Usando Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5 Comandos avan¸cados 39
5.1 Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.1 diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.1.2 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.2 Manipula¸c˜ao da fila de impress˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.1 lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.2 lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.3 lprm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3 Gerˆencia de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.1 ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.3.2 kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3.3 Foreground e Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.4 Compacta¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.4.1 gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.4.2 zcat e gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.4.3 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.5 Comandos ´uteis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.5.1 split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.5.2 df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.5.3 du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.6 Comandos de Busca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.6.1 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.6.2 which . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.7 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6 Editor vi 49
6.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.2 In´ıcio do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.3 Inser¸c˜ao de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.4 Apagando textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.5 Alterando textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.6 Comandos de movimenta¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.7 Salvando arquivos e saindo do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
6.8 Editando outro arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.9 Incluindo outros arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.10 Mudando de janela dentro do VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.11 Executando comandos shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.12 Resumo dos principais comandos do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7 Emacs 57
7.1 Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2 Layout da tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.3 Linha de modo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.4 Linha de eco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.5 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
8 Para saber mais 61
8.1 O Projeto de Documenta¸c˜ao do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.1.1 HOWTOs e mini-HOWTOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.1.2 Os livros LDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.1.3 As p´aginas de manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2 Encontrando programas para o Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.3 Bookmarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
A Montando um sistema de arquivos 65
A.1 mount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
A.2 umount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
B X-Windows 67
B.1 Introdu¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
B.2 O servidor X-Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
B.3 Iniciando o X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Linux basico
Cap´ıtulo 1
Introdu¸c˜ao ao sistema operacional
Linux
Um Sistema Operacional (SO) ´e, basicamente, um conjunto de programas cuja fun¸c˜ao ´e gerenciar
todos os recursos disponibilizados por um ou mais computadores. Assim, os programas (aplicativos)
interagem com os usu´arios utilizando-se destes recursos.
Entre as tarefas realizadas por um SO podemos citar:
• Controlar os v´arios dispositivos eletrˆonicos ligados ao computador, tais como discos, impressoras,
mem´oria, etc.
• Compartilhar o uso de tais dispositivos e demais servi¸cos entre v´arios usu´arios ou programas como
por exemplo arquivos ou impressoras em uma rede.
• Fornecer controle de acesso e seguran¸ca aos recursos do sistema.
Os primeiros computadores desenvolvidos eram m´aquinas muito simples e por isto n˜ao possu´ıam um SO.
Devido a esse fato, as tarefas que hoje s˜ao feitas pelos SO’s eram deixadas a cargo do programador, o
que mostrava-se muito desconfort´avel. Atualmente, uma m´aquina sem um SO ´e inconceb´ıvel. Entre os
mais utilizados hoje em dia, podemos citar: MS-DOS, Windows (95, 98, NT), Unix, Mac-OS e, claro, o
Linux.
1.1 Linux
O que quer dizer Linux? Uma defini¸c˜ao t´ecnica seria: Linux ´e um kernel de sistema operacional de livre
distribui¸c˜ao, gratuito, semelhante ao Unix.
O kernel, ou n´ucleo, ´e a parte do SO respons´avel pelos servi¸cos b´asicos e essenciais dos quais as fer-
ramentas de sistema e os aplicativos se utilizam. Entretanto, a maioria das pessoas usa o termo Linux
para se referir a um SO completo, baseado no kernel Linux. Assim chegamos a uma outra defini¸c˜ao:
Linux ´e um sistema operacional de livre distribui¸c˜ao, semelhante ao Unix, constitu´ıdo por um kernel,
ferramentas de sistema, aplicativos e um completo ambiente de desenvolvimento.
Outro termo muito empregado ´e distribui¸c˜ao, que consiste em um kernel Linux e uma cole¸c˜ao de
aplicativos e ferramentas de sistema. Existem v´arias distribui¸c˜oes do Sistema Operacional Linux e a dife-
ren¸ca entre cada uma delas encontra-se no conjunto de aplicativos e ferramentas de sistema, no programa
de instala¸c˜ao, na documenta¸c˜ao e, por fim, na vers˜ao do kernel Linux. Dentre as principais distribui¸c˜oes
Linux, podemos citar Red Hat, Debian, Slackware, Caldera e Conectiva, sendo esta ´ultima uma distri-
bui¸c˜ao brasileira1
que possui todos os m´odulos de instala¸c˜ao e toda a documenta¸c˜ao em portuguˆes.
O Linux ´e o resultado do trabalho de milhares de colaboradores, universidades, empresas de software e
distribuidores ao redor do mundo. Aliado a isso, o fato de ser um sistema aberto, de livre distribui¸c˜ao, vem
1http://www.conectiva.com.br
1
proporcionando ao Linux um r´apido desenvolvimento e uma ´agil atualiza¸c˜ao de softwares. A maior parte
do seu desenvolvimento ´e feita sob o projeto GNU2
da Free Software Foundation, o que torna obrigat´orio
a distribui¸c˜ao de todo o seu c´odigo fonte. Assim, qualquer pessoa pode fazer as modifica¸c˜oes que lhe forem
convenientes, al´em de acrescentar melhorias aos softwares que seguem essa linha de desenvolvimento. A
´unica exigˆencia ´e que o c´odigo alterado permane¸ca de dom´ınio p´ublico.
Antes de iniciarmos o nosso estudo sobre o Linux, ´e necess´ario conhecer um pouco mais sobre sua
origem.
1.2 A hist´oria do Linux
O kernel do Linux foi originalmente escrito por Linus Torvalds, do Departamento de Ciˆencia da Com-
puta¸c˜ao da Universidade de Helsinki, Finlˆandia, com a ajuda de v´arios programadores volunt´arios atrav´es
da Internet.
Linus Torvalds iniciou o kernel como um projeto particular, inspirado em seu interesse no Minix, um
pequeno sistema Unix desenvolvido por Andy Tannenbaum. Ele se limitou a criar, em suas pr´oprias
palavras, “a better Minix than Minix”3
. Ap´os trabalhar sozinho por algum tempo em seu projeto, ele
enviou a seguinte mensagem para o newsgroup comp.os.minix:
Vocˆe est´a ansioso por melhores dias do Minix 1.1, quando homens ser˜ao homens e escre-
ver˜ao seus pr´oprios “drivers” de dispositivo? Vocˆe est´a sem um bom projeto e ansioso para
come¸car a trabalhar em um S.O. o qual vocˆe possa modificar de acordo com suas necessidades?
Vocˆe fica frustrado quando tudo funciona em Minix? Chega de atravessar noites para obter
programas que executam corretamente? Ent˜ao esta mensagem pode ser exatamente para vocˆe.
Como eu mencionei h´a um mˆes atr´as, estou trabalhando em uma vers˜ao independente de
um S.O. similar ao Minix para computadores AT386. Ele est´a, finalmente, pr´oximo do est´agio
em que poder´a ser utilizado (embora possa n˜ao ser o que vocˆe esteja esperando), e eu estou
disposto a colocar os fontes para ampla distribui¸c˜ao. Ele est´a na vers˜ao 0.02... contudo obtive
sucesso executando bash, gcc, gnu-make, gnu-sed, compress˜ao, etc. nele.
No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira vers˜ao “oficial” do Linux, que recebeu
vers˜ao do kernel 0.02. Desde ent˜ao muitos programadores tˆem respondido ao seu chamado, e tˆem ajudado
a fazer do Linux o sistema operacional que ´e hoje.
1.3 Caracter´ısticas
O Linux ´e um sistema operacional livre, gratuito e possui todas as caracter´ısticas presentes nos sistemas
operacionais modernos. Eis algumas destas:
Multiplataforma: O Linux opera em computadores das fam´ılias Intel (386, 486, Pentium, etc) e com-
pat´ıveis (Cyrix e AMD), Motorola M680xx (Atari, Amiga e Macintosh), Alpha (DEC), Sparc (Sun),
MIPS (Silicon Graphics) e Power PC. Novas arquiteturas est˜ao sendo incorporadas com o seu de-
senvolvimento.
Multiprocessado: Possui suporte a computadores com mais de um processador.
Multitarefa: V´arios programas podem ser executados ao mesmo tempo.
Multiusu´ario: V´arios usu´arios podem operar a m´aquina ao mesmo tempo.
Al´em destas, o Linux apresenta ainda mem´oria virtual, bibliotecas compartilhadas (de liga¸c˜ao dinˆamica),
carregamento de drivers (m´odulos) sob demanda, suporte nativo a redes TCP/IP, f´acil integra¸c˜ao com
outros sistemas operacionais e padr˜oes de rede, nomes longos de arquivos, prote¸c˜ao de acesso a recursos
compartilhados, suporte a v´arios idiomas e conformidade com padr˜oes internacionais. Existem ainda
v´arios ambientes gr´aficos que se utilizam do mouse, ´ıcones e janelas (semelhantemente ao Windows) ao
inv´es das famigeradas linhas de comando.
2http://www.gnu.org
3“Um Minix melhor que o Minix.”
O Linux ´e um sistema operacional bastante atrativo n˜ao apenas por ser gratuito mas por outros
motivos tamb´em. O fato de ser baseado nos sistemas operacionais Unix – sistemas considerados maduros,
com mais de duas d´ecadas de desenvolvimento – contribuiu muito para a sua estabilidade e confiabilidade.
Isto ´e, um Linux configurado corretamente n˜ao “trava”. Chegamos ent˜ao a outro fator muito importante
em favor do sistema: o fato de poder ser configurado e adaptado segundo a necessidade de cada um
(apesar de, muitas vezes, isso n˜ao ser uma tarefa simples). Muitos j´a devem ter ouvido algu´em dizer: “O
meu Linux ´e melhor que o seu!”
Al´em disso, pode-se instalar num computador o Linux juntamente com outro sistema operacional. Por
exemplo, pode-se instalar Linux em uma m´aquina que j´a contenha Windows e utilizar os dois sistemas,
sem que nenhum dado seja perdido. Ou seja, o Linux consegue acessar todos os arquivos usados no
Windows.
Linux basico
Cap´ıtulo 2
Como ´e o Linux
2.1 Ligando seu computador com o Linux
Quando vocˆe liga seu computador, este realiza alguns testes e ent˜ao come¸ca a executar o sistema opera-
cional. No Linux, a primeira parte do sistema a ser carregada na mem´oria e executada ´e o kernel. Este,
ent˜ao, detecta e configura os dispositivos eletrˆonicos conectados ao computador. Ap´os isso, alguns pro-
gramas de sistema que prestam servi¸cos b´asicos, como acesso `a rede, s˜ao tamb´em inicializados. Ao longo
deste processo, o qual recebe o nome de boot do sistema, ou simplesmente boot, v´arias mensagens
s˜ao arquivadas e mostradas na tela para informar ao administrador do sistema do sucesso ou falha nesta
opera¸c˜ao.
Ap´os o boot, uma mensagem de sauda¸c˜ao1
seguida da palavra login aparece no v´ıdeo:
Bem-vindo ao sistema Linux 2.2.10
login:
Chegando a esse est´agio, o sistema aguarda a conex˜ao (login) de um usu´ario previamente cadastrado.
2.2 Conta de usu´ario
Para realizar o seu login, ´e necess´ario que o usu´ario possua uma conta v´alida na m´aquina em quest˜ao
(para obter uma conta, procure o administrador do sistema). Uma conta nada mais ´e que um cadastro
eletrˆonico que indica quem s˜ao as pessoas aptas a utilizar o sistema. Esse cadastro cont´em as seguintes
informa¸c˜oes:
N´umero de identifica¸c˜ao: N´umero inteiro ´unico para cada usu´ario do sistema, tal como um RG ou
CPF. Tamb´em denominado user id ou UID (user identification), serve para identificar cada um dos
usu´arios;
Nome de usu´ario: Tamb´em ´unico para cada usu´ario, ´e formado por apenas uma palavra, sem espa¸cos
em branco, e possui a mesma utilidade que o UID. A diferen¸ca est´a no fato de que enquanto
a m´aquina trabalha melhor com n´umeros (UIDs), n´os humanos – e tamb´em o administrador do
sistema – nos sa´ımos melhor com nomes. Este campo tamb´em recebe a denomina¸c˜ao de username
ou login;
Identifica¸c˜ao de grupo: Um grupo agrega usu´arios que realizam tarefas semelhantes ou que possuem
permiss˜oes de acesso semelhantes. O group id (GID) ´e o n´umero inteiro que identifica o grupo ao
qual o usu´ario pertence2
;
Senha: Constitui o mecanismo de seguran¸ca de acesso `a conta do usu´ario;
Nome completo: Nome completo do usu´ario ou descri¸c˜ao da finalidade da conta;
1Esta mensagem pode ser alterada, pois muito do Linux ´e configur´avel.
2Cada usu´ario pode fazer parte de v´arios grupos.
5
Diret´orio pessoal: Tamb´em denominado diret´orio home, ´e o diret´orio pessoal do usu´ario e reservado
para que este armazene os seus arquivos;
A ´ultima informa¸c˜ao contida neste cadastro ´e o nome do programa executado quando o usu´ario se conecta
ao sistema. Geralmente ´e o nome de um tipo interpretador de comandos.
Um programa interpretador de comandos (shell) fornece uma interface (meio de comunica¸c˜ao) simples
entre o usu´ario e o computador. Como um int´erprete que fica entre duas pessoas que falam l´ınguas
diferentes, o shell situa-se entre o usu´ario e o kernel. Ele “diz” ao kernel para fazer o trabalho que o
usu´ario solicitou, eliminando a necessidade deste ´ultimo ter que falar diretamente com o kernel em uma
linguagem que ele entenda.
O shell tamb´em ´e uma linguagem de programa¸c˜ao completa. Possui vari´aveis, constru¸c˜oes condicionais
e interativas, e ambiente adapt´avel ao usu´ario. Existem v´arios tipos de shells sendo que os mais conhecidos
s˜ao o Bourne Again Shell (bash) e o C Shell (csh). O shell preferido varia de usu´ario para usu´ario. Alguns
preferem a sintaxe com caracter´ısticas mais avan¸cadas do bash enquanto que outros preferem a sintaxe
mais estruturada do csh3
. No cap´ıtulo 4 veremos mais detalhes do bash.
2.3 Conectando-se ao sistema
A partir do momento em que o usu´ario obt´em uma conta, ele j´a pode se conectar (“logar”) no sistema.
O processo de “login” ´e simples. Na tela da mensagem de sauda¸c˜ao, ap´os a palavra “login”, o usu´ario
deve digitar o seu nome de usu´ario (username ou login), fornecido pelo administrador, e pressionar a
tecla ENTER (ou RETURN):
Bem-vindo ao sistema Linux 2.2.10
login: joao
Password:
O sistema aguardar´a, ent˜ao, que o usu´ario digite a sua senha4
(password) e pressione ENTER. Enquanto
o usu´ario digita a senha, os caracteres que constituem-na n˜ao aparecem na tela por motivo de seguran¸ca.
Fornecida a senha, o sistema consultar´a o cadastro de usu´arios procurando pelo nome de usu´ario fornecido
para ent˜ao conferir a validade da senha digitada. Caso esta n˜ao seja a mesma do cadastro ou o nome de
usu´ario fornecido n˜ao seja encontrado, uma mensagem de login inv´alido ser´a mostrada e o processo ser´a
reiniciado:
Bem-vindo ao sistema Linux 2.2.10
login: joao
Password:
Login incorrect
login:
Se o nome de usu´ario (login) e senha forem v´alidos, o sistema inicilizar´a a execu¸c˜ao de um interpretador de
comandos ou de um ambiente gr´afico e o usu´ario poder´a utilizar os aplicativos e os recursos computacionais
disponibilizados pela m´aquina. O processo de login ter´a sido conclu´ıdo com sucesso se o usu´ario estiver
vendo na tela o prompt do shell, em geral um “$”5
.
Quando o usu´ario terminar o seu trabalho, ´e muito importante que este realize o processo de desco-
nex˜ao. Por motivos de seguran¸ca, nunca se deve abandonar a m´aquina com uma conta “aberta”. Para
realizar o processo de desconex˜ao basta digitar logout e pressionar ENTER.
$ logout
Bem-vindo ao sistema Linux 2.2.10
login:
3Entretanto, para o uso de comandos mais comuns o tipo de shell usado n˜ao importa, pois a sintaxe ´e basicamente a
mesma e as diferen¸cas s´o come¸cam a aparecer em aplica¸c˜oes mais avan¸cadas.
4A princ´ıpio, o usu´ario recebe uma senha criada pelo administrador do sistema. Contudo, est´a senha pode ser alterada
pelo pr´oprio usu´ario.
5Como quase tudo no Linux, o prompt pode ser configurado. Veremos como fazer isso na se¸c˜ao 4.3.1
Para realizar o processo de desconex˜ao no modo gr´afico, clique com o bot˜ao direito do mouse sobre
qualquer ´area e escolha a op¸c˜ao Window Manager e em seguida Exit.
A mensagem de sauda¸c˜ao aparece novamente, deixando a sistema dispon´ıvel para outro usu´ario. No
pr´oximo cap´ıtulo, veremos o que podemos fazer uma vez “logados” no sistema.
2.4 Primeiros passos
Obtido sucesso no processo de login, o sistema executar´a o interpretador de comandos do usu´ario ou um
ambiente gr´afico.
No modo gr´afico os comandos ser˜ao digitados em um emulador de terminal. Cada ambiente possui
um processo para a abertura. No Window Maker basta apertar o bot˜ao direito do mouse sobre qualquer
´area da tela e escolher no menu a op¸c˜ao XShells e em seguida XTerm.
No modo texto, na tela ser´a mostrando o prompt, indicando que o usu´ario j´a pode digitar um comando:
$
O prompt pode ser constitu´ıdo ainda de informa¸c˜oes como nome de usu´ario, nome da m´aquina, diret´orio
que em o usu´ario est´a trabalhando, etc. . . Na se¸c˜ao tian van Kaick≪vankaick@hotmail.com¿refvarprompt
veremos como configur´a-lo. Por hora, adotaremos apenas o cifr˜ao ($).
Ao se digitar um comando e teclar ENTER, o interpretador executar´a esse comando. A seguir veremos
como descobrir quais informa¸c˜oes o sistema cont´em sobre a conta do usu´ario e sobre a m´aquina.
2.4.1 Quem sou eu? Onde estou?
O comando whoami6
mostra o nome do usu´ario associado com a conta em uso. Por exemplo, caso o
usu´ario joao execute esse comando, “joao” ser´a mostrado na tela seguido de um novo prompt:
$ whoami
joao
$
O comando hostname informa o nome da m´aquina que o usu´ario est´a operando. No exemplo abaixo, a
m´aquina chama-se “cerebro”:
$ hostname
cerebro
$
O comando groups ´e usado para mostrar os grupos de usu´arios aos quais este usu´ario pertence. No
exemplo abaixo, tais grupos s˜ao “estudantes” e “projeto”.
$ groups
estudantes projeto
$
Para obter v´arias informa¸c˜oes sobre a conta de um usu´ario qualquer – com exce¸c˜ao, evidentemente,
da senha – usa-se o comando finger. Este comando requer como parˆametro o login de um usu´ario.
$ finger joao
Login: joao Name: Jo~ao da Silva
Directory: /home/joao Shell: /bin/bash
Last login Wed Aug 25 17:05 on tty1
No mail.
No Plan.
$
6“Who am I ?” ou “Quem sou eu?”
3 Neste exemplo, as informa¸c˜oes sobre o usu´ario joao s˜ao solicitadas. Como resposta, recebemos o
seu nome de usu´ario (login), nome completo, o seu diret´orio pessoal (onde est˜ao os seus arquivos) e o
interpretador de comandos por ele utilizado. Al´em destas informa¸c˜oes, contidas no cadastro, tamb´em s˜ao
mostrados outros dados, como a ´ultima vez em que ele se conectou ao sistema, informa¸c˜ao sobre a leitura
de e-mail por parte deste usu´ario e, por ´ultimo, alguma mensagem que o usu´ario possa ter deixado em
um arquivo chamado .plan de seu diret´orio.
O comando who mostra todos os usu´arios que est˜ao usando o sistema no momento. Por exemplo:
$ who
root tty1 Aug 25 12:36
joao tty2 Aug 25 10:20
paulo tty3 Aug 25 11:15
juca tty4 Aug 25 9:37
$
A primeira coluna indica os nomes de login dos usu´arios. As outras indicam, respectivamente, o
terminal, a data e o hor´ario no qual cada usu´ario se conectou. No exemplo acima, est˜ao usando o
sistema, al´em de joao, os usu´arios root, paulo, juca. Em todos os sistemas Linux, root ´e o nome de
usu´ario dado ao administrador do sistema.
2.4.2 Mudan¸ca de Senha
Um dos primeiros passos para que o sistema se adapte ao usu´ario ´e a mudan¸ca da senha de login. Para isto
usa-se o comando yppasswd. ´E importante lembrar que a senha deve conter tanto caracteres mai´usculos
quanto min´usculos.
$ yppasswd
Please enter old password:
Please enter new password:
Please retype your new password:
The password had been changed.
$
Vale destacar tamb´em que, em Linux, os caracteres da senha n˜ao aparecem em forma de * como
normalmente, portanto deve-se redobrar a aten¸c˜ao ao digitar-se a senha.
2.5 Exerc´ıcios
1. Execute o comando who e utilize o finger com cada um do nomes de usu´arios que o primeiro
comando lhe mostrar.
2. Descubra para cada usu´ario, visto no exerc´ıcio anterior, a quais grupos eles pertencem.
3. Experimente o comando “w” e descubra a sua utilidade.
Cap´ıtulo 3
Conceitos b´asicos
Antes de prosseguirmos com outros comandos, o conhecimento de alguns conceitos b´asicos, tais como
arquivos e diret´orios, se faz necess´ario. Retorne a este cap´ıtulo sempre que tiver d´uvidas pois os conceitos
aqui apresentados s˜ao de grande importˆancia para o entendimento do resto do conte´udo da apostila.
3.1 Arquivos
Um arquivo representa um conjunto de informa¸c˜oes e ´e a unidade m´ınima de armazenamento de dados,
quer seja em disco ou fita magn´etica. Ou seja, qualquer tipo de informa¸c˜ao (texto, imagem, som, etc. . . )
armazenada em um destes tipos de dispositivo eletrˆonico estar´a na forma de um ou mais arquivos. Cada
arquivo possui, entre outras propriedades, um nome que o identifica e um tamanho que indica o n´umero
de caracteres (bytes) que ele cont´em. Abaixo est˜ao alguns exemplos de nomes de arquivos:
carta
Carta
arquivo1
videoclip.mpg
musica.mp3
copia_de_seguranca.tar.gz
linux-2.2.13-SPARC.tar.gz
O Linux distingue letras mai´usculas de min´usculas. Assim, os dois primeiros exemplos, carta e Carta,
constituem nomes de arquivos diferentes. O Linux tamb´em permite que nomes de arquivos sejam longos,
com at´e mais de uma centena de caracteres. Como se pode notar, alguns dos nomes dos arquivos acima
possuem um ou mais pontos (“.”). A seq¨uˆencia de caracteres, ap´os o ´ultimo ponto no nome do arquivo,
´e denomidada extens˜ao do arquivo e indica a natureza de seu conte´udo ou o aplicativo com o qual
ele ´e utilizado. Arquivos n˜ao precisam, obrigatoriamente, possuir uma extens˜ao em seu nome. Isto ´e
apenas uma conven¸c˜ao feita por usu´arios e desenvolvedores de aplicativos para facilitar a identifica¸c˜ao
do conte´udo contido em um arquivo. Imagine um usu´ario tentando abrir um arquivo de som em um
processador de texto. Certamente n˜ao conseguiria. ´E justamente para evitar esses enganos que as
extens˜oes de arquivo s˜ao utilizadas. Por´em, nada impede que o nome de um arquivo n˜ao tenha nenhuma
extens˜ao. A seguir temos algumas extens˜oes de arquivos muito comuns de serem encontradas:
txt Indica que o arquivo cont´em apenas texto (ASCII);
bak Indica que se trata de um arquivo de c´opia de seguran¸ca (backup);
old Arquivo cujo conte´udo fora atualizado e gravado em outro arquivo;
jpg Arquivo que cont´em uma imagem em formato jpeg;
mp3 Arquivo de som;
html Arquivo contendo hipertexto, que ´e encontrado nas p´aginas da Internet.
9
Existe uma enorme variedade de extens˜oes de arquivos. Deve-se lembrar que as extens˜oes s˜ao apenas
uma conven¸c˜ao e n˜ao constituem uma regra. Assim, nada impede um usu´ario de dar uma extens˜ao txt
(arquivo de texto) a um arquivo que contenha uma imagem. Apesar de isso n˜ao ser muito aconselh´avel
– pois ele mesmo pode se confundir – a imagem pode ser visualizada normalmente, bastando-se utilizar
o aplicativo correto, ou seja, aquele que interprete o conte´udo do arquivo como sendo dados de uma
imagem.
3.2 Diret´orios
Um segundo conceito importante ´e o de diret´orio, muitas vezes tamb´em denominado pasta. Realmente, um
diret´orio ´e muito semelhante a uma pasta de escrit´orio: ´e utilizado para se agrupar v´arios arquivos. Cada
diret´orio ´e identificado por um nome, da mesma forma que arquivos1
. Extens˜oes podem ser utilizadas,
mas geralmente n˜ao o s˜ao. Um diret´orio pode conter ainda, al´em de arquivos, outros diret´orios, que
por sua vez tamb´em podem conter arquivos e diret´orios. Assim, surgem as hierarquias de diret´orios ou
´arvores de diret´orios.
O diret´orio no topo de qualquer hierarquia de diret´orios, e que cont´em todos os outros diret´orios, ´e
denominado diret´orio raiz e, ao inv´ez de um nome, ´e identificado pelo s´ımbolo “/” (barra). Assim, para
identificar um diret´orio precisamos al´em do seu nome, os nomes de todos os diret´orios que o contˆem, at´e
chegarmos ao diret´orio raiz.
A figura acima mostra uma ´arvore de diret´orios2
. Na figura, o diret´orio /home cont´em os subdiret´orios
ftp, rildo, e julius; /dev cont´em fd0 e cua0; /usr cont´em bin, lib, man e local.
Abaixo temos alguns exemplos do que ´e chamado de caminho absoluto de diret´orio, ou seja,
especifica¸c˜ao do caminho desde o diret´orio raiz:
/
/etc
/home/ftp
/home/julius
/proc
/usr/local
/usr/bin
S˜ao esses caminhos que identificam um diret´orio em uma hierarquia de diret´orios. Para identificarmos
um arquivo, informamos a identifica¸c˜ao do diret´orio que o cont´em, seguido do nome deste arquivo. Por
exemplo:
/home/julius/relatorio.txt
/usr/local/musica.mp3
/etc/servidores.bak
/carta.txt
Dependendo do shell utilizado, podemos evitar ter que escrever o caminho absoluto dos arquivos. O
interpretador de comandos bash, por exemplo, nos permite as seguintes substitui¸c˜oes:
1No Linux, um diret´orio ´e, na verdade, um tipo especial de arquivo.
2Os nomes dos arquivos contidos em cada diret´orio n˜ao s˜ao mostrados.
. O caracter “ponto” representa o diret´orio corrente, ou seja, aquele em que estamos trabalhando;
.. A seq¨uˆencia “ponto ponto”, sem espa¸cos em branco intermedi´arios, identifica o diret´orio “pai” do
diret´orio corrente, ou seja, aquele no qual o diret´orio corrente est´a contido;
˜ O caracter “til” representa o diret´orio pessoal (home) do usu´ario; ~login representa o diret´orio pessoal
do usu´ario identificado por “login”.
3.3 Sintaxes
Antes de abordarmos os primeiros comandos, vamos entender como a sintaxe destes ´e apresentada nas
documenta¸c˜oes existentes. Uma sintaxe de comando explica a forma geral de um comando – seu nome,
os argumentos que recebe e op¸c˜oes. Vamos analisar ent˜ao a sintaxe abaixo:
<nome do comando> {a,b,c} [<op¸c~oes>] [<argumentos>]
Os s´ımbolos <, >, [, ], { e } s˜ao usados apenas para explicar a sintaxe dos comandos, seguindo uma
conven¸c˜ao. N˜ao ´e necess´ario digit´a-los. O texto entre os s´ımbolos < e > constitui uma descri¸c˜ao do
que deve ser digitado. Assim, o exemplo acima informa que a linha de comando come¸ca com o nome do
comando a ser executando, n˜ao sendo necess´ario digitar os caracteres < e >. As chaves ({ e }) indicam
os valores que podem ser usados em determinado campo do comando. Os colchetes ([ e ]) servem para
informar que todo o conte´udo entre eles ´e opcional, isto ´e, pode ser omitido. Conforme os comandos
forem sendo apresentados essas regras ficar˜ao mais claras.
Em muitos exemplos desta apostila, ser´a empregado o s´ımbolo “#” para acrescentar coment´arios
dos autores ao texto mostrado na tela do computador. Este s´ımbolo e o texto `a sua direita indicam
observa¸c˜oes usadas para melhor explicar comandos e demais t´opicos. Tais observa¸c˜oes n˜ao s˜ao mostrados
na tela do computador.
3.4 Manipulando diret´orios
Ap´os o processo de login, o shell acessar´a automaticamente o diret´orio pessoal do usu´ario, onde est˜ao os
seus arquivos. Como j´a vimos, o diret´orio pessoal ´e defindo pelo administrador do sistema e aparece na
sa´ıda do comando finger (se¸c˜ao 2.4.1). Para confirmar o nome do diret´orio de trabalho, usa-se o comando
pwd (Print name of Working Directory):
$ pwd
/home/joao
$
Note que pwd sempre informa o nome do diret´orio de trabalho. No exemplo acima, tal diret´orio
coincide com o diret´orio pessoal de Jo˜ao da Silva, pois este acaba de efetuar o login no sistema.
Para listar o conte´udo de um diret´orio (mostrar os nomes dos arquivos e diret´orios nele contidos)
usamos o comando ls (list):
$ ls
Mail Mailbox artigos cartas
$
Podemos ver aqui que Jo˜ao possui quatro itens em seu diret´orio pessoal. Cada um desses itens – cujos
nomes s˜ao Mail, Mailbox, artigos e cartas – representa um arquivo ou um diret´orio.
O comando ls -F pode ser usado para se identificar quais itens de um diret´orio s˜ao arquivos e quais
s˜ao diret´orios (subdiret´orios).
$ ls -F
Mail/ Mailbox artigos/ cartas/
$
Neste exemplo, a op¸c˜ao “-F” faz com que o comando ls adicione um caracter ao nome de cada item de
diret´orio, identificando o seu tipo. Diret´orios s˜ao identificados por uma barra (/). Arquivos comuns n˜ao
tˆem nenhum caracter acrescentado ao seu nome. Logo, dentre os itens de diret´orio acima, Mail, artigos
e cartas s˜ao diret´orios e Mailbox ´e um arquivo comum.
Caso vocˆe deseje obter mais informa¸c˜oes sobre o ls, utilize o seguinte comando:
man ls
Para mudar de diret´orio, movendo-se na ´arvore de diret´orios, utilizamos o comando cd (Change
Directory). cd recebe como argumento o nome de um novo diret´orio de trabalho, que pode ser um
caminho absoluto ou relativo. Sua forma geral ´e a seguinte:
cd <nome do novo diret´orio de trabalho>
Caso o usu´ario quisesse mover-se para o subdiret´orio artigos, seria necess´ario digitar:
$ cd artigos
$
Neste caso informamos um caminho relativo do diret´orio. Isso tamb´em poderia ser feito usando-se o
caminho absoluto, do seguinte modo:
$ cd /home/joao/artigos
$
Como vimos na se¸c˜ao 3.2, o shell pode nos facilitar essa tarefa. Poder´ıamos ter substitu´ıdo /home/joao
pelo caracter “~” (til)3
ou “.” (ponto). Neste caso, “~” e “.” coincidem, pois o diret´orio pessoal ´e o
mesmo que o diret´orio de trabalho. Recapitulando, estando em /home/joao, qualquer um dos seguintes
comandos teria o mesmo efeito, isto ´e, mudariam o diret´orio de trabalho para /home/joao/artigos.
cd artigos
cd /home/joao/artigos
cd ~/artigos
cd ./artigos
Para verificar o resultado de qualquer um deles:
$ pwd
/home/joao/artigos
$
O comando cd pode ser usado para mudarmos para qualquer outro diret´orio da ´arvore de diret´orios
desde que tenhamos permiss˜ao de acesso (veja a se¸c˜ao 3.6).
Experimente a seguinte seq¨uˆencia de comandos:
cd /
pwd
ls
cd /home
pwd
ls
cd /etc
pwd
ls
cd
pwd
ls
cd ~
pwd
ls
3Aqui, supomos que estamos conectados com o login joao.
Note que os dois ´ultimos comandos cd retornam ao diret´orio pessoal do usu´ario. O comando cd sem
um nome de diret´orio tamb´em leva ao diret´orio pessoal.
Todo diret´orio possui uma entrada (item) com o nome “..”4
que faz referˆencia ao diret´orio anterior5
,
isto ´e, o “pai” do diret´orio atual. Assim, o comando
cd ..
muda o diret´orio de trabalho para o diret´orio um n´ıvel acima na hierarquia de diret´orios.
$ pwd
/home/joao
$ cd ..
$ ls
$ pwd
/home
$
Para retornar ao diret´orio de trabalho anterior, utilize o comando “cd -” (“cd menos”):
$ cd
$ pwd
/home/joao
$ cd /bin
$ pwd
/bin
$ cd -
$ pwd
/home/joao
$
3.4.1 Criando e removendo diret´orios
Se quisermos criar um novo diret´orio chamado trabalhos no diret´orio pessoal do Joao, devemos usar o
comando mkdir (Make Directory):
$ pwd
/home/joao
$ ls
Mail Mailbox artigos cartas
$ mkdir trabalhos # cria o diret´orio
$ ls
Mail artigos cartas trabalhos
Mailbox
$ cd trabalhos
$ pwd
/home/joao/trabalhos
$
Poder´ıamos ter criado o novo diret´orio com qualquer um dos comandos abaixo, pois o resultado seria
o mesmo.
mkdir ./trabalhos
mkdir /home/joao/trabalhos
mkdir ~/trabalhos
4Lˆe-se “ponto ponto”.
5O diret´orio hierarquicamente superior ao atual na ´arvore de diret´orios.
A opera¸c˜ao inversa `a do comando mkdir ´e realizada pelo comando rmdir (Remove Directory) que
remove um diret´orio:
$ ls
Mail artigos cartas trabalhos
Mailbox
$ rmdir trabalhos # remove o diret´orio
$ ls
Mail Mailbox artigos cartas
$
Analogamente, poder´ıamos ter usado os comandos:
rmdir ./trabalhos
rmdir /home/joao/trabalhos
rmdir ~/trabalhos
Uma observa¸c˜ao deve ser feita: se o diret´orio a ser removido n˜ao estiver vazio, este comando n˜ao
funcionar´a. O usu´ario ter´a que remover todo o conte´udo do diret´orio antes (veja se¸c˜ao 3.5.5).
3.4.2 A ´arvore de diret´orios do Linux
A ´arvore de diret´orios do Linux ´e controlada por um conjunto de regras estabelecidas pelo Linux Filesys-
tem Standard6
, ou FSSTND. Este tenta seguir a tradi¸c˜ao Unix, tornando o Linux semelhante `a grande
maioria dos sistemas Unix atuais.
Por que estudar primeiro a organiza¸c˜ao dos arquivos? A reposta ´e simples. Conhecendo a distribui¸c˜ao
dos arquivos (dados) na ´arvore de diret´orios, fica mais f´acil entender o que as aplica¸c˜oes e ferramentas
devem fazer. A seguir temos uma breve descri¸c˜ao dos principais diret´orios e seus conte´udos:
/ O diret´orio raiz, que ´e espec´ıfico para cada m´aquina. Geralmente armazenado localmente, cont´em
os arquivos para a carga do sistema (boot), de forma a permitir a inclus˜ao dos outros sistemas de
arquivos (outras hierarquias de diret´orios) na ´arvore de diret´orios.
/bin Cont´em programas (execut´aveis) que s˜ao necess´arios durante o boot do sistema mas que tamb´em
podem ser usados pelos usu´arios.
/dev Os arquivos deste diret´orio s˜ao tamb´em conhecidos como “device drives” e s˜ao usados para acessar
dispositivos eletrˆonicos do sistema7
. Por exemplo, assim como podemos ler dados de um arquivo,
podemos ler dados de um disquete acessando /dev/fd0.
/etc Este diret´orio ´e um dos mais importantes. Cont´em uma miscelˆanea de dados de configura¸c˜ao, como
por exemplo roteiros (scripts) de inicializa¸c˜ao do sistema em seus v´arios n´ıveis e outros como a tabela
de sistemas de arquivo, configura¸c˜ao da inicializa¸c˜ao do sistema para cada n´ıvel, configura¸c˜oes de
login para todos os usu´arios, configura¸c˜ao da fila de impress˜ao, e um n´umero consider´avel de arquivos
para configura¸c˜ao de rede e outros aspectos do sistema, incluindo a interface gr´afica.
/home Cont´em os diret´orios pessoais dos usu´arios comuns8
. Quando este diret´orio se torna excessiva-
mente grande, ele pode ser subdividido para facilitar sua manuten¸c˜ao. Por exemplo: /home/professores,
/home/estudantes.
/lib Este diret´orio cont´em bibliotecas do sistema. O nome lib vem de library, ou biblioteca.
/lost+found Um diret´orio aonde s˜ao colocados os arquivos “recuperados” pelo utilit´ario fsck, isto ´e,
dados orf˜aos (perdidos) no disco ou que pertenciam a arquivos danificados.
/mnt ´e um diret´orio com pontos para montagem de dispositivos de bloco, como discos r´ıgidos adicionais,
disquetes, CD-ROMs, etc. Simplificando, ´e o lugar reservado para a inclus˜ao de outras hierarquias
de diret´orios, que podem estar em outros dispositivos ou em outra m´aquina da rede.
6Padr˜ao de Sistema de Arquivos Linux.
7Recursos como discos, modems, mem´oria, etc. . .
8O superusu´ario, ou admistrador do sistema, utiliza o diret´orio /root
/proc ´e um diret´orio cujos dados s˜ao armazenados na mem´oria e n˜ao em disco. Nele encontramos
“arquivos” com a configura¸c˜ao atual do sistema, dados estat´ısticos, dispositivos j´a montados, in-
terrup¸c˜oes, endere¸cos e estados das portas f´ısicas, dados sobre a rede, processador, mem´oria, etc.
Al´em disso, cont´em subdiret´orios com informa¸c˜oes detalhadas sobre o estado de cada programa em
execu¸c˜ao na m´aquina.
/sbin Execut´aveis e ferramentas para a administra¸c˜ao do sistema (para uso do superusu´ario).
/tmp Local destinado aos arquivos tempor´arios. Observe a duplicidade aparente deste diret´orio com
o /var/tmp. Na realidade o /tmp, em geral, tem os dados apagados entre uma sess˜ao e outra,
enquanto que o /var normalmente fica com os dados salvos por mais tempo. Programas executados
ap´os o boot do sistema devem preferencialmente usar o diret´orio /var/tmp, que provavelmente ter´a
mais espa¸co dispon´ıvel.
/usr Cont´em arquivos de comandos, programas, bibliotecas, manuais, e outros arquivos est´aveis, isto
´e, que n˜ao precisem ser modificados durante a opera¸c˜ao normal do sistema. O Linux possibilita
ao administrador da rede instalar aplicativos no /usr de apenas uma m´aquina e compartilhar esse
diret´orio com outras m´aquinas da rede.
/var Cont´em em geral os arquivos que sofrem modifica¸c˜oes durante a sess˜ao, bem como arquivos tem-
por´arios. Cada m´aquina possui o seu pr´oprio diret´orio /var (n˜ao ´e compartilhado em rede).
Alguns destes diret´orios ser˜ao abordados mais detalhadamente a seguir.
O Diret´orio /etc
O diret´orio /etc , como j´a mencionamos anteriormente, possui arquivos relacionados com a configura¸c˜ao
dos v´arios aspectos do sistema. Muitos programas n˜ao-padronizados pelas distribui¸c˜oes de Linux tamb´em
se utilizam desse diret´orio para colocar seus arquivos de configura¸c˜oes gerais. Configura¸c˜oes espec´ıficas
para cada usu´ario residem freq¨uˆentemente no diret´orio pessoal (home)9
de cada um. Estes s˜ao alguns
dos principais arquivos do /etc:
/etc/passwd Este arquivo constitui uma base de dados (contas) com informa¸c˜oes dos usu´arios que
podem logar no sistema. Tem um formato de sete campos, separados pelo caracter “:” (dois
pontos) e sempre na mesma ordem: nome de login do usu´ario; senha criptografada (codificada); id
do usu´ario, grupo prim´ario deste usu´ario; nome completo ou descri¸c˜ao da conta; diret´orio pessoal
do usu´ario; e shell inicial. Para mostrar melhor como s˜ao estes valores, abaixo temos um exemplo
de uma linha deste arquivo:
maria:gfTMTkLpLeupE:500:100:Maria da Silva:/home/maria:/bin/bash
Quando estamos utilizando shadow password10
, o segundo campo ´e substituido por um “*” e a senha
´e armazenada em outro arquivo, normalmente acess´ıvel somente ao administrador do sistema.
/etc/group Define os grupos aos quais os usu´arios pertencem. Cont´em linhas da forma:
<nome do grupo>:<senha>:<ID do grupo>:<lista de usu´arios>
Um usu´ario pode pertencer a qualquer n´umero de grupos e herdar todas as permiss˜oes de acesso
a arquivos desses grupos. Opcionalmente um grupo pode ter uma senha – codificada no campo
senha. O ID do grupo ´e um c´odigo como o ID do usu´ario no arquivo /etc/passwd. O ´ultimo campo
´e uma lista com os nomes (logins) separados por v´ırgulas, de todos os usu´arios que pertencem a
este grupo.
/etc/fstab Este arquivo cont´em uma tabela de parˆametros para a montagem (inclus˜ao) de sistemas de
arquivos de discos (r´ıgidos, CD-ROMs, disquetes, de rede) na ´arvore de diret´orios. Tamb´em ´e ´util
para determinar quais deles ser˜ao montados automaticamente durante o boot, e quais dever˜ao ser
montados apenas quando os seus diret´orios s˜ao visitados.
9/home/<nome do usu´ario>
10Software que evita o acesso `as senhas criptografadas dos usu´arios.
/etc/inittab Tabela com configura¸c˜oes de inicializa¸c˜ao de diversos programas.
/etc/issue Cont´em a mensagem de sauda¸c˜ao – ou outras informa¸c˜oes – apresentadas aos usu´arios antes
do processo de login.
/etc/motd O conte´udo deste arquivo ´e exibido imediatamente ap´os um processo de login bem-sucedido,
e antes do shell ser executado. motd significa “Message of the Day”, ou “Mensagem do Dia”.
/etc/mtab Tabela dos dispositivos que se encontram montados. O seu formato ´e semelhante ao do
/etc/fstab. Note que este arquivo ´e modificado dinamicamente `a medida que montamos ou desmon-
tamos sistemas de arquivos.
/etc/printcap Banco de dados com as capacidades (habilidades) das impressoras.
/etc/termcap Banco de dados com as capacidades dos terminais. Atualmente o banco de dados mais
usado para esse fim ´e o terminfo. Os dados contidos nestes bancos de dados referem-se a sequˆencias
de controle para realizar opera¸c˜oes com a tela (limpeza, movimenta¸c˜ao do cursor, etc), bem como
quais sequˆencias de eventos de teclas s˜ao enviados quando uma tecla especial – por exemplo HOME,
INSERT, F1 – ´e pressionada.
Al´em destes, existem outros arquivos presentes em /etc, como arquivos de configura¸c˜ao de ambiente
de rede, entre eles: hosts, hosts.deny, hosts.allow, host.conf, exports, networks, etc. . .
Como podemos ver, no Linux as configura¸c˜oes do sistema s˜ao vis´ıveis (textos), o que nem sempre
ocorre em outros sistemas operacionais. Por esta raz˜ao diz-se que administrar um sistema Linux ´e
manipular corretamente arquivos texto.
O Diret´orio /usr
O diret´orio /usr ´e geralmente grande, uma vez que muitos programas s˜ao instalados nele. Todos os
arquivos deste diret´orio vˆem da distribui¸c˜ao Linux e geralmente s˜ao compartilhados na rede, enquanto
que programas localmente instalados s˜ao armazenados em /usr/local. Isto faz com que seja poss´ıvel
atualizar o sistema para uma nova vers˜ao de distribui¸c˜ao ou mesmo uma nova distribui¸c˜ao sem que seja
necess´ario instalar todos os programas novamente. Os principais subdiret´orios do /usr est˜ao listados
abaixo:
/usr/local Softwares instalados localmente – que n˜ao s˜ao compartilhados de outra m´aquina da rede –
e outros arquivos e softwares que n˜ao vˆem com a distribui¸c˜ao utilizada.
/usr/X11R6 Arquivos do X Window System, o sistema gr´afico de janelas. Para simplificar o seu
desenvolvimento e instala¸c˜ao, os arquivos do X n˜ao s˜ao integrados com o resto do sistema.
/usr/bin Comandos dos usu´arios. Alguns outros comandos est˜ao em /bin ou /usr/local/bin (veja
/usr/local).
/usr/sbin Comandos para administra¸c˜ao do sistema (utilizados apenas pelo administrador).
/usr/man, /usr/info, /usr/doc P´aginas de manual, documentos GNU info e outros arquivos de do-
cumenta¸c˜ao diversa, respectivamente.
/usr/include Arquivos de cabe¸calho para programas em linguangem C.
/usr/lib Arquivos de dados imut´aveis, incluindo alguns arquivos de configura¸c˜ao.
O Diret´orio /var
O diret´orio /var cont´em dados que s˜ao alterados quando o sistema est´a operando normalmente. ´E
espec´ıfico para cada sistema, ou seja, n˜ao deve ser compartilhado com outras m´aquinas em uma rede.
/var/catman Algumas p´aginas de manual s˜ao armazenadas em /usr/man e vˆem numa vers˜ao pr´e-
formatada. Outras p´aginas de manual precisam ser formatadas quando s˜ao acessadas pela primeira
vez. A vers˜ao formatada ´e ent˜ao armazenada em /var/man e o pr´oximo usu´ario a acessar a essa
p´agina n˜ao ter´a que esperar pela formata¸c˜ao. O arquivo /var/catman guarda informa¸c˜oes sobre as
p´aginas que foram formatadas recentemente (cache).
/var/lib Arquivos alterados enquanto o sistema est´a operando.
/var/local Dados vari´aveis para programas instalados em /usr/local.
/var/log Arquivos de log (registro) para v´arios programas especialmente login e syslog. Arquivos em
/var/log tendem a crescer indefinidamente e precisam ser apagados regularmente.
/var/run Arquivos que contˆem informa¸c˜oes sobre o sistema e s˜ao v´alidos at´e que haja um novo boot.
Por exemplo, /var/run/utmp cont´em informa¸c˜oes sobre usu´arios atualmente logados.
/var/spool Diret´orio com dados da fila de trabalho de impressoras, correio eletrˆonico (e-mail), not´ıcias
(news), etc. . .
/var/tmp Arquivos tempor´arios que devem existir por um per´ıodo de tempo mais longo que aqueles
armazenados em /tmp.
O Diret´orio /proc
O diret´orio /proc cont´em um conjunto de arquivos “virtuais”. Estes arquivos n˜ao existem em disco
efetivamente e s˜ao criados na mem´oria pelo kernel. Alguns dos mais importantes arquivos e diret´orios
s˜ao descritos abaixo:
/proc/n ´e um diret´orio com informa¸c˜oes sobre o processo n´umero n. Cada programa em execu¸c˜ao
(processo) tem um subdiret´orio correspondente em /proc.
/proc/cpuinfo Informa¸c˜oes a respeito do processador como tipo, modelo e performance.
/proc/devices Lista de controladores de disposit´ıvo (device drivers) configurados no kernel em execu¸c˜ao.
/proc/dma Informa quais canais de acesso direto `a mem´oria (Direct Memory Access) est˜ao sendo uti-
lizados atualmente.
/proc/filesystems Sistemas de arquivos configurados no kernel.
/proc/interrupts Informa quais interrup¸c˜oes de hardware est˜ao em uso.
/proc/ioports Informa quais portas de entrada e sa´ıda est˜ao em uso no momento.
/proc/meminfo Informa sobre o atual uso de mem´oria, real e virtual.
/proc/net Informa o status dos protocolos de redes.
/proc/stat V´arias informa¸c˜oes estat´ısticas sobre o sistema.
/proc/version Informa a vers˜ao do kernel.
3.5 Manipulando arquivos
3.5.1 Criando arquivos
Para exemplificarmos a manipula¸c˜ao de arquivos usaremos o comando touch para criarmos arquivos
vazios, cuja sintaxe ´e:
touch <nome do arquivo>
Outro modo de cria¸c˜ao de arquivos, mas desta vez com um conte´udo de texto, ´e usando o comando
cat cuja sintaxe ´e:
cat > <nome do arquivo>
´E importante notar o sinal ≫”que em breve ser´a melhor estudado, assim como as outras fun¸c˜oes do
comando cat.
3.5.2 Arquivos ocultos
No Linux, arquivos cujos nomes comecem por um “.” (ponto) n˜ao s˜ao mostrados na tela quando utilizamos
o comando ls ou “ls -l”. Isto ´e, colocar um ponto no in´ıcio do nome de um arquivo torna ele invis´ıvel ao
comando ls, em sua forma simples. Geralmente arquivos relacionados a configura¸c˜oes s˜ao ocultos (veja
se¸c˜ao 4.4). Para vizualizar estes arquivos utilize qualquer um dos seguintes comandos:
ls -a
ls -la
A op¸c˜ao “a” (all) mostra todos os arquivos do diret´orio, incluindo os arquivos que iniciam com ponto,
os chamados arquivos ocultos.
3.5.3 Copiando arquivos
A c´opia de arquivos ´e feita usando o comando cp , cuja sintaxe ´e:
cp <arquivo original> <arquivo c´opia>
O primeiro argumento indica o arquivo a ser copiado e pode ser composto pelo caminho absoluto ou
pelo caminho relativo do arquivo. O segundo argumento indica o arquivo a ser criado, ou seja, a c´opia.
cp /home/joao/cartas/texto1.txt /home/joao/artigos/texto1.txt
cp ~joao/cartas/texto1.txt ~joao/artigos/texto1.txt
Os comandos do exemplo acima copiam o arquivo texto1.txt do diret´orio cartas de joao para o diret´orio
artigos do mesmo usu´ario. Ainda, se o usu´ario que executar o comando for joao:
cp ~/cartas/texto1.txt ~/artigos/texto1.txt
A seq¨uˆencia de comandos abaixo produz o mesmo resultado usando nomes relativos para os arquivos:
$ cd /home/joao
$ cp cartas/texto1.txt artigos/texto1.txt
Se o segundo argumento for constitu´ıdo apenas por um nome de diret´orio, a c´opia ser´a criada nesse
diret´orio com o mesmo nome do arquivo original. Assim, o comando abaixo tamb´em produz o mesmo
resultado que o anterior (se o diret´orio de trabalho for /home/joao) .
$ cp cartas/texto1.txt artigos
No exemplo abaixo temos um arquivo sendo copiado para o diret´orio atual, /home/joao/artigos,
representado pelo “.” (ponto) no final do comando.
$ pwd
/home/joao/artigos
$ cp ~paulo/documentos/projeto.txt .
Caso o diret´orio do arquivo original e da c´opia sejam o mesmo, deve-se especificar um nome diferente
para esta.
$ cp artigos/texto1.txt artigos/texto1.old
3.5.4 Mudando o nome e o lugar de arquivos e diret´orios
O comando mv possui a mesma sintaxe do comando cp mas ao inv´es de copiar arquivos ´e utilizado para
movˆe-los de um diret´orio para outro. Se os diret´orios forem o mesmo, especificamos um nome diferente
para o arquivo e o efeito ´e a troca de nomes.
$ mv ~joao/cartas/texto1.txt ~joao/artigos/texto1.txt
Depois de executados os comandos acima, o diret´orio cartas n˜ao mais cont´em o arquivo texto1.txt. O
exemplo abaixo ´e equivalente ao acima.
$ cd /home/joao
$ mv cartas/texto1.txt artigos
Para renomear um arquivo basta movˆe-lo para o mesmo diret´orio em que se encontra, especificando
um nome diferente:
$ cd /home/joao/cartas
$ mv texto1.txt carta1.txt
Agora, o diret´orio cartas n˜ao mais possui um arquivo chamado texto1.txt, mas sim um arquivo de
nome carta1.txt.
Os procedimentos acima tamb´em se aplicam a diret´orios.
3.5.5 Removendo arquivos
Para remover (apagar) um arquivo usamos o comando rm. A seguir temos a sua sintaxe e alguns
exemplos.
Sintaxe: rm <arquivo>
rm /home/joao/artigos/carta1.txt
rm ~/artigos/carta1.txt
rm carta1.txt
Para remover um diret´orio, deve-se antes remover todos os arquivos que ele cont´em e em seguida utilizar
o comando rmdir como j´a foi visto.
3.5.6 Verificando o tipo de arquivos
Para verificar o tipo de um arquivo, usa-se o comando file. Este realiza uma s´erie de testes para cada
nome de arquivo passado como argumento, tentando classific´a-los.
Sintaxe: file <arquivo>
$ file carta.txt
carta: ASCII text
$ file pinguim.gif
pinguin.gif: GIF image data, version 89a, 258 x 303,
$ file musica.mp3
musica.mp3: MPEG audio stream data
$ file .
.: directory
$ file ..
..: directory
3.5.7 Vendo o conte´udo de arquivos texto
O comando cat imprime na tela todo o conte´udo de um arquivo do tipo texto. Sintaxe: cat <arquivo>
Diferentemente de cat, o comando more exibe o conte´udo de arquivos texto fazendo pausas a cada
vez em que a tela ´e completamente preenchida. O texto “--More--” ´e mostrado na parte inferior da tela,
seguido de um indicador para a porcentagem do conte´udo do arquivo que j´a foi exibida.
Ao teclar-se ENTER, more exibir´a uma linha a mais de texto. Pressionando-se a barra de espa¸co
outra tela ser´a exibida. O caracter “b” faz com que more exiba a tela anterior e “q” provoca o t´ermino
da execu¸c˜ao do comando.
Para se procurar por uma palavra – ou uma cadeia de caracteres – em um arquivo pode-se pressionar
o caracter “/” (barra) quando “--More--” estiver sendo mostrado, digitar a palavra e teclar ENTER.
Sintaxe: more <arquivo>
Existem ainda os comandos head e tail que mostram, respectivamente, as partes inicial e final de
um arquivo.
head [-n] <arquivo>
tail [-n] <arquivo>
Acima, o valor opcional n indica o numero de linhas a partir do inicio (head) ou a partir do final
(tail) do arquivo.
head -10 texto1.txt
tail -20 texto1.txt
Nos exemplos, s˜ao exibidas, respectivamente, as dez primeiras e as vinte ´ultimas linhas do arquivo
texto1.txt.
3.6 Permiss˜oes
Todo arquivo tem necessariamente um nome e um conjunto de dados. O Linux associa ainda a cada
arquivo algumas outras informa¸c˜oes chamadas atributos de arquivo. Entre estes atributos est˜ao o tipo
do arquivo e as permiss˜oes de acesso a ele. Tais permiss˜oes constituem um mecanismo de seguran¸ca
necess´ario devido a existˆencia de v´arios usu´arios utiliando o mesmo sistema.
3.6.1 Os tipos de permiss˜oes de acesso
O sistema de arquivos do Linux permite restringir a determinados usu´arios as formas de acesso a arquivos
e diret´orios. Assim, a cada arquivo ou diret´orio ´e associado um conjunto de permiss˜oes. Essas permiss˜oes
determinam quais usu´arios podem ler, escrever (alterar), ou executar um arquivo (no caso de arquivos
execut´aveis como programas). Se um usu´ario tem permiss˜ao de execu¸c˜ao para determinado diret´orio,
significa que ele pode realizar buscas dentro dele, e n˜ao execut´a-lo como se fosse programa. As permiss˜oes
de acesso aos arquivos podem ser vistas atrav´es do comando “ls -l” . Ao execut´a-lo, podemos notar
v´arias colunas de informa¸c˜oes. Por exemplo:
$ ls -l
drwxrwxr-x 3 joao estudantes 1024 Jul 14 17:59 Documentos
-rwxr-x--- 1 joao estudantes 259 Aug 26 9:44 impresso
-rw-r--r-- 1 joao estudantes 13500 Aug 25 15:05 projeto.txt
$
Vamos analisar como cada linha ´e formada. O primeiro campo da listagem, “drwxrwxr-x” por exem-
plo, indica o tipo do arquivo e suas permiss˜oes de acesso. O segundo indica o n´umero de liga¸c˜oes diretas
(hard links) para esse arquivo (ver se¸c˜ao 3.7). O terceiro campo mostra o nome do dono e o quarto o
grupo ao qual o arquivo pertence. Depois, aparecem ainda o tamanho, a data e hora da ´ultima grava¸c˜ao,
e, por ´ultimo, o nome do arquivo (ou diret´orio).
Por enquanto, interessa-nos apenas o primeiro campo, composto de 10 caracteres. O primeiro destes
´e uma indica¸c˜ao de tipo: se for um “-” indica um arquivo; se for um “d”, um diret´orio; se for um “l”,
uma liga¸c˜ao (link). Os nove caracteres em seguida representam as permiss˜oes de acesso e s˜ao divididos
em trˆes grupos de trˆes caracteres consecutivos. O primeiro, segundo e terceiro grupos constituem, res-
pectivamente, as permiss˜oes de acesso do usu´ario dono do arquivo, dos usu´arios pertencentes ao mesmo
grupo ao qual o arquivo pertence, e de todos os outros usu´arios do sistema. O primeiro caractere de
cada grupo, indica a presen¸ca (r) ou ausˆencia (-) de permiss˜ao de leitura. O segundo caractere de cada
grupo, indica a presen¸ca (w) ou ausˆencia (-) de permiss˜ao de escrita (altera¸c˜ao). O terceiro caractere
de cada grupo (x), indica permiss˜ao de execu¸c˜ao para o arquivo – nesse caso, um arquivo de programa
– ou indica permiss˜ao de busca em se tratando de um diret´orio (permiss˜ao de realizar um comando cd
para esse diret´orio).
Na primeira linha do exemplo acima, temos: “drwxrwxr-x”. O “d” indica que Documentos ´e um
diret´orio. Em seguida (drwxrwxr-x), temos as permiss˜oes para o dono do arquivo, indicando que ele tem
permiss˜ao de leitura, escrita e busca nesse diret´orio. Para os usu´arios pertencentes ao mesmo grupo do
dono do arquivo, temos, nesse caso, as mesmas permiss˜oes do dono (drwxrwxr-x). Finalmente, temos
que para os demais usu´arios do sistema (drwxrwxr-x) s˜ao permitidas a leitura e execu¸c˜ao, mas n˜ao a
escrita (altera¸c˜ao). Isso significa que eles n˜ao podem criar nem remover arquivos e diret´orios dentro do
diret´orio Documentos.
A segunda linha indica que impresso ´e um arquivo (-) e pode ser lido, alterado e executado pelo seu
dono (-rwxr-x---). Os usu´arios do grupo estudantes podem lˆe-lo e execut´a-lo (-rwxr-x---). Aos demais
usu´arios n˜ao ´e permitido nenhum tipo de acesso (-rwxr-x---).
Na terceira linha da listagem, projeto.txt tamb´em ´e um arquivo, como indica o primeiro caractere da
linha (-). O dono do arquivo tem permiss˜ao de leitura e escrita (-rw-r--r--), os usu´arios do mesmo grupo
(-rw-r--r--), e os demais usu´arios (-rw-r--r--) tˆem apenas permiss˜ao de leitura.
´E importante notar que as permiss˜oes atribu´ıdas aos arquivos dependem das permiss˜oes atribu´ıdas
tamb´em ao diret´orio que os cont´em. Por exemplo, mesmo se um arquivo tem permiss˜oes do tipo “-
rwxrwxrwx”, outros usu´arios n˜ao podem acess´a-lo a menos que tenham permiss˜ao de busca (x) neste
diret´orio. Se um usu´ario quiser restrigir o acesso para todos os seus arquivos, ele pode simplesmente
configurar as permiss˜oes do seu diret´orio pessoal para “-rwx------”. Assim, nenhum outro usu´ario poder´a
acessar seu diret´orio e os arquivos que nele est˜ao contidos. Portanto, o usu´ario n˜ao precisar´a se preocupar
com as permiss˜oes individuais dos arquivos.
Em outras palavras, para acessar um arquivo, o usu´ario precisa ter permiss˜ao de busca em todos os
diret´orios que perten¸cam ao caminho absoluto do arquivo, al´em de permiss˜ao de leitura ou execu¸c˜ao no
arquivo em si.
Geralmente, as permiss˜oes inicialmente dadas aos arquivos s˜ao “-rw-r--r--” e aos diret´orios “-rwxr-xr-x”.
3.6.2 Alterando permiss˜oes
Somente o dono e o administrador do sistema podem alterar as permiss˜oes de arquivos e diret´orios. O
comando chmod (Change Mode) ´e usado para isto e sua sintaxe ´e:
chmod {a,u,g,o}{+,-,=}{r,w,x} <nome do arquivo ou diret´orio>
ou
chmod XYZ <nome do arquivo ou diret´orio>
onde X, Y, e Z s˜ao digitos menores que 8 ({0,1,2,3,4,5,6,7}).
Em sua primeira forma, o primeiro campo ap´os o nome do comando indica se devem ser alteradas
as permiss˜oes para todos os usu´arios (“a”, all), para o dono do arquivo (“u”, user), para os usu´arios do
grupo ao qual o arquivo pertence (“g”, group), ou para os demais usu´arios (“o” - others). O s´ımbolo
“+” indica acr´escimo de permiss˜ao, “-” remo¸c˜ao de permiss˜ao e “=” estabelece permiss˜oes apenas para
os tipos indicados. O ´ultimo parˆametro (r, w ou x) indica o tipo da permiss˜ao a ser alterada – leitura,
escrita ou grava¸c˜ao.
Vejamos alguns exemplos:
1. Atribuir permiss˜ao de leitura (r) ao arquivo carta para todos os usu´arios: chmod a+r carta
2. Quando “a”, “u”, “g” e “o” n˜ao s˜ao especificados, “a” ´e tomado como padr˜ao. O comando a seguir
tem o mesmo efeito do anterior: chmod +r carta
3. Retirar a permiss˜ao de execu¸c˜ao de todos os usu´arios exceto o dono: chmod go-x carta
4. Tornar a permiss˜ao de outros igual a “r-x”: chmod o=rx carta
5. Permitir ao dono do arquivo, leitura, escrita e execu¸c˜ao: chmod u+rwx carta
Note que o comando comando acima n˜ao altera as permiss˜oes de grupo e dos demais usu´arios.
3.6.3 Usando valores octais
Uma outra forma de alterar as permiss˜oes de arquivos e diret´orios ´e o chamado formato absoluto. Este
m´etodo ´e baseado em n´umeros octais (base 8) que fornecem um c´odigo de trˆes d´ıgitos para especificar
todas as permiss˜oes (dono, grupo e outros).
Seja o trio de permiss˜oes: “r-x”. Se representarmos a ausˆencia de uma permiss˜ao com um “0”
(zero) e a presen¸ca desta com um “1”, o mesmo trio pode ser representado da seguinte forma: “101”.
Analogamente, representamos “rwx” por “111” e “r--” por “100”. Analisando “101”, “111” e “100” como
n´umeros bin´arios (base 2), temos os valores octais 5, 7 e 4. A tabela abaixo mostra todas as possibilidades:
Permiss˜oes Bin´ario Octal
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
Suponhamos que vamos estabelecer as seguintes permiss˜oes para o arquivo cartas: “rwx” para o dono,
“rw-” para o grupo e “r--” para os outros usu´arios. Consultando a tabela acima, obtemos os valores 7, 6
e 4, respectivamente. Os comandos abaixo estabelecem essas permiss˜oes.
chmod u=rwx,g=rw,o=r cartas
chmod 764 cartas
Observe que no primeiro comando n˜ao pode haver espa¸cos em branco junto `as v´ırgulas. Podemos ver
que a segunda forma ´e mais pr´atica. Basta nos acostumarmos com o uso de n´umeros octais.
Caso as permiss˜oes fossem “r-x” (5), “--x” (1) e “---” (0), o comando seria:
chmod u=rx,g=x,o= cartas
chmod 510 cartas
Outra forma de calcular valores octais para alterarmos as permiss˜oes ´e atribuir valores para “r”, “w”
e “x” e em seguida somar tais valores. Como “r” ´e sempre o primeiro do trio e como “r--” pode ser visto
como o bin´ario 100, atribu´ımos o valor 4 para “r”. Analogamente, “w” ter´a o valor 2, “x” o valor 1 e
“-” o valor 0 (zero). Somando os valores das permiss˜oes do dono, grupo e outros obtemos os d´ıgitos que
devemos usar no comando. Assim, para os dois ´ultimos exemplos temos:
rwx = 4 + 2 + 1 = 7
rw- = 4 + 2 + 0 = 6
r-- = 4 + 0 + 0 = 4
O comando ´e: chmod 764 cartas
r-x = 4 + 0 + 1 = 5
--x = 0 + 0 + 1 = 1
--- = 0 + 0 + 0 = 0
O comando ´e: chmod 510 cartas
3.6.4 Estabelecendo as permiss˜oes padr˜ao
O comando umask ´e utilizado para configurar o padr˜ao de permiss˜oes que novos arquivos e diret´orios
possuir˜ao quando forem criados. Isto pode ser configurado no arquivo de inicializa¸c˜ao .bashrc (veja se¸c˜ao
4.4). O argumento deste comando ´e parecido com o do chmod (na forma octal). A diferen¸ca ´e que em vez
de especificar as permiss˜oes que devem ser atribu´ıdas, ele especif´ıca permiss˜oes que devem ser removidas.
A regra ´e a seguinte: determinar o acesso para usu´ario, grupo e outros, e subtrair de 7 cada um dos
trˆes d´ıgitos.
Por exemplo, digamos que, para os novos arquivos que ser˜ao criados, vocˆe queira atribuir a si prˆoprio
todas as permiss˜oes (7), ao grupo ler e executar (5) e aos outros nenhuma permiss˜ao (0). Subtraia cada
d´ıgito de 7 e o resultado ser´a: 0 para vocˆe, 2 para seu grupo e 7 para outros. Ent˜ao o comando que vocˆe
deve executar ou colocar em seu arquivo de inicializa¸c˜ao ´e:
umask 027
Observa¸c˜ao: Quando criamos novos arquivos, estes n˜ao recebem permiss˜ao de execu¸c˜ao, mesmo que
tal permiss˜ao tenha sido configurada com o umask.
3.7 Links
Nesta se¸c˜ao abordaremos uma caracter´ıstica muito importante do sistema de arquivos do Linux: as
liga¸c˜oes, ou links. Um link ´e um tipo especial de arquivo que faz referˆencia (liga¸c˜ao) a um outro arquivo,
ou diret´orio, do sistema de arquivos. Links podem ser utilizados como qualquer outro arquivo ou diret´orio.
Existem dois tipos de links: simb´olicos (symlinks) e diretos (hard links). Aqui abordaremos apenas os
simb´olicos.
Links simb´olicos s˜ao arquivos (diret´orios) cujo conte´udo ´e o nome de um outro arquivo (diret´orio).
Quando lemos ou gravamos dados em um link simb´olico, estamos na verdade lendo ou gravando dados
no arquivo referenciado pelo link. Liga¸c˜oes simb´olicas podem ser identificadas com o comando “ls -l”.
Vejamos um exemplo:
~/arquivos$ ls -l
total 0
lrwxrwxrwx 1 joao estudantes 19 Jan 9 19:46 brc -> /home/joao/.bashrc
~/arquivos$
Um link simb´olico ´e identificado pela letra “l” e a sua configura¸c˜ao de permiss˜oes de acesso n˜ao ´e
utilizada (aparecem sempre como “rwxrwxrwx”. S˜ao as permiss˜oes do arquivo referenciado pelo link que
na verdade realizam o controle de acesso. No exemplo, o nome do link ´e brc e est´a contido no diret´orio
/home/joao/arquivos. A seta (->) indica que ele faz referˆencia ao arquivo /home/joao/.bashrc. Assim,
se lermos ou gravarmos dados em brc estaremos lendo ou gravando em /home/joao/.bashrc.
As liga¸c˜oes simb´olicas funcionam da mesma forma para os diret´orios. Podemos executar, normalmente,
um comando cd para um link que referencia um diret´orio. Podemos tamb´em remover um link simb´olico
normalmente, utilizando o comando rm. Contudo, ao fazer isso, estaremos apagando somente o link, man
n˜ao arquivo (diret´orio) referenciado por ele.
Links simb´olicos possibilitam ao usu´ario atribuir diferentes nomes para um mesmo arquivo, sem
precisar manter v´arias c´opias de tal arquivo. Tamb´em possibilita que um mesmo arquivo seja acessado a
partir de diferentes locais da ´arvore de diret´orios.
Para criar um link simb´olico utilizamos o comando ln com a op¸c˜ao “-s”. A seguir temos a sintaxe
deste comando:
ln -s <nome do arquivo a ser referenciado> <nome do link>
Para exemplificar o seu uso, vamos criar, no mesmo diret´orio do exemplo anterior, um link chamado
prof que referencia o arquivo /home/joao/.profile.
~/arquivos$ ln -s /home/joao/.profile prof
~/arquivos$ ls -l
total 0
lrwxrwxrwx 1 joao estudantes 19 Jan 9 19:46 brc -> /home/joao/.bashrc
lrwxrwxrwx 1 joao estudantes 20 Jan 9 20:20 prof -> /home/paulo/.profile
~/arquivos$
Devemos tomar cuidado com o uso dos links pois podemos, por exemplo, criar uma liga¸c˜ao simb´olica
para um arquivo que n˜ao existe. Tamb´em pode ocorrer de apagarmos um arquivo e esquecermos de
apagar os links para esse arquivo, ficando com links ´orf˜aos.
Links s˜ao muito usados no Linux, especialmente os simb´olicos. Conforme vocˆe for adquirindo ex-
periˆencia com o Linux, encontrar´a situa¸c˜oes prop´ıcias para o uso deles. Vocˆe pode us´a-los para evitar
possuir v´arias c´opias de um mesmo arquivo, em diret´orios diferentes. Isso pode n˜ao parecer muita van-
tagem, mas imagine um arquivo de v´arios megabytes, ou mesmo todo um diret´orio. O espa¸co em disco
economizado seria consider´avel.
3.8 Exerc´ıcios
1. Visite os seguintes diret´orios, utilizando os comandos cd, pwd e ls.
(a) /home
(b) O pai do /home (use o “..”)
(c) /
(d) /bin
(e) /usr
(f) /proc
(g) /usr/bin
(h) Seu diret´orio pessoal
2. Liste o conte´udo de cada um dos diret´orios acima, de dois modos:
(a) Sem sair do seu diret´orio pessoal
(b) Movendo-se primeiramente para o diret´orio a ser listado
3. Crie em seu diret´orio pessoal um diret´orio com nome igual ao da m´aquina que vocˆe est´a usando.
Ex: patolino, catatau, etc. Mova-se para esse diret´orio.
4. Crie um diret´orio para cada um dos dias da semana.
5. No diret´orio destinado ao s´abado, crie trˆes subdiret´orios chamados manha, tarde e noite.
6. Crie um diret´orio chamado “.todo dia” (todo dia precedido por um ponto) no seu diret´orio pessoal.
7. Liste o conte´udo de todos os diret´orios criados nos exerc´ıcios anteriores.
8. Remova o diret´orio domingo criado no exerc´ıcio 4.
9. Crie um diret´orio com o seu nome. Em seguida, altere as permiss˜oes desse diret´orio de forma que
somente vocˆe (dono do diret´orio) tenha permiss˜ao de leitura, escrita e execu¸c˜ao. Os outros usu´arios
n˜ao devem ter nenhuma permiss˜ao (rwx------).
10. Copie para dentro do diret´orio criado no exerc´ıcio 9 os arquivos termcap, profile, motd, issue e
HOSTNAME que est˜ao no diret´orio /etc.
(a) Qual o tipo desses arquivos ?
(b) Quais s˜ao os comandos que se pode utilizar para mostrar o conte´udo desses arquivos?
(c) Veja o conte´udo destes arquivos, usando more, head e tail caso ele n˜ao caiba totalmente na
tela.
(d) Mova o arquivo hostname para o diret´orio “pai” do diret´orio atual (n˜ao utilize cp, nem rm).
(e) Altere o nome desses arquivos para, respectivamente, terminal, perfil, mensagem do dia, edicao
e nome da maquina.
11. Remova todos os arquivos e diret´orios criados nos exerc´ıcios anteriores.
Linux basico
Cap´ıtulo 4
Bash
Entre os conceitos b´asicos j´a abordados, encontra-se o de shell ou interpretador de comandos. O shell ´e
um programa que obt´em cada linha de comando do usu´ario, realiza algumas transforma¸c˜oes e a repassa
para o SO. Neste cap´ıtulo ser˜ao abordados os diversos recursos e caracter´ısticas do interpretador de
comandos Bourne Again Shell ou bash.
O bash foi criado pelo projeto GNU em 1988. Seguindo os pr´ıncipios da pr´opria organiza¸c˜ao, todas
as vers˜oes do bash desde a 0.99 tem sido distribu´ıdas pela Free Software Foundation (FSF). bash foi
incorporado `as principais vers˜oes do Unix e rapidamente se tornou popular sendo inclu´ıdo como shell
padr˜ao nos sistemas Linux.
4.1 Expans˜ao
A expans˜ao de textos realizada pelo shell consiste na substitui¸c˜ao autom´atica de caracteres em nome
de arquivos, diret´orios ou mesmo na inclus˜ao de toda a linha de comando. Suas principais vantagens
s˜ao: redu¸c˜ao da quantidade de digita¸c˜ao necess´aria; encorajamento de boas conven¸c˜oes de nomea¸c˜ao;
simplifica¸c˜ao na programa¸c˜ao do shell, etc.
4.1.1 Metacaracteres
Um recurso muito ´util que o shell oferece ao usu´ario ´e o uso dos caracteres especiais, ou metacaracteres,
“*” e “?” (aster´ısco e interroga¸c˜ao), para permitir a expans˜ao de nomes de arquivos e diret´orios.
O caracter “*” refere-se a um conjunto de caracteres qualquer contido no nome de um arquivo ou
diret´orio. Por exemplo, quando-se usa o caracter “*” em um nome de arquivo, o shell o substitui por
todas as combina¸c˜oes poss´ıveis de caracteres que constituem nomes de arquivos presentes no diret´orio
pesquisado.
Vamos supor que o joao tem os arquivos Mailbox, projeto e trabalho em seu diret´orio corrente. Pode-se
usar metacaracteres para listar somente os arquivos cujo nome termine com a letra “o”.
$ ls
Mailbox projeto trabalho
$ ls *o
projeto trabalho
$
Ou todos os arquivos cujos nomes come¸cam pela letra “o”:
$ ls o*
ls: o*: No such file or directory
$
O ´ultimo comando resultou em erro, pois em /home/joao n˜ao existe nenhum arquivo ou diret´orio
come¸cado pela letra “o”. Para listarmos todos os arquivos cujo nome contenha essa letra:
27
$ ls *o*
Mailbox projeto trabalho
$
Neste exemplo, todos os arquivos foram listados pois os nomes de todos eles continham a letra “o”. O
uso do “*” isolado simplesmente identifica todos os nomes dos arquivos e diret´orios presentes do diret´orio
corrente.
$ ls *
Mailbox projeto trabalho
O processo de substitui¸c˜ao do “*” ´e chamado de expans˜ao do metacaracter e ´e feito pelo shell. O
comando em si nunca recebe o “*” em sua lista de parˆametros. Ao inv´es disso, recebe todos os nome de
arquivos expandidos pelo shell. Portanto, o comando:
$ ls *o
´e expandido pelo shell e constitui na realidade:
$ ls projeto trabalho
Outro aspecto importante sobre o “*” ´e que este metacaracter n˜ao casa com nomes que come¸cam com
“.” (ponto). Estes arquivos s˜ao tratados como arquivos ocultos. Esta caracter´ıstica visa a uma maior
seguran¸ca pois caso contr´ario, o “*” poderia expandir os nomes dos diret´orios “.” e “..” e isso, al´em de
inconveniente, poderia ser perigoso quando usado com certos comandos.
O metacaracter “?” expande somente um caracter. Assim, o comando “ls ?” mostra todos os
arquivos cujo nome ´e formado por um ´unico caracter qualquer, e “ls cart?” mostrar´a carta mas n˜ao
cartas ou carta.txt. Eis mais um exemplo:
$ ls ?ar*
carta cartas parte1.txt
$
Como vocˆe pode ver, o uso de metacaracteres pode especificar muitos arquivos de uma s´o vez. Para
copiar ou mover v´arios arquivos ao mesmo tempo podemos usar:
/home/joao$ cp ~joao/projetos/* ~joao/trabalhos
Assim, todos os arquivos do primeiro diret´orio ser˜ao copiados para o segundo. Note que se estamos
copiando ou movendo v´arios arquivos ao mesmo tempo, o parˆametro de destino, o ´ultimo, precisa ser um
diret´orio.
4.1.2 Edi¸c˜ao
O bash, assim como outros tipos de shell, oferece recursos de edi¸c˜ao de comandos muito ´uteis.
As teclas ↑ e ↓
Como vocˆe j´a pode ter notado, toda vez que pressionamos a tecla “↑” o shell preenche a linha do
prompt com o comando digitado anteriormente. Se continuarmos pressionando esta tecla veremos todos1
os comandos que j´a digitamos. Assim, combinando as teclas “↑” e “↓” podemos escolher um destes
comandos e para execut´a-lo novamente basta teclarmos ENTER.
1Na verdade, todos os comandos contidos no history de comandos do usu´ario. O n´umero de comandos armazenados
depende do tamanho armazenado na vari´avel HISTSIZE (veja se¸c˜ao 4.3).
A tecla TAB
Outro recurso de expans˜ao apresentado pelo bash ´e obtido utilizando-se a tecla TAB – em muitos teclados
identificada por um s´ımbolo “⇀↽” ou semelhante.
Para ilustrar este recurso, se digitarmos na linha de comando “ca” e pressionarmos TAB, teremos o
seguinte resultado:
$ ca # pressione TAB duas vezes
cal captoinfo case cat
$ ca # digite complemento
Pressionando essa tecla, o shell informar´a quais os complementos poss´ıveis para a palavra que est´a
sendo digitada. Caso n˜ao exista nenhum complemento, o shell emitir´a um som (um beep) para informar
o usu´ario.
Na ´ultima linha do exemplo, o “ca” foi copiado automaticamente pelo shell, que aguarda que o usu´ario
digite o complemento. Se, ap´os isso, teclarmos a letra “p” seguida de TAB:
$ ca # pressione "p" e TAB
$ captoinfo # complemento autom´atico
Ap´os digitar o “p”, o comando captoinfo tornou-se o ´unico complemento poss´ıvel. Quando a tecla
TAB ´e pressionado e exite um ´unico complemento o shell insere-o automaticamente na linha de comando.
A palavra “ca” foi expandida tendo como complementos nomes de comandos. A raz˜ao disto ´e que
o shell assume que a primeira palavra de uma linha de comando necess´ariamente ´e um comando. Na
expans˜ao de comando, o shell consulta a vari´avel PATH2
. Assim os complementos n˜ao necessariamente
est˜ao no diret´orio corrente. Caso o diret´orio que cont´em o comando captoinfo n˜ao fosse o diret´orio
corrente e nem estivesse incluso na vari´avel PATH do usu´ario, o complemento captoinfo n˜ao apareceria
da lista de comandos fornecida pelo shell depois que TAB foi pressionada.
Al´em de comandos, a tecla TAB tamb´em pode ser usada para expandir nomes de arquivos e diret´orios.
Por exemplo, se digitarmos “cd /ho” e teclarmos TAB o shell complementar´a a linha formando:
$ cd /home/
Caso houvessem outras op¸c˜oes come¸cadas por “/ho”, ouvir´ıamos um beep e se pression´assemos TAB
novamente, uma lista de complementos poss´ıveis seria mostrada da mesma forma que na expans˜ao de
comandos. Por exemplo:
$ ls /ho*
home homes
$ cd /ho # pressione TAB
$ cd /home # "me" inserido pelo shell
# pressione TAB novamente
home homes
$ cd /home # reinserido pelo shell
Quando a tecla TAB ´e pressionada, o shell tenta complementar o m´aximo poss´ıvel a linha de co-
mando. Somente no momento em que o shell encontra mais de um complemento poss´ıvel ´e que a lista de
complementos ´e mostrada. Esperimente digitar “x” na linha de comando e teclar TAB duas vezes:
$ x # pressione TAB
There are 118 possibilities. Do you really
wish to see them all? (y or n)
Quando existem muitos complementos poss´ıveis, o shell imprime a mensagem acima perguntando ao
usu´ario se ele deseja ver todas as possibilidades. Para responder “Sim” pressionamos “y” (“Yes”) e para
“N˜ao”, “n” (“No”).
2Veja se¸c˜ao 4.3.
4.2 Aliases
Algumas vezes usamos comandos que necessitam de v´arias op¸c˜oes e argumentos. Para amenizar o trabalho
de digitarmos repetidamente estes comandos o bash oferece um recurso chamado alias com o qual podemos
definir sinˆonimos ou “apelidos” para um comando. Um alias pode ser definido na linha de comando da
seguinte forma:
alias <nome>=<comando>
Observe que n˜ao pode haver espa¸cos em branco antes ou depois do “=”.
Esta sintaxe indica que nome ´e um “alias” (apelido) para comando. Toda vez que digitarmos o
comando nome, o bash o substituir´a por comando. Exemplo:
$ alias lf=’ls -F’
Isso far´a o shell executar ls -F toda vez que usarmos lf na linha de comando. Ou seja, o que o alias
faz na verdade ´e substituir a palavra “lf” por “ls -F”. Observe neste exemplo, existe um espa¸co em
branco entre ls e -F. Sempre que houver espa¸cos em branco na defini¸c˜ao de um campo, todo o campo
deve ser digitado entre aspas simples (’) ou duplas (”).
Apesar de se poder definir um alias na linha de comando, geralmente isto ´e feito nos arquivos de
inicializa¸c˜ao .bash profile ou .bashrc. Para remover um alias usa-se o comando unalias cuja sintaxe ´e:
unalias <nome>. O exemplo abaixo remove o alias definido anteriormente:
$ unalias lf
A op¸c˜ao “-a” faz com que todos os aliases sejam removidos:
$ unalias -a
4.3 Vari´aveis de ambiente
Existem v´arias caracter´ısticas do ambiente do sistema que podemos configurar atrav´es das vari´aveis do
shell. Estas vari´aveis podem especificar desde o prompt de comando at´e o intervalo de tempo para a
checagem de novas mensagens de e-mail, por exemplo.
Como o alias, as vari´aveis do shell s˜ao nomes que possuem valores associados. Por conven¸c˜ao, as
vari´aveis pr´e-definidas pelo shell – e alguns outros programas – s˜ao escritas sempre com letras mai´usculas.
A sintaxe para definir uma vari´avel ´e similar `a de um alias:
<vari´avel>=<valor>
sem espa¸cos em branco antes ou depois do “=”.
Para referenciar o valor de uma vari´avel em um comando deve-se utilizar o s´ımbolo “$” antes do nome
da vari´avel. Pode-se “apagar” uma vari´avel com o comando:
unset <nome vari´avel>
A maneira mais f´acil de checar o valor de uma vari´avel ´e usar o comando echo:
echo $<vari´avel>
No exemplo abaixo primeiro definimos a vari´avel EDITOR e, em seguida, verificamos o seu valor:
$ EDITOR=emacs
$ echo $EDITOR
emacs
As vari´aveis de ambiente s˜ao aquelas conhecidas pelos demais processos (programas em execu¸c˜ao).
Exemplos destas vari´aveis s˜ao: HOME, PATH, MAIL, EDITOR, etc.
Para entender o seu uso, vejamos um exemplo: editores de texto como vi ou emacs– os quais veremos
adiante – possuem diferentes interfaces para os modos texto e gr´afico e necessitam saber qual o tipo
de terminal o usu´ario est´a usando; a vari´avel de ambiente TERM ´e o modo pelo qual isto pode ser
determinado. Outro exemplo s˜ao os programas de e-mail que permitem ao usu´ario editar mensagens
com o editor de textos de sua proferˆencia. Como estes programas sabem qual editor usar? ´E atrav´es da
vari´avel EDITOR ou VISUAL.
Qualquer vari´avel pode se tornar uma vari´avel de ambiente. Para isto, ela deve ser “exportada” com
o comando export:
export <vari´avel>
export tamb´em aceita uma lista de vari´aveis como argumento:
export <vari´avel1> <vari´avel2> <...>
Tamb´em podemos exportar e atribuir valores a uma vari´avel numa ´unica linha de comando:
export <vari´avel>=<valor>
Podemos verificar quais s˜ao as vari´aveis de ambiente j´a definidas e seus respectivos valores usando o
comando abaixo:
export -p
Para visualizar todas as vari´aveis basta usar set ou env. Uma importante vari´avel de ambiente ´e
PATH que ajuda o shell a encontrar os comandos que o usu´ario executa. Todo comando executado
´e, na realidade, um arquivo. Estes arquivos s˜ao chamados execut´aveis e est˜ao armazenados em v´arios
diret´orios como /bin ou /usr/bin. O valor da vari´avel PATH ´e uma lista de diret´orios em que o shell
procura toda vez que executamos um comando cujo arquivo n˜ao ´e encontrado no diret´orio corrente.
Assim, n˜ao precisamos alterar o diret´orio de trabalho todas vez que necessitamos executar um comando
que se encontra em outro diret´orio. Basta acrescentar o diret´orio que cont´em tal comando `a vari´avel
PATH. Os nomes dos diret´orios na vari´avel s˜ao separados pelo caractere “:”.
$echo $PATH
/bin:/usr/bin:/usr/local/bin
Neste caso, podemos executar qualquer comando contido nestes diret´orios sem alterar nosso diret´orio
de trabalho. ´E tamb´em por isso que ao executarmos comandoscomo por exemplo o cat e more n˜ao
precisamos digitar “/bin/cat” e “/bin/more”.
Caso o usu´ario joao queira adicionar um outro diret´orio, digamos /home/joao/bin `a vari´avel PATH,
deve proceder como mostrado a seguir:
$ export PATH=$PATH:/home/joao/bin # adiciona o diret´orio
$ echo $PATH # verifica
/bin:/usr/bin:/usr/local/bin:/home/joao/bin
O primeiro comando faz com que a vari´avel receba o seu valor atual, concatenado com o nome do
diret´orio a ser acrescentado. Observe que existe um “:” antes do nome do diret´orio. O segundo comando
´e utilizado apenas para visualizarmos o resultado do primeiro.
4.3.1 Vari´aveis de Prompt
O shell permite inserir informa¸c˜oes ´uteis no prompt da linha de comando como a data atual e o diret´orio
corrente. Para isso, s˜ao utilizados quatro descritores de prompt, armazenados nas vari´aveis PS1, PS2,
PS3 e PS4.
A vari´avel PS1 ´e chamada string de prompt prim´aria e ´e o prompt usual do shell. At´e agora usamos
um cifr˜ao ($), mas podemos configur´a-la de v´arias outras formas. Por exemplo, podemos fazer o prompt
ficar igual a “digite um comando: ”:
$ PS1="digite um comando: "
digite um comando: pwd
/home/joao
digite um comando: cd ..
digite um comando: pwd
/home
Algumas op¸c˜oes, constitu´ıdas por uma barra invertida () e um caracter, pode ser utilizadas para
acrescentar informa¸c˜oes ao prompt. Muitos usu´arios definem a vari´avel PS1 de forma que o diret´orio
corrente seja exibido no prompt. Para isso, utilizam a op¸c˜ao “w”.
$ pwd # mostra diret´orio corrente
/home/joao
$ PS1="w$ " # altera prompt
~$ cd artigos
~/artigos$ pwd
/home/joao/artigos
~/artigos$
A seguir temos exemplos de algumas op¸c˜oes que podem ser utilizadas no valor de PS1:
Data atual no formato “dia da semana, mˆes, dia do mˆes”:
$ PS1="d$ "
Sun Jan 9$
Nome do usu´ario (login):
$ PS1="u$ "
joao$
Nome na m´aquina (hostname):
$ PS1="h$ "
cerebro$
Nome do shell:
$ PS1="s$ "
bash$
Hora atual no formato “HH:MM:SS” (hora:minuto:segundo):
$ PS1="t$ "
17:49:29$
Diret´orio corrente:
$ PS1="W$ "
artigos$
Diret´orio corrente (caminho completo):
$ PS1="w$ "
~/artigos$
Pode-se tamb´em combinar v´arias op¸c˜oes como, por exemplo, nome do usu´ario, nome da m´aquina e
diret´orio de trabalho:
$ PS1="u h w$ "
joao cerebro ~/artigos$
A vari´avel PS2 ´e chamada de string de prompt secund´aria e seu valor default ´e “>”. ´E usada
como uma indica¸c˜ao para terminar um comando quando digitamos uma linha incompleta e pressionamos
ENTER. Por exemplo, suponha que come¸camos a digitar uma seq¨uˆencia de caracteres entre aspas e
antes de terminar (fechar as aspas) pressionamos ENTER. Ent˜ao shell exibe um “>” e aguarda at´e que
finalizemos a string:
$ echo "Esta ´e uma frase muito longa que # pressione ENTER
> termina aqui."
Esta ´e uma string muito longa que
termina aqui.
$
Ou seja, a vari´avel PS2 ´e utilizada pelo shell para avisar-nos de que ainda n˜ao acabamos de digitar o
comando da linha anterior.
As vari´aveis PS3 e PS4 est˜ao relacionadas a programa¸c˜ao shell e n˜ao ser˜ao abordadas.
4.3.2 Outras vari´aveis
A seguir temos uma descri¸c˜ao das principais vari´aveis do bash:
HISTCMD n´umero do comando atual no history.
HISTCONTROL valores poss´ıveis s˜ao:
ignorespace : linhas iniciadas com espa¸co n˜ao s˜ao adicionadas no history.
ignoredups : linhas que coincidem com a ´ultima linha do history n˜ao s˜ao adicionadas.
ignoreboth : habilita as op¸c˜oes anteriores.
HISTIGNORE lista de padr˜oes, separados por “:”, que indicam quais comandos n˜ao devem ser adici-
onados no history.
HISTFILE nome do arquivo de history. O default ´e .bash history
HISTFILESIZE n´umero m´aximo de linhas do arquivo de history.
HISTSIZE n´umero m´aximo de comandos armazenados. O valor padr˜ao ´e 500.
MAIL nome do arquivo para checagem de mensagens de e-mail.
MAILCHECK freq¨uˆencia, em segundos, para checagem de novas mensagens de e-mail.
MAILPATH lista de arquivos, separados por “:”, para checagem de mensagens de e-mail.
HOME nome do diret´orio home.
SECONDS tempo, em segundos, desde que o shell foi inicializado.
BASH caminho do shell atual.
BASH VERSION vers˜ao do shell em uso.
PWD diret´orio corrente.
OLDPWD diret´orio anterior ao ´ultimo comando cd.
COLUMNS n´umero de colunas do display.
LINES n´umero de linhas do display.
EDITOR caminho do editor de textos default.
SHELL caminho do shell atual.
TERM tipo de terminal corrente.
4.4 Arquivos .bash profile, .bash logout e .bashrc
Estes trˆes arquivos tem um significado especial para o bash e oferecem uma forma de configurar recursos
do ambiente automaticamente quando logamos no sistema, quando executamos outro shell bash ou quando
deslogamos. Os arquivos devem estar no diret´orio pessoal do usu´ario pois caso contr´ario, o sistema usar´a
o arquivo profile localizado no diret´orio /etc.
Podemos criar nossos pr´oprios arquivos de configura¸c˜ao para o bash usando um editor de texto. O
arquivo .bash profile cont´em comandos que s˜ao executados pelo bash toda vez que logamos no sistema.
Se examinarmos este arquivo teremos algo como:
PATH=/bin:/usr/bin:/usr/local/bin:${HOME}/bin
MAIL=${HOME}/Mailbox
PRINTER=bart
EDITOR=/usr/bin/vi
PS1=’h: w$ ’
PS2=’> ’
alias ll=’ls -l’
Estas linhas estabelecem configura¸c˜oes para v´arios componentes do sistema que s˜ao utilizados pelo
usu´ario. Esse conjunto de componetes ´e denominado ambiente de sistema.
O arquivo .bash profile pode ter o seu conte´udo modificado conforme as necessidades (preferˆencias)
de cada usu´ario. As altera¸c˜oes n˜ao ocorrem at´e que o arquivo seja lido novamente pelo shell. Para isto,
devemos deslogar e logar novamente ou executar o seguinte comando:
$ source .bash_profile
O comando source executa comandos descritos em um determinado arquivo – neste caso, .bash profile.
O bash permite dois sinˆonimos para o .bash profile: .bash login e .profile. Se o arquivo .bash profile n˜ao
existir em seu diret´orio home, ent˜ao o bash ir´a procurar por .bash login. Se este arquivo tamb´em n˜ao
existir a busca ser´a feita por .profile.
.bash profile ´e executado apenas pelo shell de login. Se executarmos outro shell, o bash executar´a
apenas os comandos existentes no arquivo .bashrc. Este esquema permite que usu´arios tenham a flexibi-
lidade de separar comandos de inicializa¸c˜ao – necess´arios no login – daqueles comandos necess´arios para
configurar uma outra instˆancia do shell.
O arquivo .bash logout ´e lido e executado toda vez que sa´ımos de um shell. Se quisermos executar
alguns comandos que removem arquivos tempor´arios ou registra quanto tempo ficamos logados ent˜ao basta
adicionar os comandos neste arquivo. Podemos colocar neste arquivo o comando clear, que limpar´a a
tela toda vez que deslogarmos.
4.5 Redirecionando entradas e sa´ıdas
A entrada de um programa consiste nos dados que lhe s˜ao passados inicialmente, os quais s˜ao necess´arios
para a execu¸c˜ao do programa. A entrada de um programa pode vir do teclado ou de um arquivo, por
exemplo. Argumentos passados `a comandos constituem a sua entrada.
A sa´ıda ´e constitu´ıda pelas informa¸c˜oes geradas pelo programa, ou seja, o resultado de sua execu¸c˜ao.
A sa´ıda pode ser mostrada na tela ou gravada em um arquivo de registro.
Muitos comandos do Linux tˆem sua entrada configurada para a entrada padr˜ao e sua sa´ıda para a
sa´ıda padr˜ao. A entrada padr˜ao ´e o teclado e a sa´ıda padr˜ao ´e o monitor. Vejamos um exemplo usando o
comando cat, que lˆe dados de todos os arquivos passados como parˆametros e os envia diretamente para a
sa´ıda padr˜ao. Usando o comando abaixo, veremos o conte´udo do arquivo projeto seguido pelo conte´udo
de tese.
/home/joao$ cat projeto tese
Entretanto, se nenhum nome de arquivo for dado como parˆametro, o comando cat lˆe dados da en-
trada padr˜ao e os envia para a sa´ıda padr˜ao. Para interromper, deve-se pressionar as teclas ctrl e d
simultaneamente (ctrl+d).
/home/joao/artigos$ cat
Ola! Tem alguem ai? # usu´ario
Ola! Tem alguem ai? # eco do sistema
Ate mais! # usu´ario
Ate mais! # eco do sistema
# usu´ario pressiona ctrl+d
home/joao/artigos$
Como podemos ver, cada linha que o usu´ario digita ´e imediatamente ecoada pelo comando cat. Aqui
um outro exemplo: o comando sort lˆe dados da entrada padr˜ao – a menos que algum arquivo seja dado
como parˆametro – e ordena os dados, enviando-os para a sa´ıda padr˜ao:
/home/joao/artigos$ sort
bananas # usu´ario
peras # usu´ario
goiabas # usu´ario
# ctrl+d
bananas # eco do sistema
goiabas # eco do sistema
peras # eco do sistema
/home/joao/artigos$
Digamos que queremos enviar a sa´ıda do comando sort para um arquivo, gravando os dados digitados
anteriormente. O shell nos permite redirecionar a sa´ıda para um arquivo usando o s´ımbolo “>”.
/home/joao/artigos$ sort > lista
bananas # usu´ario
peras # usu´ario
goiabas # usu´ario
# ctrl+d
/home/joao/artigos$
Como se pode ver, o resultado do comando sort n˜ao ´e mostrado imediatamente ap´os o se digitar
ctrl+d. Ao inv´es disso, ´e salvo em um arquivo chamado lista. Vejamos o conte´udo desse arquivo:
/home/joao/artigos$ cat lista
bananas
goiabas
peras
/home/joao/artigos$
Com o redirecionamento de sa´ıda, temos uma maneira simples de criar arquivos de texto. Para isso,
utilizamos o comando cat para ler a entrada padr˜ao (teclado) e redirecionamos sua sa´ıda para um arquivo.
/home/joao/artigos$ cat > itens
bananas # usu´ario
peras # usu´ario
goiabas # usu´ario
laranjas # usu´ario
# ctrl+d
/home/joao/artigos$
Assim, criamos um arquivo contendo a lista de frutas acima.
Vamos supor que salvamos a lista de compras original, desordenada, no arquivo itens . Uma maneira
de ordenar as informa¸c˜oes e salv´a-las em outro arquivo seria passar a sort o nome do arquivo a ser lido
como a entrada e redirecionar sa´ıda do comando para outro arquivo. Assim:
/home/joao/artigos$ sort itens > lista
/home/joao/artigos$ cat lista
bananas
goiabas
peras
/home/joao/artigos$
Como vemos, se passarmos como argumento um nome de arquivo ao comando sort (“sort <arquivo>”),
as linhas desse arquivo ser˜ao ordenadas e mostradas na sa´ıda padr˜ao. Entretando h´a uma outra maneira
de fazer isso:
/home/joao/artigos$ sort < itens
bananas
goiabas
peras
/home/joao/artigos$
Tecnicamente, “sort < itens ” ´e equivalente a “sort itens ”, mas isso nos permite demonstrar
que o primeiro se comporta como se os dados do arquivo itens estivessem vindo da entrada padr˜ao. Na
realidade, o comando sort n˜ao recebe o nome do arquivo, continuando assim a ler da entrada padr˜ao
como se estivesse lendo dados digitados atrav´es do teclado. O shell se encarrega do redirecionamento da
entrada (<) sem que o comando perceba.
Isto introduz o conceito de filtro. Um filtro ´e um programa que lˆe dados da entrada padr˜ao e os
processa de algum modo, enviando em seguida os dados processados `a sa´ıda padr˜ao.
4.5.1 Redirecionamentos destrutivo e n˜ao-destrutivo
Ao usar “>” para redirecionar a sa´ıda para um arquivo estamos realizando um redirecionamento destrutivo,
ou seja, o comando “ls > lista” sobrescreve o conte´udo do arquivo lista. Isto ´e equivalente a dizer que
todo o conte´udo anterior de lista ´e apagado.
Se ao inv´es disso, redirecionarmos usando “>>”, a sa´ıda ser´a concatenada ao final do arquivo e o
conte´udo (se houver) de lista ser´a preservado. Para melhor entender isso, esperimente executar a seguinte
seq¨uˆencia de comandos:
ls >> listagem
ls >> listagem
more listagem
O redirecionamento neste exemplo, diferentemente do exemplo anterior, ´e denominado redireciona-
mento n˜ao-destrutivo.
4.5.2 Usando Pipes
Nos exemplos para o filtro sort, os dados de entrada eram digitados pelo usu´ario ou estavam gravados em
um arquivo. O que aconteceria se quis´essemos ordenar dados vindos do sa´ıda de outro comando ? Para
listar os arquivos do diret´orio corrente em ordem alfab´etica invertida devemos fazer com que a sa´ıda do
comando ls seja ordenada pelo comando sort. Usando a op¸c˜ao “-r”, este comando ordena os dados na
ordem inversa.
/home/joao/artigos$ ls
historia notas tese testes
/home/joao/artigos$ ls > lista
/home/joao/artigos$ sort -r lista
testes
tese
notas
lista # observe esse nome de arquivo
historia
/home/joao/artigos$
Aqui, salvamos a sa´ıda do comando ls em um arquivo (lista) e usamos sort com a op¸c˜ao “-r”. Por´em,
isso faz com que tenhamos um arquivo tempor´ario para armazenar os dados. Assim, toda vez que fizermos
isso, teremos que, em seguida, remover o arquivo lista. A solu¸c˜ao ´e usar o que chamamos de pipeline,
outro recurso do shell que nos permite conectar v´arios comandos usando um pipe3
, onde a sa´ıda do
primeiro comando ´e enviada diretamente `a entrada do segundo e assim por diante no caso de haver mais
de dois comandos conectados por pipes.
No nosso caso, queremos enviar a sa´ıda do comando ls para a entrada do comando sort. O s´ımbolo
“|”4
´e usado para criar um pipe:
/home/joao/artigos$ ls | sort -r
testes
tese
notas
historia
/home/joao/artigos$
Note que neste exemplo, nenhum nome de arquivo ´e usado na linha de comando, diferentemente do
exemplo anterior que fazia o uso do arquivo intermedi´ario lista. Outra diferen¸ca ´e que o nome desse
arquivo intermedi´ario aparece no resultado do pen´ultimo exemplo, mas n˜ao neste ´ultimo. O comando
´e mais curto, mais f´acil de digitar e o resultado ´e mais adequado pois n˜ao inclui nomes de arquivos
intermedi´arios.
Vejamos outro exemplo bastante ´util. Experimente o comando abaixo:
ls /usr/bin
Desta vez, teremos a listagem de todos os arquivos do diret´orio /usr/bin e muitos deles passar˜ao pela
tela do monitor r´apido demais para que possam ser lidos. Ao inv´es disso, podemos usar o comando more
para acrescentar pausas na listagem dos arquivos. Esperimente agora o comando abaixo:
ls /usr/bin | more
´E importante observar que o redirecionamento e o uso de pipes s˜ao caracter´ısticas do shell e n˜ao dos
comandos em si. ´E o shell quem provˆe a sintaxe dos s´ımbolos “>”, “<” e “|”.
4.6 Exerc´ıcios
1. Exiba todos os arquivos presentes no diret´orio /etc que contenham a extens˜ao conf
2. De dois exemplos de nomes de arquivos que poderiam ser exibidos atrav´es do comando ls ?a ∗ .so
3. Crie um alias com o nome de la o qual quando executado exibe todo os arquivos ocultos do diret´orio
corrente.
4. Crie uma vari´avel NOME a qual deve possuir o nome do usu´ario como valor.
5. Redirecione a sa´ıda do comando ls para um arquivo qualquer.
6. Ordene o arquivo do exerc´ıcio anterior e direcione a sa´ıda para outro arquivo.
7. Em apenas uma linha de comando ordene a sa´ıda do comando ls e redirecione para um arquivo.
8. Em apenas uma linha de comando ordene a sa´ıda do comando ls -la e acrescente essa sa´ıda no
mesmo arquivo do exerc´ıcio anterior.
3Algumas tradu¸c˜oes poss´ıveis para a palavra “pipe” s˜ao os substantivos “cano” e “tubo” ou o verbo “transportar”.
4O s´ımbolo de pipe, na maioria dos teclados, encontra-se na mesma tecla que a barra invertida e ´e gerado pressionado-se
essa tecla simultaneamente com SHIFT.
Linux basico
Cap´ıtulo 5
Comandos avan¸cados
Neste cap´ıtulo vamos apresentar alguns comandos um pouco mais avan¸cados do Linux. ´E importante
frisar que, para cada comando, n˜ao est˜ao descritas todas as op¸c˜oes poss´ıveis, ou seja, n˜ao ´e coberta toda
a potencialidade de cada comando. Para obter mais detalhes sobre cada um deles, basta consultar o
manual on-line do Linux (man), cuja sintaxe ´e a seguinte:
man <comando>
Observe que mesmo o man possui v´arias op¸c˜oes tamb´em! Para maiores detalhes sobre o pr´oprio man,
basta executar o comando:
man man
5.1 Filtros
5.1.1 diff
O comando diff compara dois arquivos byte a byte, apresentando uma lista de diferen¸cas para cada byte.
Sintaxe: diff <arq1> <arq2> [op¸c~oes]
Op¸c˜ao Descri¸c˜ao
-a Trata os arquivos como se fossem arquivos textos, comparando linha por linha ao
inv´es de byte a byte.
-B Ignora mudan¸cas que sejam apenas inclus˜ao de espa¸co em branco.
Exemplo:
~/arquivos$ diff lista1 lista2
357c357
< %
---
> $
Acima temos uma indica¸c˜ao de que o byte 357 do arquivo lista1 (que ´e um %) ´e diferente do byte 357
do arquivo lista2 (que ´e um $)
5.1.2 grep
O comando grep ´e utilizado para filtrar um determinado texto de entrada, enviando para a sa´ıda apenas
as linhas que contenham a seq¨uˆencia de caracteres (string) passada como parˆametro. Ou seja, o seu
comportamento ´e exibir cada linha que possui a string por completo. Normalmente grep ´e usado atrav´es
de um pipe para procurar linhas dentro da sa´ıda de outro programa.
Sintaxe: grep [op¸c~oes] <string> <arquivo>
39
Op¸c˜ao Descri¸c˜ao
-n Onde n ´e um n´umero, faz com que sejam exibidas as n linhas anteriores e as n linhas
posteriores `as linhas onde houver ocorrˆencia da string.
-An Exibe as n linhas posteriores `as linhas onde houver ocorrˆencia da string.
-Bn Exibe as n linhas anteriores `as linhas onde houver ocorrˆencia da string.
-v Inverte a procura, ou seja, mostra as linhas onde n˜ao ocorre a string.
-e Especifica uma string a ser procurada. ´E poss´ıvel especificar mais de uma string que
´e v´alida para procura, sendo que o comportamento ´e apresentar as linhas em que
ocorre pelo menos uma das strings.
Exemplo:
~/arquivos$ cat lista_alunos
Ana Maria matricula: 9221 ingresso: 1o semestre 1996
Ana Paula matricula: 9231 ingresso: 1o semestre 1997
Joao matricula: 9232 ingresso: 2o semestre 1996
~/arquivos$ cat lista_alunos | grep Ana
Ana Maria matricula: 9221 ingresso: 1o semestre 1996
Ana Paula matricula: 9231 ingresso: 1o semestre 1997
~/arquivos$ cat lista_alunos | grep -v Ana
Joao matricula: 9232 ingresso: 2o semestre 1996
~/arquivos$ grep 1996 lista_alunos
Ana Maria matricula: 9221 ingresso: 1o semestre 1996
Joao matricula: 9232 ingresso: 2o semestre 1996
5.2 Manipula¸c˜ao da fila de impress˜ao
5.2.1 lpr
O comando lpr ´e usado para imprimir arquivos.
Sintaxe: lpr [op¸c~oes] <nomearq>
Op¸c˜ao Descri¸c˜ao
-Pimpr Faz com que seja usada a impressora de nome impr ao inv´es da impressora padr˜ao.
-d Estabelece que o arquivo ´e do tipo DVI (sa´ıda do TEX ou LATEX).
-r Remove o arquivo ap´os o t´ermino da impress˜ao.
-#n Imprime n c´opias.
O comando lpr tamb´em pode ser usado para imprimir dados provenientes da sa´ıda de outro comando.
Para tanto, basta usar um pipe.
Exemplos:
~/arquivos$ lpr resumo.txt # imprime texto do arquivo resumo.txt
~/arquivos$ lpr resumo.txt -Pquati # imprime na impressora de nome "quati"
~/arquivos$ ls | lpr -#3 # imprime 3 c´opias da sa´ıda de ls
5.2.2 lpq
O comando lpq informa quais arquivos (trabalhos) est˜ao na fila de impress˜ao.
Sintaxe: lpq [op¸c~oes]
Op¸c˜ao Descri¸c˜ao
-Pimpr Especifica de qual impressora ser´a mostrada a fila de impress˜ao.
-l Imprime informa¸c˜oes extras de cada arquivo da fila.
Exemplo:
~/arquivos$ lpq
lp is ready and printing
Rank Owner Job Files Total Size
active joao 797 listagem 51 bytes
1st joao 798 texto.txt 23 bytes
Neste exemplo, existem dois trabalhos (jobs) na fila de impress˜ao, ambos pertencentes ao usu´ario joao.
A coluna Rank informa a posi¸c˜ao de cada job na fila de impress˜ao; Owner indica o usu´ario dono; Job
indica o n´umero de identifica¸c˜ao; Files indica os nomes dos arquivos em cada trabalho; Total Size informa
o tamanho em bytes de cada job. No caso acima, o arquivo listagem est´a sendo impresso, enquanto que
texto.txt aguarda na fila de impress˜ao.
5.2.3 lprm
O comando lprm ´e utilizado para remover um determinado trabalho (job) da fila de impress˜ao. Para
remover um trabalho ´e necess´ario ter permiss˜ao para isso. Normalmente, apenas o dono (owner) de um
job pode removˆe-lo.
Sintaxe: lprm [-Pimpressora] [<n´umero do job>] [<usu´ario dono>]
Exemplos:
Para remover o job de n´umero 798, que no exemplo anterior aguarda na fila de impress˜ao, usamos o
comando:
~/arquivos$ lprm 798
Para remover todos os jobs do usu´ario joao que ainda est˜ao na fila da impressora de nome “quati”:
~/arquivos$ lprm -Pquati joao
5.3 Gerˆencia de processos
Um processo nada mais ´e que um programa (comando) em execu¸c˜ao. Como no Linux podemos ter v´arios
programas executando ao mesmo tempo, abordaremos nesta se¸c˜ao formas de se gerenciar esta variedade
de processos.
5.3.1 ps
O comando ps fornece informa¸c˜oes sobre os processos que est˜ao sendo executados na m´aquina.
Sintaxe: ps [op¸c~oes]
Op¸c˜ao Descri¸c˜ao
a Mostra informa¸c˜oes sobre todos os processos de todos os usu´arios. Normalmente, ps
imprime apenas os processos iniciados na se¸c˜ao atual.
u Mostra o nome de usu´ario (login) dos donos de cada processo.
w Mostra informa¸c˜oes completas, sem o limite de 80 colunas por linha.
Exemplos:
~/arquivos$ ps
PID TTY STAT TIME COMMAND
1199 p0 S 0:15 bash
1752 p0 S 0:12 emacs
1948 p0 R 0:00 ps
Por hora, consideraremos apenas as colunas PID, TIME e COMMAND. A primeira informa o n´umero
de identifica¸c˜ao do processo, a segunda informa h´a quanto tempo o processo foi iniciado e a terceira o
nome do comando em execu¸c˜ao. Neste caso, o usu´ario est´a executando os comandos bash h´a 15 minutos,
emacs h´a 12 minutos e acaba de executar o ps.
Com a op¸c˜ao u obtemos outras informa¸c˜oes como o nome do dono de cada processo, o porcentagem
de CPU e mem´oria utilizada pelo processo e tamanho da mem´oria utilizada por este (SIZE).
~/arquivos$ ps u
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
joao 16132 0.0 4.2 1876 1296 p0 S 13:47 0:00 bash
joao 16207 0.6 13.7 5424 4152 p0 S 14:20 0:11 emacs
joao 16299 0.0 1.8 920 568 p0 R 14:48 0:00 ps u
Para ver tamb´em os processos de outros usu´arios:
~/arquivos$ ps au
USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND
joao 16132 0.0 4.2 1876 1296 p0 S 13:47 0:00 bash
joao 16207 0.6 13.7 5424 4152 p0 S 14:20 0:11 emacs
joao 16999 0.0 1.8 920 568 p0 R 14:48 0:00 ps u
paulo 16712 0.0 2.1 1964 1388 p0 S 05:03 0:00 -bash
paulo 16772 0.0 2.0 2420 1304 p0 S 05:37 0:00 xclock
root 16500 0.0 4.2 1876 1296 p0 S 3:15 0:00 bash
5.3.2 kill
O comando kill ´e utilizado para mandar um sinal a um determinado processo, normalmente terminando-o.
Sintaxe: kill [-<n´umero do sinal>] <PID>
Como vimos anteriormente, o PID ´e o n´umero de identifica¸c˜ao do processo e pode ser obtido com o
comando ps.
Alguns dos sinais existentes s˜ao:
N´umero Nome Descri¸c˜ao
2 INT interrompe o programa
3 QUIT faz o programa terminar
9 KILL mata o programa (n˜ao pode ser ignorado)
Normalmente o comando kill manda um sinal para que o pr´oprio programa termine sua execu¸c˜ao por
s´ı pr´oprio. Assim, ele pode, se necess´ario, salvar seus dados em disco por exemplo, antes de terminar. J´a
o sinal 9 faz com que o processo seja terminado (morto) instantaneamente e incodicionalmente.
Vejamos um exemplo:
~/arquivo$ ps
PID TTY STAT TIME COMMAND
1199 p0 S 0:01 bash
1752 p0 S 0:12 emacs
1760 p0 R 0:00 ps
~/arquivos$ kill 1752
O ´ultimo comando do exemplo acima faz com que a o processo de PID igual a 1752 (emacs) termine
a sua execu¸c˜ao. Caso o processo ignore o sinal enviado pelo comando kill (caso o processo “trave” e pare
de responder) podemos termin´a-lo enviando o sinal de n´umero 9 (KILL):
~/arquivos$ kill -9 1752
Para verificar se o processo realmente morreu, basta utilizar o comando ps mais uma vez. Observe que
podemos matar apenas os processos para os quais temos permiss˜ao de fazer isso. Normalmente, apenas
o dono de cada processo tem permiss˜ao para mat´a-lo.
5.3.3 Foreground e Background
Enquanto a shell aguarda o t´ermino da execu¸c˜ao de um comando antes de exibir o prompt para o
pr´oximo comando, dizemos que este comando est´a sendo executado em foreground. Por outro lado,
quando o prompt ´e liberado para o usu´ario antes do t´ermino da execu¸c˜ao de um comando, dizemos que
este comando est´a sendo executado em background.
Um processo em background tem as mesmas caracter´ısticas de um processo em foreground com uma
˙unica exce¸c˜ao: somente os processos em foreground podem receber dados do terminal.
Para executarmos comandos em background basta um & no final da linha de comandos. Mas se vocˆe
j´a executou o comando e quer deix´a-lo em background , vocˆe precisa digitar Ctrl Z, com isso o processo
´e suspenso e ao executar bg o processo vai para background. Executando fg o processo volta a foreground.
Exemplo: No exemplo abaixo o programa netscape seria executado em foreground se a sequˆencia de
comandos acima n˜ao fosse aplicada.
$ netscape
^Z[1] + Stopped netscape
$ bg
[1] + netscape &
5.4 Compacta¸c˜ao
Muitas vezes, faz-se necess´ario que armazenemos c´opias de seguran¸ca (backups) para v´arios arquivos,
disperdi¸cando bastante espa¸co em disco. Em outros casos, precisamos transportar grandes quantidades
de dados de uma m´aquina a outra. Tais dados podem n˜ao caber em um ´unico disquete, ou, ainda, a
sua conex˜ao `a rede pode n˜ao ser r´apida o suficiente, resultando num tempo de transferˆencia de dados
muito grande. Em qualquer uma dessas situa¸c˜oes, certamente, vocˆe achar´a muito proveitoso o uso dos
comandos de compacta¸c˜ao de dados abordados nesta se¸c˜ao.
5.4.1 gzip
O gzip ´e um aplicativo que utiliza o mesmo m´etodo de compacta¸c˜ao utilizado pelo programa pkzip, do
MS-DOS. No geral, o comportamento do gzip ´e remover o(s) arquivo(s) de entrada e escrever um arquivo
de sa´ıda compactado com o mesmo nome, mas com a extens˜ao .gz adicionada ao final deste.
Sintaxe: gzip [op¸c~oes] <nome do arquivo>
Se nenhum arquivo ´e especificado ou se o nome do arquivo ´e um “-”, a entrada padr˜ao ´e compactada
e enviada `a sa´ıda padr˜ao. Pode ser especificado mais de um arquivo de uma vez. Sempre ser´a criado um
arquivo compactado para cada arquivo especificado.
Op¸c˜ao Descri¸c˜ao
-c Envia dados compactados `a sa´ıda padr˜ao.
-d Descompacta o arquivo especificado.
-l Lista o arquivo compactado e os seguintes campos: tamanho do arquivo compactado,
tamanho do arquivo descompactado, taxa de compacta¸c˜ao e nome do arquivo original.
No exemplo abaixo, o comando compacta arq.txt, criando um arquivo chamado arq.txt.gz. Observe
que o arquivo original ´e exclu´ıdo e no diret´orio resta apenas o arquivo compactado.
~/arquivos$ gzip arq.txt
~/arquivos$ ls arq*
arq.txt.gz
Para descompactar o arquivo:
~/arquivos$ gzip -d arq.txt.gz
~/arquivos$ ls arq*
arq.txt
5.4.2 zcat e gunzip
O zcat e o gunzip s˜ao aplicativos que descompactam arquivos compactados com o gzip. Essencialmente,
eles funcionam da mesma maneira. Na verdade zcat ´e o mesmo que “gunzip -c”. Ou seja, ele descom-
pacta os dados e os envia `a sa´ıda padr˜ao. O comportamento padr˜ao do gunzip ´e descompactar o arquivo
e remover o arquivo compactado. Sintaxes:
zcat [op¸c~oes] <nome do arquivo>
gunzip [op¸c~oes] <nome do arquivo>
As op¸c˜oes s˜ao as mesmas que para o gzip. O comando abaixo descompacta o arquivo arq.txt.gz,
criando um arquivo chamado arq.txt.
~/arquivos$ gunzip arq.txt.gz
Se quis´essemos apenas mostrar na tela o conte´udo do arquivo texto compactado:
~/arquivos$ zcat arq.txt.gz
5.4.3 tar
O tar ´e um aplicativo que tem por finalidade arquivar programas, ou seja, guardar uma s´erie de arquivos
dentro de apenas um arquivo. A finalidade de se arquivar programas pode ser para criar um grande
arquivo e depois dividi-lo em partes (por exemplo, para guardar em v´arios disquetes), guardar em uma fita
dat, compactar, etc. Programas como o conhecido pkzip s˜ao, na verdade, uma combina¸c˜ao de arquivadores
com compactadores.
Sintaxe: tar [op¸c~oes] <lista de arquivos>
Onde lista de arquivos ´e constitu´ıda por nomes de arquivos separados por espa¸cos em branco. Se a
op¸c˜ao “f” n˜ao for utilizada, o arquivamento ´e enviado `a sa´ıda padr˜ao.
Op¸c˜ao Descri¸c˜ao
x Extrai arquivos de um arquivo.
c Arquiva a lista de arquivos.
v Modo “verboso”, ou seja, `a medida que o (des)arquivamento ocorre, mostra na tela
mensagens sobre o arquivo sendo precessado.
z Usa o gzip como filtro, ou seja, (des)compacta os arquivos durante o processo.
f <arq> Especifica que os arquivos da lista devem ser arquivados no arquivo de nome arq.
M Arquiva em multiplos volumes (disquetes, por exemplo).
´E interessante observar que o tar trabalha recursivamente, ou sejam, caso um dos arquivos especificado
para arquivar seja um diret´orio, todos os seus arquivos e subdiret´orios tamb´em ser˜ao arquivados e ter˜ao
sua estrutura original mantida. Resaltamos tamb´em que, diferentemente do gzip o tar preserva os arquivos
originais, n˜ao revendo-os como o outro comando faz.
Exemplos:
Arquivar todos os arquivos do diret´orio atual no arquivo arq1.tar:
~/arquivos$ tar cf arq1.tar *
Arquivar e compactar os arquivos do diret´orio atual em arq2.tar.gz1
:
~/arquivos$ tar czf arq2.tar.gz *
Descompactar e extrair de arq2.tar.gz apenas um arquivo chamado texto.txt:
~/arquivos$ tar xzf arq2.tar.gz texto.txt
Arquivar toda a sua ´area pessoal em disquetes:
~/arquivos$ tar cMf /dev/fd0 ~
Quando arquivamos em m´ultiplos volumes, como neste ´ultimo exemplo, o tar n˜ao aceita a op¸c˜ao “z”.
Assim, para economizarmos disquetes, ´e melhor primeiro compactarmos os dados e depois arquivarmo-los
em m´ultiplos volumes. Isto fica como exerc´ıcio para vocˆe (dica: vocˆe deve usar duas vezes o comando
tar).
1As extens˜oes .tar.gz e .tgz s˜ao usualmente utilizadas para identificar arquivos gerados com a combina¸c˜ao do tar com o
gzip.
5.5 Comandos ´uteis
5.5.1 split
O comando split quebra um determinado arquivo em varias partes cujo tamanho ´e indicado na sintaxe:
split -b <tamanho de cada parti¸c~ao> <nome do arquivo>
O tamanho ´e indicado em bytes. Para indicar o tamanho em kilobytes ou megabytes deve-se acres-
centar os sufixos k ou m respectivamente ap´os o tamanhocomo no exemplo:
split -b 100k foto.jpg
Tal comando dividiria o arquivo foto.jpg em varios arquivos com 100 kbytes cada. Mas cuidado
ao escolher o tamanho para quebrar arquivos muito grandes ou quebrar um arquivo em peda¸cos muito
pequenos.
5.5.2 df
O comando df ´e utilizado para obter o espa¸co dispon´ıvel em cada parti¸c˜ao dos discos da m´aquina.
Sintaxe: df [op¸c~oes]
Op¸c˜ao Descri¸c˜ao
-h Apresenta os valores utilizando como unidade o kilobyte (K), o megabyte (M) e o
gigabyte (G), o que for mais apropriado `a grandeza de cada valor.
-k Apresenta os valores utilizando como unidade o kilobyte (K).
-m Apresenta os valores utilizando como unidade o megabyte (M).
Exemplos:
~$ df
Filesystem 1024-blocks Used Available Use% Mounted on
/dev/hda4 4222295 3163808 840003 79% /
/dev/hda2 256590 21 243316 0% /tmp
/dev/hda3 1484386 847188 560488 60% /home
~$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda4 4.0G 3.0G 820M 79% /
/dev/hda2 251M 21K 238M 0% /tmp
/dev/hda3 1.4G 827M 547M 60% /home
O segundo comando do exemplo nos mostra que na parti¸c˜ao do diret´orio raiz (/) est˜ao dispon´ıveis
820 megabytes de um total de 4 gigabytes; na parti¸c˜ao do diret´orio /home, onde est˜ao os dados pessoais
dos usu´arios, est˜ao dispon´ıveis 547 megabytes de um total de 1,4 gigabyte; na parti¸c˜ao dos arquivos
tempor´arios, utilizada por diversos aplicativos, est˜ao dispon´ıveis 238 de um total de 251 megabytes.
5.5.3 du
O comando du ´e usado para descobrir qual ´e o espa¸co ocupado por um diret´orio ou conjunto de arquivos.
Esse comando funciona de maneira recursiva, ou seja, para obter o tamanho de um diret´orio, ele verifica
o tamanho de todos os subdiret´orios deste diret´orio.
Sintaxe: du [op¸c~oes]
Op¸c˜ao Descri¸c˜ao
-h Apresenta os valores utilizando como unidade o kilobyte (K), o megabyte (M) e o
gigabyte (G), o que for mais apropriado `a grandeza de cada valor.
-k Apresenta os valores utilizando como unidade o kilobyte (K). Est´a ´e o op¸c˜ao padr˜ao.
-m Apresenta os valores utilizando como unidade o megabyte (M).
-s Apresenta apenas o valor total, omitindo subtotais dos subdiret´orios.
Por exemplo, para obtermos a quantidade de dados contida sob o atual diret´orio de trabalho (.):
~/documentos$ du
4377 ./Linux
5231 .
~/documentos$ du -s
5231 .
~/documentos$ du -sh
5.1M .
5.6 Comandos de Busca
5.6.1 find
Procura um arquivo dentro de toda uma hierarquia de diret´orios, imprimindo o caminho a partir do
diret´orio atual se o arquivo for encontrado.
Sintaxe: find <caminho> <op¸c~oes>
Onde caminho indica o diret´orio a partir do qual deve ser iniciada a busca quando n˜ao epecificado,
esta ser´a feita no diret´orio corrente.
Op¸c˜oes Descri¸c˜ao
-name <nome do arquivo> Procura atrav´es de um nome do arquivo
-iname <nome do arquivo> Procura atrav´es de um nome de arquivo,
sem diferenciar letras mai´usculas e
min´usculas.
-size <n> Procura arquivos atrav´es de seu tamanho, +n para arquivos mai-
ores que n , -n para arquivos menores que n, e n para arquivos
de tamanho n. O n pode ser expresso em kilobytes, megabytes e
gigabytes atrav´es dos sulfixos k, m e g respectivamente.
No caso do uso de metaracteres o nome do arquivo deve ser quotado (colocado entre aspas) para que seja
obtido o resultado desejado, garantindo que a expans˜ao ser´a realizada pelo comando e n˜ao pela shell.
Por exemplo, queremos procurar todos os arquivos jpg que possuem um tamanho maior que 50k no
diret´orio corrente.
~$ find . -name "*.jpg" -size +50k
./oceans.jpg
./sistema_todo.jpg
~$
5.6.2 which
O comando which ´e usado para verificar em que diret´orio se encontra um determinado comando. Por´em,
which s´o funciona para comandos cujo diret´orio est´a incluso na lista de diret´orios da vari´avel PATH.
Sintaxe: which <nome do comando>
Exemplos:
~$ which man
/usr/bin/man
~$ which which
/usr/bin/which
5.7 Exerc´ıcios
1. Descreva o procedimento necess´ario para listar todos os programas em execu¸c˜ao na m´aquina, e
como seria poss´ıvel identificar a quem pertence cada um.
2. Suponha agora que vocˆe quer listar apenas os processos referentes ao usu´ario cujo username ´e joao.
Qual seria o procedimento necess´ario?
3. Suponha que vocˆe tenha acionado um programa e, por alguma raz˜ao qualquer, este programa
travou. Descreva que procedimento deveria ser tomado para finalizar o programa.
4. Existe um determinado arquivo chamado lista alunos em algum subdiret´orio de seu diret´orio pes-
soal, mas vocˆe esqueceu onde ele se encontra. Como vocˆe faria para encontr´a-lo?
5. Um determinado diret´orio cont´em cinco arquivos chamados lista1, lista2, etc. Cada arquivo possui
uma lista com nomes de pessoas que v˜ao se increver em um curso. Quais os comandos necess´arios
para combinar todos os arquivos, ordenar alfabeticamente todos os nomes e gravar a lista ordenada
em um arquivo chamado lista alfabetica ?
6. Suponha que vocˆe tem um diret´orio chamado bin, dentro do seu diret´orio pessoal, e cujo conte´udo
´e uma s´erie de pequenos aplicativos. O que vocˆe deve fazer para que os arquivos deste diret´orio
possam ser executados sem que seja necess´ario especificar o seu caminho absoluto (i.e., ~/bin/prog)?
7. Usando o mesmo procedimento do exerc´ıcio anterior, al´em do diret´orio bin, foi especificado mais
uma s´erie de diret´orios sob o seu diret´orio pessoal. Suponha que vocˆe esqueceu onde se encontra um
programa chamado limpa. Descreva duas maneiras de encontrar a posi¸c˜ao exata deste programa.
8. Explique a diferen¸ca entre os aplicativos zcat e gunzip. Qual deles ´e mais gen´erico?
9. No seu diret´orio pessoal, existe um arquivo chamado relatorio duplicado em um diret´orio chamado
documentos. Descreva o procedimento completo para saber qual deles ´e mais recente e se existe
alguma diferen¸ca entre eles.
10. Em um diret´orio chamado trabalhos existem v´arios arquivos de v´arios tipos. Descreva o procedi-
mento para:
(a) criar um arquivo com a lista de todos os arquivos deste diret´orio, armazenando seu respectivo
tipo;
(b) criar um arquivo com a lista de todos os arquivos deste diret´orio, mas armazenando apenas
aqueles iniciados por arq.
11. Crie um diret´orio chamado “juncao” e copie o arquivo .bashrc para dentro desse diret´orio. Em
seguida, divida o arquivo .bashrc em varios arquivos de 400 bytes.
12. Junte novamente cada uma das pe¸cas do arquivo segmentado no exerc´ıcio anterior.
Linux basico
Cap´ıtulo 6
Editor vi
Um editor de texto ´e simplesmente um programa usado para editar arquivos que podem conter textos,
como uma carta, programas em alguma linguagem de programa¸c˜ao ou um arquivo de configura¸c˜ao do
sistema. A escolha de um editor de textos ´e basicamente uma quest˜ao pessoal. Apesar dos in´umeros
editores de textos dispon´ıveis para sistemas Linux/Unix, o ´unico com presen¸ca garantida em todos ´e o vi
– ”visual editor”. O vi n˜ao ´e o editor mais f´acil de ser usado e muito menos ´e auto-explicativo.
Por isto, muitos preferem o emacs, um editor com mais recursos e facilidades que o vi. Entretanto,
devido ao fato do emacs e todos os seus arquivos de suporte serem relativamente grandes, podemos
encontrar situa¸c˜oes em que o seu uso n˜ao esteja dispon´ıvel em alguns sistemas.
Por outro lado, o vi ´e pequeno, extremamente r´apido e poderoso, apesar de ser relativamente mais
dif´ıcil de usar (at´e que se adquira o h´abito). Al´em disso, pelo fato de o vi ser t˜ao comum no mundo
Linux/Unix, h´a necessidade de uma breve explica¸c˜ao neste cap´ıtulo. N˜ao discutiremos todas as suas
caracter´ısticas mas sim aquelas necess´arias para uma breve introdu¸c˜ao. No cap´ıtulo seguinte veremos o
emacs.
6.1 Conceitos
A grande diferen¸ca entre o vi e os outros editores comumente encontrados nos sistemas Unix ´e que
estes ´ultimos iniciam diretamente em modo de edi¸c˜ao. Comandos s˜ao acionados com o aux´ılio de teclas
especiais como CTRL, ALT, DEL, BACKSPACE, teclas de fun¸c˜ao (F1...F12) ou ent˜ao com aux´ılio do
mouse. No vi, comandos s˜ao feitos sem estes recursos. Por esta raz˜ao, precisamos informar ao vi quando
queremos digitar a letra “a” e quando queremos executar o comando associado a essa letra, por exemplo.
Por isto, durante o uso deste editor, estamos a todo instante em um dos seus trˆes modos de opera¸c˜ao.
Estes modos s˜ao conhecidos como modo comando, modo de inser¸c˜ao e modo linha.
Quando iniciamos o vi, estamos em modo comando. Este modo permite o uso de certos comandos
para editar arquivos ou mudar para outros modos. Por exemplo, digitando “x” enquanto estivermos no
modo comando podemos apagar o caracter sob o cursor. As teclas de direcionamento (←, →, ↑ e ↓)
movem o cursor pelo arquivo que estamos editando. Geralmente, os comandos usados no modo comando
possuem um ou dois caracteres.
Podemos efetivamente inserir e editar textos no modo de inser¸c˜ao. Sa´ımos do modo comando e
iniciamos este modo com o comando “i” (insert). Enquanto estivermos no modo de inser¸c˜ao estaremos
inserindo textos no documento a partir da localiza¸c˜ao corrente do cursor. Para finalizar este modo e
retornar ao modo comando, pressione a tecla ESC.
Modo linha ´e um modo especial para certos comandos extendidos do vi. Enquanto digitamos estes
comandos, eles aparecem na ´ultima linha da tela. Por exemplo, quando digitamos “:” no modo comando,
estaremos indo para o modo linha e podemos usar comandos como “wq” (para salvar o arquivo e sair do
vi) ou “q!” (para sair do vi sem salvar as altera¸c˜oes). O modo linha ´e geralmente usado para comandos
que possuem mais de um caracter de extens˜ao. Neste modo podemos entrar com uma linha de comando
e pressionar enter para execut´a-la.
49
6.2 In´ıcio do vi
A melhor maneira de entender estes conceitos ´e realmente editando um texto. No exemplo seguinte
estaremos mostrando apenas algumas linhas de texto, como se ele tivesse apenas seis linhas. A sintaxe
do vi ´e:
vi <nome do arquivo>
Iniciaremos o vi digitando “vi test” e estaremos editando o arquivo test. Veremos algo como:
~
~
~
~
~
~
"test" [New file] .
A coluna de caracteres “~” indica que estamos no final do arquivo.
6.3 Inser¸c˜ao de texto
Estamos agora no modo comando. Para inserir textos no arquivo precisamos passar para o modo de
inser¸c˜ao pressionando “i” (inserir sob o cursor). Em seguida podemos digitar o texto, como no exemplo
abaixo:
Now is the time for all good men to come to the aid of the
party.
~
~
~
~
~
Para finalizar o modo de inser¸c˜ao e retornar ao modo comando basta pressionar ESC. Enquanto
estivermos no modo comando podemos usar as teclas de posicionamento para “caminhar” pelo texto.
Neste exemplo, por termos apenas uma linha de texto as teclas de posicionameto para cima ou para
baixo provavelmente causar˜ao um “beep” (som) do vi.
Existem v´arias maneiras de inserir um texto, que n˜ao seja usando o comando “i”. Por exemplo, o
comando “a” insere textos ap´os a posi¸c˜ao corrente do cursor, ao inv´es da posi¸c˜ao atual. Usaremos a tecla
de posicionamento para esquerda para mover o cursor (“ ”) entre as palavras “good” e “men”.
Now is the time for all good_men to come to the aid of the
party.
~
~
~
~
~
Pressionando “a”, para iniciar o modo de inser¸c˜ao, digitamos “wo”, e ent˜ao pressionamos ESC para
retornar ao modo comando. Assim, transformamos a palavra “men” em “women”.
Now is the time for all good women to come to the aid of
the party.
~
~
~
~
~
Para come¸car inserindo textos na linha abaixo da linha corrente, usamos o comando “o”. Por exemplo,
pressione “o” e digite outra linha de texto.
Now is the time for all good women to come to the aid of
the party.
Afterwards, we’ll go out for pizza and beer.
~
~
~
~
Lembre-se que a todo momento estamos em um dos trˆes modos de opera¸c˜ao: modo comando (no qual
executamos comandos como “i”, “o” e “a”), modo de inser¸c˜ao (no qual inserimos texto, seguido de ESC
para retornar ao modo comando) ou modo linha (no qual executamos comandos extendidos).
6.4 Apagando textos
No modo comando, “x” apaga o caracter sob o cursor. Se pressionarmos “x” cinco vezes teremos:
Now is the time for all good women to come to the aid of
the party.
Afterwards, we’ll go out for pizza and_
~
~
~
~
Pressionando “a”, podemos inserir algum texto e retornar ao modo comando pressionando ESC.
Now is the time for all good women to come to the aid of
the party.
Afterwards, we’ll go out for pizza and soda_
~
~
~
~
Podemos apagar linhas inteiras usando o comando “dd” (isto ´e, pressionando a tecla “d” duas vezes).
Se o cursor estiver na terceira linha e digitarmos “dd” teremos:
Now is the time for all good women to come to the aid of
the party.
~
~
~
~
~
Para apagarmos a palavra em que o cursor est´a posicionado usamos o comando “dw”. Posicionamos
o cursor sobre a ´ultima palavra “the” e digitamos “dw”.
Now is the time for all good women to come to the aid of
party.
~
~
~
~
~
Temos ainda os comandos “d$” que apagar´a tudo a partir do cursor at´e o final da linha e “dG” que
apagar´a tudo a partir do cursor at´e o final do arquivo.
6.5 Alterando textos
Podemos substituir partes de textos usando o comando “R”. Posicionando o cursor na primeira letra de
“women”, pressionando “R” e digitando a palavra “children” teremos:
Now is the time for all good children to come to the aid of
party.
~
~
~
~
~
Usar “R” para editar textos ´e como usar os comandos “i” e “a”. “R” sobrescreve textos ao inv´es de
somente inser´ı-los.
O comando “r” substitui um ´unico caracter sobre o cursor. Por exemplo, movendo o cursor para o
come¸co da palavra “Now”, pressionando “r” seguido de “C”, teremos:
Cow is the time for all good children to come to the aid of
party.
~
~
~
~
~
O comando “~” altera as letras sobre o cursor de mai´usculas para min´usculas e vice-versa. Por
exemplo, posicionando o cursor na letra “o” da palavra “Cow” acima e pressionando repetidamente “~”
teremos:
COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF
PARTY.
~
~
~
~
~
6.6 Comandos de movimenta¸c˜ao
J´a sabemos como usar as teclas de posicionamento para “caminhar” pelo documento. Al´em disso, po-
demos usar os comandos “h”, “j”, “k” e “l” para movimentar o cursor para esquerda, para baixo, para
cima e para direita respectivamente.
O comando “w” move o cursor para o come¸co da pr´oxima palavra e “b” move para o come¸co da
palavra anterior.
O comando “0” (zero) move o cursor para o come¸co da linha corrente e o comando “$” para o final
da linha.
Quando estamos editando arquivos muito grandes provavelmente queremos movimentar o cursor para
frente e para tr´as uma p´agina de cada vez. Pressionando CTRL-F movemos o cursor uma p´agina para
frente e CTRL-B move uma p´agina para tr´as.
Para mover o cursor para o fim do arquivo usamos “G”. Podemos tamb´em, mover para um linha
arbitr´aria; por exemplo o comando “10G” move o cursor para a linha 10 do arquivo.
6.7 Salvando arquivos e saindo do vi
Quando digitamos o caracter “:”, o cursor se move para a ´ultima linha da tela; estamos, portanto, no
modo linha.
COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF
PARTY.
~
~
~
~
:_
No modo linha, podemos usar certos comandos como “q!” que sai do vi sem salvar o arquivo. O
comando “wq” salva o arquivo e ent˜ao sai do vi. O comando “ZZ”, no modo comando, ´e equivalente a
“wq” no modo linha.
Lembre-se que devemos pressionar ENTER ap´os o comando no modo linha. Para salvar o arquivo
sem sair do vi, usamos apenas “w”.
6.8 Editando outro arquivo
Para editar outro arquivo usamos o comando “:e”. Por exemplo, para parar de editar o arquivo test e
editar o arquivo foo, usamos este comando.
COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF
PARTY.
~
~
~
~
:e foo_
Se usarmos :e sem salvar o arquivo antes, teremos uma mensagem de erro indicando que o vi n˜ao quer
editar outro arquivo sem o primeiro seja salvo antes. Neste momento, podemos usar “:w” para salvar o
arquivo para ent˜ao usar “:e” ou podemos usar o comando “:e!”. O ”!”faz com que o vi edite um novo
arquivo sem que o primeiro seja salvo.
COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF
PARTY.
~
~
~
~
:e! foo_
6.9 Incluindo outros arquivos
Se usarmos o comando “:r” podemos incluir o conte´udo de outros arquivos no arquivo corrente. Assim,
“:r carta.txt” inserir´a o conte´udo do arquivo carta.txt na posi¸c˜ao atual do cursor no arquivo corrente.
Outro comando muito ´util ´e “:split” que divide a tela atual com o arquivo aberto por este comando.
Fazemos isso digitando “:split ¡nome do arquivo¿”.
6.10 Mudando de janela dentro do VI
Para mudarmos de janelas usamos o comando “ctrl-w ↑” ou “ctrl-w ↓” que alterar˜ao o cursor para a
janela superior a atual e inferior a atual, respectivamente.
6.11 Executando comandos shell
Podemos tamb´em executar comandos de shell no vi. O comando “:r!” trabalha como o “:r” mas ao inv´es
de ler o arquivo, ele insere a sa´ıda do comando dado na posi¸c˜ao corrente do cursor no buffer atual. Por
exemplo, se usarmos do comando “:r! ls -F” teremos:
COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF
PARTY.
letters/
misc/
papers/_
~
Podemos tamb´em executar um comando no vi e retornar ao editor quando o comando estiver conclu´ıdo.
Por exemplo, o comando “:! ls -F” ser´a executado e o resultado ser´a exibido mas n˜ao ser´a inserido no
arquivo que est´a sendo editado.
Se usarmos o comando “:shell” o vi inicializar´a uma instˆancia do shell, permitindo executar outros
comandos enquanto o vi fica “pendurado”. Para retornar a edi¸c˜ao basta usar o comando exit.
6.12 Resumo dos principais comandos do vi
Iniciando o vi
vi <nome do arquivo> abre ou cria o arquivo especificado
vi +18 <nome do arquivo> abre e posiciona o cursor na linha 18
vi +/’teste’ <nome do arquivo> abre o arquivo na primeira incidˆencia da palavra “teste”
view <nome do arquivo> abre o arquivo somente para leitura
Comandos de cursor
h move para esquerda
j move para baixo
k move para cima
l move para direita
w move uma palavra para direita
W move uma palavra para direita (al´em da pontua¸c˜ao)
b move uma palavra para esquerda
B move uma palavra para esquerda (al´em da pontu¸c˜ao)
Enter move uma linha para baixo
Backspace move um caracter `a esquerda
Espa¸co move um caracter `a direita
H move para o in´ıcio da tela
M move para o meio da tela
L move para o final da tela
ctrl-f avan¸ca uma tela
ctrl-d avan¸ca um tela
ctrl-b retorna uma tela
ctrl-u retorna uma tela
G vai para ´ultima linha do arquivo
21G vai para linha 21
Inserindo caracteres e linhas
a insere caracter `a direita do cursor
A insere caracter `a direita do cursor e sinaliza fim de linha
i insere caracter `a esquerda do cursor
I insere caracter `a esquerda do cursor e sinaliza fim de linha
o insere linha abaixo do cursor
O insere linha acima do cursor
Alterando texto
cw altera palavra (ou parte da palavra `a esquerda do cursor)
cc altera linha
C altera parte da linha `a direita do cursor
J junta a linha corrente com a linha abaixo
xp muda o caracter que o cursor est´a posicionado com o caracter `a direita
~ altera letra (min´uscula/mai´uscula)
u desfaz comando anterior
U desfaz todas as altera¸c˜oes da linha
:u desfaz o comando anterior da linha
Apagando texto
x apaga caracter
dw apaga palavra (ou parte da palavra `a direita do cursor)
dd apaga linha
D apaga parte da linha `a direita do cursor
5,10d apaga linhas de 5 a 10
Copiando ou movendo texto
yy ou Y marca linha a ser copiada
p copia linha marcada abaixo da linha corrente
P copia linha marcada acima da linha corrente
dd apaga linha (ao inv´es de copiar)
1,2 co 3 copia linhas 1 e 2 colocando ap´os a linha 3
4,5 m 10 move linhas 4 e 5 colocando ap´os a linha 10
Visualizando numera¸c˜ao e procurando linhas
set nu mostra linhas numeradas
set nonu inibe a numera¸c˜ao de linhas
Procurando e alterando
/string/ procura a “string”
?string? procura a “string” no texto acima
n procura pr´oxima ocorrˆencia da string
:
%s/string1/string2/ & substitui string1 por string2
%s/string1/string2/g & substitui string1 por string2 at´e o final o arquivo
%s/string1/string2/c & substitui string1 por string2 mas perguntando a cada
altera¸c~ao
Limpando a tela
ctrl-l limpa a tela
Inserindo, salvando e cancelando arquivo
r <nome do arquivo> insere arquivo depois do cursor
34 <nome do arquivo> insere arquivo ap´os linha 34
w salva as altera¸c˜oes (no buffer)
w <nome do arquivo> salva o buffer no arquivo
wq ou ZZ salva altera¸c˜oes e sai do vi
q! sai do vi sem salvar altera¸c˜oes
Atribuindo n´umeros a comandos
Todo comando pode receber um n´umero, por exemplo:
3x apaga 3 caracteres
3dd apaga 3 linhas
3yy marca 3 linhas
Cap´ıtulo 7
Emacs
O GNU Emacs ´e uma das ferramentas mais utilizadas no mundo Linux/Unix. Este cap´ıtulo pretende
dar uma breve introdu¸c˜ao ao uso do Emacs como um editor de texto, mas trata-se de uma ferramenta
que pode ser utilizada para v´arios outros fins. Para inicializar o Emacs simplesmente digitamos emacs
seguido do nome do arquivo que queremos editar. Se usarmos um nome de arquivo inexistente, o editor
cria um novo arquivo com o nome digitado.
7.1 Buffers
Quando o Emacs edita um arquivo, o conte´udo deste ´e copiado para um buffer. Podemos ent˜ao alterar
este buffer com os comandos de edi¸c˜ao do Emacs, e quando terminarmos, podemos gravar no arquivo
original o conte´udo do buffer. ´E importante compreender que as modifica¸c˜oes no buffer n˜ao alteram o
arquivo original. Caso haja algum problema durante a edi¸c˜ao, podemos terminar a execu¸c˜ao do editor
sem que o arquivo seja modificado. Entretanto, existe um pre¸co a ser pago por esta seguran¸ca. Se o
sistema cair podemos perder todas as modifica¸c˜oes que j´a fizemos. O Emacs permite editar v´arios buffers
simultaneamente e os conte´udos destes buffers podem ser exibidos na tela ao mesmo tempo. Normalmente,
os buffers s˜ao criados a partir de uma c´opia de um arquivo. Entretanto, veremos que um buffer pode ser
criado por outros m´etodos. Assim, nem sempre um buffer esta associado a um arquivo.
7.2 Layout da tela
Este cap´ıtulo pressup˜oe que o Emacs est´a sendo usado em um terminal ou janela no X-Window. Neste
contexto, a tela ´e toda a tela do teminal ou simplesmente uma janela no X-Window. O Emacs divide
a janela em duas partes. A ´ultima linha da tela, que ´e utilizada para exibir mensagens e perguntas, ´e
denominada linha de eco. Digitar sobre a linha de eco ´e como digitar comandos no sistema operacional.
Veremos mais detalhes adiante.
O resto da tela ´e preenchido com as janelas de texto do Emacs. Note que o Emacs tem sua pr´opria
no¸c˜ao de janela a qual pode ser manipulada pelo editor de uma maneira um pouco diferente `a de um
gerenciador de janelas. Quando o Emacs ´e inicializado pela primeira vez, existe somente uma janela e
ela preenche a tela inteira. Janelas podem ser criadas, destru´ıdas e ter seu tamanho ajustado usando os
comandos do editor. Cada janela de texto pode mostrar o buffer inteiro ou parcialmente.
7.3 Linha de modo
A pen´ultima linha da janela (a linha normalmente em modo de v´ıdeo reverso) ´e a linha de modo (mode
line) para a janela. Ela cont´em informa¸c˜oes sobre o que est´a sendo mostrado na janela. Linhas de modo
separam as janelas uma das outras e das linhas de eco.
Trˆes ´areas importantes podem ser mostradas na linha de modo: o indicador de mudan¸ca no conte´udo
do buffer, o nome do buffer e o nome do arquivo.
57
Uma janela est´a sempre mostrando os dados de um buffer. O nome do buffer que est´a na janela ´e
mostrado na linha de modo, `a esquerda. Um buffer pode ter um arquivo associado a ele. Nesse caso, ´e o
nome do arquivo que ´e mostrado na linha de modo.
O Emacs sabe se um buffer foi modificado desde a ´ultima vez que foi escrito no seu respectivo arquivo.
Ele informa isso ao usu´ario mostrando um “**” na linha de modo. Quando as modifica¸c˜oes s˜ao salvas
(gravadas) no arquivo, o “**” se transforma em “--”, indicando que o conte´udo atual do buffer n˜ao sofreu
nenhuma altera¸c˜ao e seus dados s˜ao os mesmos que os do arquivo.
7.4 Linha de eco
A linha de eco tem dois prop´ositos: mostrar mensagens e fazer perguntas. Dois tipos de mensagens
s˜ao exibidas na linha de eco. Mensagens apenas informativas, que n˜ao implicam na existˆencia de algo
de errado, e mensagens de erro, que indicam que algo est´a impedindo que um comando seja executado.
Estas podem ser acompanhadas por um beep sonoro. A linha de eco ´e normalmente apagada quando uma
outra tecla ´e pressionada.
Esta linha tamb´em pode ser usada para fazer e responder perguntas. Depois do prompt, podemos
digitar qualquer caracter. A reposta ´e sempre terminada por ENTER. Antes de responder, pode-se
tamb´em remover caracteres pessionando-se Ctrl-d. Pode-se tamb´em cancelar um comando digitando
Ctrl-g. O processamento dos comandos ´e tal que todas as perguntas s˜ao feitas antes que aqueles com
consequˆencias mais s´erias sejam executados. Assim, nunca se danifica nada ao abortar um comando.
7.5 Comandos
Os comandos do Emacs s˜ao acionados, basicamente, atrav´es de combina¸c˜oes de teclas, geralmente in-
cluindo as teclas Ctrl e Esc. Estes comandos s˜ao interpretados imediatamente (i.e. o editor n˜ao espera
que seja pressionada a tecla ENTER).
Terminar uma edi¸c˜ao
A primeira coisa a aprender sobre qualquer programa interativo ´e como termin´a-lo. Quando terminarmos
a edi¸c˜ao, precisamos finalizar o editor. O Emacs n˜ao grava automaticamente um arquivo quando ´e
finalizado. Entretanto, ele emite um aviso para que isso n˜ao seja esquecido.
Ctrl-x Ctrl-c ´e o comando b´asico para sair. Saindo do Emacs, o controle volta para o shell. Se houver
algum buffer modificado que ainda n˜ao tenha sido gravado, o Emacs pede permiss˜ao para encerrar.
Movimenta¸c˜ao do cursor
Ctrl-a Move o cursor para o in´ıcio do par´agrafo.
Ctrl-b Retrocede um caracter (back).
Esc-b Retrocede uma palavra.
Ctrl-e Move o cursor para o fim da do par´agrafo (end).
Ctrl-f Avan¸ca um caracter (foward).
Esc-f Avan¸ca uma palavra.
Ctrl-n Move para a pr´oxima linha (next).
Ctrl-p Move para a linha anterior (previous).
Ctrl-v Move para a pr´oxima tela.
Esc-v Move para a p´agina anterior.
Esc-< Move para o come¸co do buffer.
Esc-> Move para o fim do buffer.
Esc-c Move o cursor para o fim da palavra, convertendo todos os caracteres da palavra em
min´usculos exceto o primeiro que ´e convertido em mai´usculo (capitalize).
Esc-l Move o cursor para o fim da palavra convertendo todos os caracteres em min´usculos
(lower-case).
Esc-u Similar ao Esc-l convertendo os caracteres em mai´usculos (upper-case).
Atualmente, os teclados possuem teclas especiais que simplificam a edi¸c˜ao. As teclas das setas podem
servir para movimentar o cursor. A de seta para esquerda funciona como o Ctrl-b, a de seta para direita
como Ctrl-f, a de seta para cima como um Ctrl-p e a de seta para baixo como um Ctrl-n.
Inser¸c˜ao
ENTER Funciona como esperar´ıamos que funcionasse: insere um caracter de nova linha. Uma
linha pode ser particionada movendo-se o cursor at´e o ponto desejado e inserindo um
caracter de nova linha.
Ctrl-m Idˆentico ao ENTER.
Ctrl-o Cria uma linha em branco. Mais precisamente, o comando insere uma nova linha
como o Ctrl-m e volta para cima como um Ctrl-b.
Ctrl-q Caracteres que tem significado especial para o Emacs podem ser inseridos no buffer
com este comando. O caracter que segue o Ctrl-q ´e simplesmente inserido no buffer,
desprovido de qualquer significado.
Remo¸c˜ao
Existem duas classes de comandos que removem texto de um buffer. Os comandos de dele¸c˜ao removem
o texto do buffer. Os comandos de “kill” removem o texto do buffer, mas salvam o texto num buffer
especial chamado de kill buffer, possibilitando que o texto seja recuperado posteriormente. Os comandos
de edi¸c˜ao limpam o kill buffer somente se o comando anterior n˜ao foi um kill. M´ultiplos kill, executados
em seguida ir˜ao agregar texto ao este buffer.
Ctrl-d Remove um caracter `a direita do cursor (delete).
Del Remove um caracter `a esquerda do cursor.
Ctrl-k Este ´e o comando b´asico de kill. Ele remove o texto a partir do ponto at´e o fim da
linha. O texto ´e transferido para o kill buffer.
Ctrl-w Remove toda a regi˜ao entre a marca e o cursor (wipe). O texto nela contido ´e trans-
ferido para o kill buffer.
Ctrl-y Insere o texto do kill buffer para o buffer corrente (yank). Note que o conte´udo do kill
buffer n˜ao ´e destru´ıdo quando ele ´e copiado para o buffer corrente. Assim, o texto no
kill buffer pode ser copiado repetidamente, obtendo-se m´ultiplas c´opias de um trecho
do texto.
Convers˜ao de letras
Em adi¸c˜ao aos comandos de convers˜ao de letras em palavras, o Emacs possui comandos para a modifica¸c˜ao
de letras em regi˜oes de texto. Esses comandos devem ser usados com cautela porque eles podem causar
danos a (potencilamente) grandes ´areas do buffer.
Ctrl-x Ctrl-l Converte para min´usculas todas as letras da regi˜ao marcada.
Ctrl-s Ctrl-u Converte para mai´usculas todas as letras da regi˜ao marcada.
Busca
Os comandos de busca (search) percorrem o buffer, tanto para frente como para tr´as, procurando por
um texto solicitado. Uma busca come¸ca t˜ao logo seja digitado o primeiro caracter na string de busca.
Conforme digitamos, o Emacs procura, no texto, a sequˆencia digitada. A busca pode ser interrompida
digitando-se Esc ou qualquer comando que n˜ao tenha significado no processo de procura. Caracteres
mai´usculos e min´usculos n˜ao s˜ao diferenciandos.
Ctrl-s Busca para frente a partir da posi¸c˜ao corrente at´e o final do buffer (search). Se
cometermos um engano ao digitar a string de procura, podemos apagar caracteres
com a tecla Del. A cada vez em que se pressiona esta tecla, o ´ultimo caracter da
string de procura ´e cancelado. Pressionando Ctrl-s novamente fazemos com que o
cursor seja movido para a pr´oxima ocorrˆencia da string no texto. Isso pode ser
repetido v´arias vezes. Pode-se repetir a procura da ´ultima string digitando Ctrl-s
Ctrl-s.
Ctrl-r Realiza uma busca no sentido reverso (para tr´as), a partir da posi¸c˜ao corrente at´e o
in´ıcio do buffer.
Esc-% Realiza a substitui¸c˜ao de uma seq¨uˆencia de caracteres (string). Cada ocorrˆencia da
string de busca ´e mostrada e o Emacs pergunta ao usu´ario se este deseja substituir
a string ou n˜ao. Pressionamos a barra de espa¸cos para substituir, Del para n˜ao
substituir e “!” para substituir todas as ocorrˆencias sem precisar confirmar cada uma
delas. Pressionamos Esc ou Ctrl-g para cancelar o comando.
Arquivos
Ctrl-x s Salva (save) o conte´udo do buffer no arquivo a este associado.
Ctrl-x Ctrl-f Cria um novo buffer, associando a ele um arquivo cujo nome deve ser digitado na
linha de eco. Caso n˜ao exista nenhum arquivo com o nome informado, o Emacs cria
um novo arquivo, vazio.
Ctrl-x Ctrl-w Grava o conte´udo do buffer no arquivo cujo nome ´e informado na linha de eco. Este
comando ´e semelhante `a op¸c˜ao Salvar como dispon´ıvel em outros editores de texto.
Gerenciamento de buffer
Os ´ıtens anteriores fazem referˆencia ao texto no buffer, dando a impress˜ao de que sempre trabalhamos
com apenas um buffer. Na verdade, o Emacs permite trabalharmos com v´arios buffers simultaneamente.
Cada buffer tem o seu pr´oprio nome, um arquivo (opcional) associado, e um bloco de texto. Possui
tamb´em um indicador de mudan¸ca, que ´e um “**” quando o texto sofre alguma modifica¸c˜ao, e “--”
quando o conte´udo do buffer ´e salvo no arquivo a ele associado. O Emacs sempre pedir´a confirma¸c˜ao
antes de executar um comando que possa causar a perda do texto modificado.
O combina¸c˜ao Ctrl-b ´e utilizada para alternarmos a edi¸c˜ao dos buffers abertos. Pressionando estas
teclas e informando o nome do buffer (nome do arquivo) desejado, fazemos com que o Emacs altere o
foco da edi¸c˜ao para o buffer especificado.
Gerenciamento de janela
O Emacs permite que haja m´ultiplas janelas na tela. Cada janela tem sua pr´opria linha de modo, sua
pr´opria posi¸c˜ao de cursor e seu pr´oprio buffer.
Ctrl-l Limpa a tela, e exp˜oe novamente todas as janelas. Isso ´e ´util se um erro encher de
lixo a tela. A linha do cursor ´e posicionada no centro da janela.
Ctrl-x 2 Comando b´asico para criar janelas. A janela corrente ´e particionada em duas. Cada
janela ir´a mostrar o mesmo buffer e dever´a ter ao menos trˆes linhas pois caso contr´ario
n˜ao haver´a espa¸co suficiente para duas linhas de texto e uma nova linha de modo.
Ctrl-x 1 Comando b´asico para destruir janelas. Todas as janelas, menos a corrente, s˜ao ex-
clu´ıdas da tela. A janela corrente preencher´a todo o espa¸co restante.
Ctrl-x o Move o cursor, circularmente, para o pr´oxima janela (other).
Ajuda
O Emacs possui documenta¸c˜ao on-line. Digitamos Ctrl-h para acessar as informa¸c˜oes de ajuda. Existem
trˆes op¸c˜oes de ajuda:
Ctrl-h k Este comando, seguido por qualquer tecla, informa como funciona a tecla digitada.
Ctrl-h b Imprime uma lista de teclas em outra janela.
Ctrl-h t Mostra o tutorial on-line que descreve como utilizar o Emacs.
Cap´ıtulo 8
Para saber mais
Eventualmente, vocˆe ter´a d´uvidas sobre assuntos dos quais esta apostila n˜ao trata. Encontrar informa¸c˜oes
sobre o Linux n˜ao ´e dif´ıcil, a menos que vocˆe n˜ao saiba onde e como procurar. Basta notar que o Linux
foi criado e desenvolvido na Internet. Logo, quase a totalidade de sua documenta¸c˜ao foi feita para ser
consultada on-line, pela Internet ou mesmo localmente. Mantendo isso em mente, suas buscas ter˜ao
muito mais sucesso. N˜ao se limite `a documenta¸c˜ao impressa.
Uma instala¸c˜ao padr˜ao do sistema Linux, geralmente, inclui toda a documenta¸c˜ao sob o diret´orio
/usr/doc. Vamos, ent˜ao, analisar os tipos de documentos informativos relacionados ao Linux e onde
encontr´a-los.
8.1 O Projeto de Documenta¸c˜ao do Linux
Uma das maiores fontes de informa¸c˜ao do mundo Linux ´e o Linux Documentation Project. O LDP ´e
respons´avel pelas p´aginas de manuais (man pages), um conjunto de livros sobre uma variedade de t´opicos
e uma ampla cole¸c˜ao de documentos HOWTO que abrangem centenas de t´opicos, com diferentes graus de
detalhismo. Os HOWTOs, em particular, est˜ao dispon´ıveis nos formatos impresso, hipertexto (HTML),
e texto puro.
A hierarquia de newsgroup Linux Usenet (comp.os.linux.*) tamb´em pode ser uma fonte muito ´util de
informa¸c˜oes para pessoas familiarizadas com o Usenet. Se vocˆe deseja acompanhar o progresso do Linux,
dˆe uma olhada em comp.os.linux.announce nas ´ultimas informa¸c˜oes da semana.
Como a maioria dos programas que s˜ao executados no Linux vˆem dos projetos GNU (Gnu is Not
Unix), BSD (Berkeley Software Distribution), e X (sistema de interface gr´afica), muito da documenta¸c˜ao
est´a dividida, tamb´em, entre estes. Por´em, tudo est´a dispon´ıvel em p´aginas man (man pages).
O LDP mant´em o site http://tldp.org/, que est´a espelhado (possui reprodu¸c˜oes) em centenas de outros
sites ao redor do mundo. Isso proporciona, a praticamente todas as pessoas, facilidade e rapidez de acesso
a esses documentos.
A maior parte da documenta¸c˜ao impressa relativa ao LDP ´e disponibilizada por v´arias editoras, sob
uma variedade de titulos. Linux Software Labs, Red Hat Software, e Yggdrasil s˜ao alguns dos maiores
distribuidores destes livros.
8.1.1 HOWTOs e mini-HOWTOs
A documenta¸c˜ao originada na Usenet freq¨uentemente ´e agrupada sob a forma de Frequently Asked Ques-
tions, os FAQs. Estes documentos possuem um formato pergunta-e-reposta que ´e muito apropriado ao
assunto espec´ıfico do qual tratam. Contudo, os FAQs n˜ao podem ser empregados em todos os tipos de
documenta¸c˜ao. Assim, o LDP estabeleceu um formato padr˜ao para documenta¸c˜ao narrativa, os chama-
dos documentos HOWTO. O nome vem do fato destes explicarem como (how to) fazer alguma coisa. Os
HOWTOs est˜ao dispon´ıveis nos formatos texto e hipertexto (HTML), dentre outros.
Existem tamb´em documentos extremamente simples, chamados mini-HOWTOs, que possuem apenas
algumas poucas p´aginas e geralmente descrevem um determinado t´opico.
Documentos HOWTO e mini-HOWTOs s˜ao encontrados, geralmente, sob o diret´orio /usr/doc/HOWTO.
61
8.1.2 Os livros LDP
Um dos primeiros projetos do LDP foi o de produzir livros totalmente voltados para o Linux. Esses
livros s˜ao destinados a usu´arios (Users’ Guide - Guia do Usu´ario), administradores de sistema (System
Administrators’ Guide - Guia do Administrador de Sistemas, Network Administrators’ Guide - Guia do
Administrador de Redes), al´em de um voltado a pragrama¸c˜ao do kernel (Kernel Hackers’ Guide). Todos
podem ser encontrados na p´agina do LDP na Internet (em algumas distribui¸c˜oes, em /usr/doc/LDP).
8.1.3 As p´aginas de manual
As p´aginas de manuais de referˆencia (man pages) podem ser acessadas com o comando “man”. Para
ler a p´agina sobre o pr´oprio comando man, basta digitar a seguinte linha de comando: “man man”. As
p´aginas man geralmente cont´em documenta¸c˜ao de referˆencia, n˜ao tutoriais, e s˜ao renomadas por serem
t˜ao sucintas que s˜ao, as vezes, dificilmente compreensiveis. No entanto, quando vocˆe precisar de material
de referˆencia, elas podem ser exatamente o que vocˆe precisa.
Trˆes programas podem ser usados para acessar man pages. O programa man mostra p´aginas indi-
viduais, e os comandos apropos e whatis procuram por uma palavra-chave no conjunto de man pages.
apropos e whatis examinam a mesma base de dados; a diferen¸ca ´e que whatis mostra apenas as linhas
que contˆem a palavra exata que vocˆe est´a procurando, e apropos mostra qualquer linha que cont´em a
palavra procurada. Isto ´e, se vocˆe est´a procurando pela palavra “man”, apropos encontrar´a “manual” e
“manipula¸c˜ao”, onde whatis procurar´a apenas por “man”, separada das outras palavras por espa¸cos em
branco ou pontua¸c˜ao, como em “man.config”. Esperimente os comandos “whatis man” e “apropos man”
para ver a diferen¸ca.
Muitas das man pages em um sitema Linux s˜ao parte de um grande pacote montado pelo LPD. Em
particular, as p´aginas da se¸c˜ao 2 (p´aginas para chamadas de sistema), se¸c˜ao 3 (para bibliotecas), se¸c˜ao 4
(para arquivos de dispositivos ou especiais) e a se¸c˜ao 5 (para formatos de arquivos) tˆem como principal
origem a cole¸c˜ao de man pages do LDP e s˜ao geralmente as p´aginas mais uteis para programadores. Se
vocˆe desejar especificar qual a se¸c˜ao a ser procurada, informe o n´umero da se¸c˜ao antes do nome da man
page que vocˆe deseja ler. Por exemplo, “man man” mostra a p´agina para o comando “man”, a partir da
se¸c˜ao 1; se vocˆe deseja ver a especifica¸c˜ao de como escrever man pages, vocˆe precisa especificar a se¸c˜ao 7
com o comando “man 7 man”.
Quando vocˆe precisar ler man pages, lembre-se de que muitas chamadas de sistema e fun¸c˜oes de
biblioteca usam o mesmo nome. Em muitos casos, vocˆe deseja obter informa¸c˜oes sobre fun¸c˜oes de
biblioteca, n˜ao sobre chamadas de sistemas que essas fun¸c˜oes podem utilizar. Lembre-se de usar “man 3”
mais o nome da fun¸c˜ao para obter a descri¸c˜ao de fun¸c˜oes de biblioteca, porque algumas fun¸c˜oes podem
ter o mesmo nome que chamadas de sistema da se¸c˜ao 2.
8.2 Encontrando programas para o Linux
Se vocˆe est´a com problemas para encontrar um programa do qual necessita, o Linux Software Map1
(LSM), ou Mapa de Software Linux, possui milhares de registros de pacotes de programas dispon´ıveis
para Linux. Esta base de dados inclui nomes, descri¸c˜oes, n´umero de vers˜oes, e localiza¸c˜ao dos pacotes.
aso vocˆe esteja precisando fazer o download da ´ultima vers˜ao de algum aplicativo espec´ıfico, expe-
rimente o site Freshmeat (http://unix.freshmeat.net/). Ele possue uma grande cole¸c˜ao de programas
constantemente atualizados, divididos em categorias. Para cada programa ´e atribu´ıda, ainda, uma nota.
Este site tamb´em disponibiliza distribui¸c˜oes inteiras para download.
8.3 Bookmarks
Al´em das fontes de documenta¸c˜ao j´a descritas, existem muitos outros sites interessantes e muito uteis,
mantidos, muitas vezes, por alguns dos milhares de f˜as do Linux. Existem tamb´em as listas de discuss˜oes,
al´em dos newsgroups que tamb´em podem ser grandes fontes de informa¸c˜ao. Abaixo est˜ao destacados
alguns dos endere¸cos eletrˆonicos que podem ser uteis a vocˆe:
1http://www.boutell.com/lsm/
http://freehelp.com.br/linux/
Esta ´e uma p´agina que cont´em uma manual bem pr´atico do linux, est´a dispon´ıvel em portuguˆes para
consultas on-line.
http://www.conectiva.com.br
Site da empresa Conectiva, respons´avel pela primeira distribui¸c˜ao nacional do sistema operacional Linux.
Nesta p´agina vocˆe pode encontrar as ´ultimas informa¸c˜oes sobre o Linux no Brasil, al´em de poder fazer o
download do manual Linux da Conectiva (em portuguˆes) ou do pr´oprio Linux.
http://linux-br.conectiva.com.br/
P´agina da lista de discuss˜ao linux-br onde vocˆe pode utilizar-se de um sistema de busca no hist´orico de
perguntas da lista, muito ´util como fonte de referˆencia.
socorro@inf.ufpr.br
Este e-mail est´a a disposi¸c˜ao de todos os alunos do curso. Sempre que vocˆe encontrar algum problema
ou tiver alguma d´uvida com rela¸c˜ao ao uso das m´aquinas dos laborat´orios, n˜ao tenha vergonha de us´a-lo.
http://pet.inf.ufpr.br
P´agina do PET-Inform´atica. Nela pode-se obter informa¸c˜oes sobre o grupo, cursos ofertados, al´em de
uma p´agina de dicas e apoio aos usu´arios.
Linux basico
Apˆendice A
Montando um sistema de arquivos
Antes de qualquer coisa ´e necess´ario entender que todos os arquivos acess´ıveis em um sistema Unix
est˜ao organizados em uma grande ´arvore. A hierarquia de arquivos nesta ´arvore ´e iniciada pelo raiz,
simbolizado como /. Estes arquivos podem estar distribu´ıdos por diversos dispositivos (discos r´ıgidos,
disquetes, CD-ROM’s s˜ao os exemplos mais comuns). Montar um sistema de arquivos significa incluir o
sistema de arquivos encontrado em algum dispositivo `a grande ´arvore de arquivos.
A.1 mount
O comando utilizado para montar um sistema de arquivos em um diret´orio qualquer ´e o mount.
Sintaxe: mount [op¸c~oes] <dispositivo> <diret´orio>
Op¸c˜ao Descri¸c˜ao
-a Monta todos os sistemas de arquivos encontrados no arquivo /etc/fstab.
-t Indica o tipo de sistema de arquivos a ser montado.
O exemplo abaixo torna acess´ıvel o sistema de arquivo encontrado no dispositivo /dev/fd0 (normal-
mente o disquete) no diret´orio /mnt/floppy.
$ mount /dev/fd0 /mnt/floppy
Abaixo um exemplo t´ıpico de montagem de uma parti¸c˜ao windows.
$ mount -t vfat /dev/hda1 /mnt/win
Observe que neste exemplo utilizou-se a op¸c˜ao -t para especificar o tipo de sistema de arquivos a ser
montado (no caso vfat, que se refere ao sistema de arquivos FAT 32 do windows).
O comando mount pode ser usado tamb´em para verificar os sistemas de arquivos atualmente montados
como no exemplo abaixo:
$ mount
A.2 umount
Usado para desmontar sistemas de arquivos.
Sintaxe: umount [op¸c~oes] <dispositivo/diret´orio>
Op¸c˜ao Descri¸c˜ao
-a Desmonta todos os sistemas de arquivos.
Para se desmontar todos os sistemas de arquivos montados:
$ umount -a
65
Para desmontar o sistema de arquivos encontrado no dispositivo /dev/hda1:
$ umount /dev/hda1
Pode-se tamb´em indicar apenas o diret´orio no qual se tem um sistema de arquivos montado, como no
exemplo abaixo:
$ umount /mnt
Apˆendice B
X-Windows
B.1 Introdu¸c˜ao
Relembrando, um sistema Linux ´e composto por um n´ucleo (kernel) e aplica¸c˜oes. Podemos separar estas
aplica¸c˜oes em utilit´arios do sistema (cp, ls, rm, etc) e aplicativos para usu´arios que podem utilizar ou
n˜ao a interface gr´afica. Por exemplo, o vi e emacs foram projetados originalmente para utilizar interface
em modo texto. J´a o aplicativo netscape foi projetado para utilizar apenas interface gr´afica.
O sistema X-Window, ou simplesmente X, ´e um sistema para suporte a interfaces gr´aficas que trabalha
de forma transparente sobre uma rede e ´e utilizado em diversas plataformas Unix. O X ´e distribu´ıdo
livremente e produzido por um grupo chamado X Consortium. Contudo, existem tamb´em outras vers˜oes,
comerciais. O X Window System ´e uma marca registrada de X Consortium Inc.
A fun¸c˜ao b´asica do X ´e fornecer uma interface para os dispositivos de entrada e sa´ıda do computador,
incluindo o monitor, o mouse, o teclado e a placa de v´ıdeo. ´E comum chamarmos o X de um servidor
gr´afico, pois ele mesmo n˜ao fornece aplicativos. Os aplicativos se utilizam dos servi¸cos por ele providos,
como controle do v´ıdeo, mouse e teclado.
Existem in´umeros programas que utilizam o X como servidor de interface, incluindo os gerenciadores
de janela, que constituem interfaces gr´aficas em que cada aplicativo ´e executado em um quadro, chamado
de “janela”.
Podemos identificar at´e aqui trˆes componentes necess´arios para uma aplica¸c˜ao gr´afica funcionar:
Servidor X: Seu papel ´e permitir que o gerenciador de janelas acesse todos os recursos da m´aquina
sem se preocupar com detalhes de controle de mouse, teclado e v´ıdeo. O mais admir´avel ´e que o
aplicativo n˜ao precisa saber tamb´em em que ponto da rede ele se encontra, pois pode-se executar
aplicativos em quaisquer pontos que o usu´ario tenha acesso e utiliz´a-lo no local (terminal gr´afico)
em que encontra. Vamos explicar isto com mais detalhes logo a seguir. Utilizando-se dos servi¸cos
disponibilizados pelo servidor X, os gerenciadores de janelas n˜ao precisam saber o modelo do mouse,
monitor ou placa de video. Isso facilita muito o desenvolvimento desses gerenciadores.
Gerenciador de janelas: Fornece a “aparˆencia” das janelas, entre outras fun¸c˜oes. ´E o gerenciador
quem define o formato dos bot˜oes, a cor das bordas das janelas, o comportamento das janelas,
como esconder, minimizar, maximizar. Controla tamb´em barras de rolagem e todos os detalhes que
uma aplica¸c˜ao gr´afica pode precisar.
Aplica¸c˜ao: A aplica¸c˜ao gr´afica tem somente o trabalho de utilizar os objetos prontos que o gerenciador
de janelas fornece. ´E importante que todas as aplica¸c˜oes tenham uma aparˆencia semelhante, pois
se cada aplica¸c˜ao utilizasse uma cor diferente ou bot˜oes com comportamentos diferentes, a interface
seria muito confusa para o usu´ario.
Os gerenciadores mais comuns s˜ao o Window Maker, Gnome e KDE .Ambos os gerenciadores est˜ao
dispon´ıveis para Linux e podem ser trocados apenas clicando-se o mouse em uma op¸c˜ao de gerenciador
de janelas. Note que n˜ao estamos falando em trocar configura¸c˜oes do gerenciador, mas trocar o pr´oprio
gerenciador de janelas. ´E semelhante a trocar a interface gr´afica do Microsoft Windows pela do OS/2
com apenas um clique de mouse e sem fechar o aplicativo que vocˆe estava utilizando! Outros detalhes
67
tamb´em podem mudar, principalmente quanto `a aparˆencia da ´area de trabalho, pois quem define isto ´e
tamb´em o gerenciador de janelas. Mas o funcionamento da aplica¸c˜ao continua o mesmo.
B.2 O servidor X-Window
Um grande diferencial do X ´e a possibilidade de utiliza¸c˜ao sobre uma rede local, possibilitando que
uma aplica¸c˜ao gr´afica seja executada em qualquer ponto da rede. O servidor X pode estar executando
na m´aquina local (porque ´e ele quem controla a m´aquina local), o gerenciador de janelas pode estar
executando em uma segunda m´aquina na rede e o aplicativo em uma terceira m´aquina. Como isto ´e
poss´ıvel?
O que torna isto poss´ıvel ´e a caracter´ıstica de servidor do X. Podemos dizer que ele utiliza uma arqui-
tetura cliente-servidor, mas somente no sentido de processamento gr´afico e n˜ao no sentido da aplica¸c˜ao,
pois qualquer aplica¸c˜ao pode ser executada sobre o X. O X ´e capaz de responder a servi¸cos simples,
como desenhar uma linha, um ponto colorido, mover uma regi˜ao de mem´oria, simular diversas “telas”
virtuais, entre outros servi¸cos. As aplica¸c˜oes gr´aficas fazem estes tipos de chamadas ao X e ´e ele quem
executa efetivamente o desenho de tais linhas e pontos, funcionando como um servidor gr´afico. Como
estas chamadas podem ser feitas de qualquer lugar da rede, qualquer aplica¸c˜ao pode mostrar a sua tela
em um servidor que lhe esteja atendendo.
Como o sistema X sempre se preocupou em utilizar a rede, existem diversas otimiza¸c˜oes para que
ela seja bem utilizada. O servidor mant´em informa¸c˜oes (o contexto) sobre um cliente para que n˜ao
seja necess´ario que este se identifique a cada chamada, simplificando o formato das chamadas. O X
procura tamb´em n˜ao perder as informa¸c˜oes atuais da aplica¸c˜ao, como a sua ´area de desenho, pois cada
vez que uma janela ´e movida seria necess´ario redesenh´a-la totalmente. Este “desenho” da aplica¸c˜ao fica
armazenado localmente at´e que ela mesma envie uma mensagem para redesenhar a sua ´area de desenho.
In´umeras outras otimiza¸c˜oes permitem que as aplica¸c˜oes utilizem bem a rede, sem sobrecarga do sistema
como um todo.
´E comum encontrarmos em universidades terminais gr´aficos cuja ´unica fun¸c˜ao ´e executar um servidor
X. Todas as demais aplica¸c˜oes s˜ao executadas em outras m´aquinas da rede, ficando o terminal gr´afico
respons´avel apenas por mostrar as telas dessas aplica¸c˜oes. Assim, o Linux e o servidor X possibilitam,
por exemplo, que aproveitemos um velho PC 486 como terminal gr´afico, cujas aplica¸c˜oes podem ser
executadas em um outro computador, com melhor performance (um Pentium, por exemplo). Tendo um
bom monitor de v´ıdeo, um bom teclado, um bom mouse e uma rede bem configurada, praticamente n˜ao
se nota que se est´a usando (em pleno ano 2000) um simples PC 486. Com outros sistemas operacionais,
este 486 seria certamente inutilizado. Este reaproveitamento de equipamento ´e mais um dos motivos que
vˆem fazendo com que, cada vez mais, empresas passem a adotar o Linux como sistema operacional.
B.3 Iniciando o X
A maneira padr˜ao para iniciar o X ´e atrav´es do comando startx. Tamb´em ´e poss´ıvel utilizar um login
gr´afico, que dispensa ao usu´ario a inicializa¸c˜ao manual do servidor gr´afico.
O comando startx abre um ambiente gr´afico – o X propriamente dito – e, em seuida, um gerenciador de
janelas ´e iniciado. A partir da´ı, o gerenciador de janelas ´e o respons´avel pelos comandos e os aplicativos
que o usu´ario executar.
Podemos alterar a resolu¸c˜ao da tela atrav´es das seguintes combina¸c˜oes de teclas:
Ctrl+Alt+“+” : aumenta a resolu¸c˜ao.
Ctrl+Alt+“–” : diminui a resolu¸c˜ao.
´E possivel tamb´em utilizar o console de modo texto e a interface gr´afica simultaneamente. Para isso,
usamos combina¸c˜oes que utilizam as teclas de fun¸c˜ao F1, F2, . . . , F12. Pressionando Ctrl+Alt+Fn,
onde Fn ´e uma das teclas de fun¸c˜ao, podemos visualizar os diferentes teminais do sistema. Geralmente,
existe apenas um terminal gr´afico e v´arios terminais texto. Podemos utilizar quantos desses terminais
desejarmos, bastando realizar o login em cada um deles e alternar o seu uso com Ctrl+Alt+Fn.
´Indice Remissivo
ajuda, 61
alias, 30
arquivos ocultos, 18, 28
arquivos, cria¸c˜ao, 17
arquivos, manipula¸c˜ao, 9
background, 42
bash logout, 34
bash profile, 34
bashrc, 30, 34
bg, 42
busca de arquivos, 46
cat, 17, 20, 34
cd, 12
chmod, 21
compacta¸c˜ao, 43
compara¸c˜ao de arquivos, strings, 39
cp, 18
df, 45
diff, 39
diret´orios, manipula¸c˜ao, 10
du, 45
echo, 30
emacs, 57, 58
Entradas e sa´ıdas, 34
export, 31
fg, 42
file, 19
filtros, 36, 39
find, 46
finger, 7
foreground, 42
gerenciadores de janelas, 67
grep, 39
groups, 7
gunzip, 43
gzip, 43
head, 20
hostname, 7
impress˜ao, 40
jobs, processos, 41
kill, 42
links, ln, 23
lpq, lpr, 40
ls, 11, 18, 20
m´ascaras de permissoes, 23
man, 39
metacaracteres, *, ?, 27
mkdir, 13
more, 20, 37
mount, 65
mv, 19
ordena¸c˜ao de arquivos, sort, 36
Pastas:
bin, 14
dev, 14
etc, 14, 15
home, 14
lib, 14
mnt, 14
proc, 15, 17
raiz, 14
sbin, 15
tmp, 15
usr, 15, 16
var, 15, 16
PATH, 31
pipes, , 37
processos, jobs, 41
ps, 42
pwd, 11
redirecionamentos, <, >, <<, >>, 36
renomear, 19
rm, 19
rmdir, 14
senha, mudan¸ca, 8
Servidor x, 67
sintaxe, 11
sort, 35
source, 34
split, 45
tail, 20
69
tar, 44
teclas de edi¸c˜ao, comando, 28
umask, 23
umount, 65
unalias, 30
vari´aveis de ambiente, 30
vari´aveis de prompt, 31, 33
vi, 49, 54
visualiza¸c˜ao de arquivos, 20
which, 46
who, 8
whoami, 7
Xterm, 67
xwindows, 67
zcat, 43

Mais conteúdo relacionado

PDF
Manual do Kile
PDF
Apostila ruby-completa
PDF
Apostila esssa
PDF
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
PDF
Php
PDF
Focalinux iniciante
PDF
Aprenda computaocompython
PDF
Apostila tex
Manual do Kile
Apostila ruby-completa
Apostila esssa
Ncl e Lua - desenvolvendo aplicações interativas para tv digital
Php
Focalinux iniciante
Aprenda computaocompython
Apostila tex

Mais procurados (15)

PDF
Foca linux 1
PDF
Abc do linux
PDF
Arquitetura computadores
PDF
Aprenda computação com python 3.0 (1)
PDF
Lpi 101
PDF
Hibernate reference pt-br
PDF
Material LINUX
PDF
Instalei o Ubuntu e agora? (18.04)
PDF
Algoritmos e programação
PDF
Algoritmos jabour
PDF
Apostila geo gebra
PDF
Installdebian
PDF
249371958 guia-seguranca-debian
PDF
Introdução às redes
Foca linux 1
Abc do linux
Arquitetura computadores
Aprenda computação com python 3.0 (1)
Lpi 101
Hibernate reference pt-br
Material LINUX
Instalei o Ubuntu e agora? (18.04)
Algoritmos e programação
Algoritmos jabour
Apostila geo gebra
Installdebian
249371958 guia-seguranca-debian
Introdução às redes
Anúncio

Destaque (20)

PDF
Apresentação so Educacional
PPTX
Sistema operacional linux
PPTX
Libre office
PDF
BR Office Writer na Educação
PPTX
Driving High Performance Coaching
DOCX
MARK ROBERTSON.Curriculum Vitae)
PDF
4. abril
PPTX
CIMMYT Ethiopia Technologies
PDF
Social Trends - The Service Context
PPTX
ハッカソン&コンテストで爆死した話 (2016年9月)
PPT
Números Enteros
PDF
Scrum Master Dojo @ Scrum Gathering Munich
ODP
SLIDE SOBRE O LIBREOFFICE
ODP
Slides Calc
PPT
Writer Atividade
PDF
Daly: Quality Assessments
PPTX
New from BookNet Canada: BNC CataList - Tech Forum 2016 - Carol Gordon
PDF
Apostila de-br office-writer
PDF
LibreOffice API について
Apresentação so Educacional
Sistema operacional linux
Libre office
BR Office Writer na Educação
Driving High Performance Coaching
MARK ROBERTSON.Curriculum Vitae)
4. abril
CIMMYT Ethiopia Technologies
Social Trends - The Service Context
ハッカソン&コンテストで爆死した話 (2016年9月)
Números Enteros
Scrum Master Dojo @ Scrum Gathering Munich
SLIDE SOBRE O LIBREOFFICE
Slides Calc
Writer Atividade
Daly: Quality Assessments
New from BookNet Canada: BNC CataList - Tech Forum 2016 - Carol Gordon
Apostila de-br office-writer
LibreOffice API について
Anúncio

Semelhante a Linux basico (20)

PDF
Livro Foca linux
PDF
Foca iniciante
PDF
Apostila linux francisco-araruna
PDF
Apostila
PDF
Enviando linux
PDF
Linux
PDF
Linux cursos
PDF
Linux basico
PDF
Linux basico
PDF
PDF
PDF
Editor de Textos vim
PDF
vimbook backup Livro de ajuda para o VIM
PDF
vimbook.pdf vimbook backup Livro de ajuda para o VIM
PDF
Começando com o Linux.pdf
PDF
Linux > GUIA FOCA-Linux. 1 of 3.
PDF
Linux iniciantes
PDF
Index
PDF
Shell script
Livro Foca linux
Foca iniciante
Apostila linux francisco-araruna
Apostila
Enviando linux
Linux
Linux cursos
Linux basico
Linux basico
Editor de Textos vim
vimbook backup Livro de ajuda para o VIM
vimbook.pdf vimbook backup Livro de ajuda para o VIM
Começando com o Linux.pdf
Linux > GUIA FOCA-Linux. 1 of 3.
Linux iniciantes
Index
Shell script

Mais de Tiago (20)

PDF
Programacao php moodle
PDF
Apostila cdtc dotproject
PDF
6572501 ldp-apostila-de-turbo-pascal
PDF
Guia rapido de_pascal
PDF
Python bge
PDF
Curso python
PDF
Curso python
PDF
Aula 01 python
PDF
Threading in c_sharp
PDF
Retirar acentos de_determinado_texto_em_c_sharp
PDF
Remover caracteres especiais_texto_em_c_sharp
PDF
Obter ip da_internet_em_c_sharp
PDF
Metodo using no_c_sharp
PDF
Introdução ao c# para iniciantes
PDF
Interfaces windows em c sharp
PDF
Filestream sistema arquivos
PDF
Curso linux professor rafael
PDF
Curso de shell
PDF
Controle lpt em_c_sharp
PDF
Classes csharp
Programacao php moodle
Apostila cdtc dotproject
6572501 ldp-apostila-de-turbo-pascal
Guia rapido de_pascal
Python bge
Curso python
Curso python
Aula 01 python
Threading in c_sharp
Retirar acentos de_determinado_texto_em_c_sharp
Remover caracteres especiais_texto_em_c_sharp
Obter ip da_internet_em_c_sharp
Metodo using no_c_sharp
Introdução ao c# para iniciantes
Interfaces windows em c sharp
Filestream sistema arquivos
Curso linux professor rafael
Curso de shell
Controle lpt em_c_sharp
Classes csharp

Último (20)

PDF
embriologia_animal_aula_share_2026_semestre
PPT
História e Evolução dos Computadores domésticos
PDF
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
PPTX
norma regulamentadora numero vinte nr 20
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPTX
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PPTX
biossegurança e segurança no trabalho (6).pptx
PPTX
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
Metabolismo_energético_3ano_pre_vest_2026.pdf
PPTX
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
PPTX
NR11 - Treinamento Direcao Defensiva - 2023.pptx
PDF
metabolismo energtico das clulas-131017092002-phpapp02.pdf
PPTX
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.
embriologia_animal_aula_share_2026_semestre
História e Evolução dos Computadores domésticos
ESPELHOS DA ALMA A PSICOLOGIA POR TRÁS DOS CONTOS DE FADAS.pdf
norma regulamentadora numero vinte nr 20
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
Revolução Industrial - Aula Expositiva - 3U4.pptx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
ELEMENTOS E FUNÇÕES DE LINGUAGEM (EMOTIVA, REFERENCIAL, CONATIVA, POÉTICA, FÁ...
Pedagogia em Ambientes Não Escolares.pptx
GUERRAFRIA.pptdddddddddddddddddddddddddx
Aula 13 - Tópico Frasal - Argumentação.pptx
biossegurança e segurança no trabalho (6).pptx
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
Trabalho Cidades sustentáveis ou Utopia.pptx
Metabolismo_energético_3ano_pre_vest_2026.pdf
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
NR11 - Treinamento Direcao Defensiva - 2023.pptx
metabolismo energtico das clulas-131017092002-phpapp02.pdf
Biologia celular: citologia, é o estudo da célula, a unidade básica da vida.

Linux basico

  • 1. LINUX B´ASICO PET Computa¸c˜ao – UFPR vers˜ao 1.2 – Outubro 2005
  • 3. Sum´ario 1 Introdu¸c˜ao ao sistema operacional Linux 1 1.1 Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 A hist´oria do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Caracter´ısticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Como ´e o Linux 5 2.1 Ligando seu computador com o Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Conta de usu´ario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3 Conectando-se ao sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.4 Primeiros passos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.1 Quem sou eu? Onde estou? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.4.2 Mudan¸ca de Senha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.5 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 3 Conceitos b´asicos 9 3.1 Arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.3 Sintaxes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.4 Manipulando diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.4.1 Criando e removendo diret´orios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.4.2 A ´arvore de diret´orios do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.5 Manipulando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.5.1 Criando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.5.2 Arquivos ocultos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5.3 Copiando arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 3.5.4 Mudando o nome e o lugar de arquivos e diret´orios . . . . . . . . . . . . . . . . . . 19 3.5.5 Removendo arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5.6 Verificando o tipo de arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.5.7 Vendo o conte´udo de arquivos texto . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6 Permiss˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6.1 Os tipos de permiss˜oes de acesso . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.6.2 Alterando permiss˜oes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.6.3 Usando valores octais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.6.4 Estabelecendo as permiss˜oes padr˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.7 Links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.8 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4 Bash 27 4.1 Expans˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.1 Metacaracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 4.1.2 Edi¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 4.2 Aliases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3 Vari´aveis de ambiente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4.3.1 Vari´aveis de Prompt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 4.3.2 Outras vari´aveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 i
  • 4. 4.4 Arquivos .bash profile, .bash logout e .bashrc . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.5 Redirecionando entradas e sa´ıdas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.5.1 Redirecionamentos destrutivo e n˜ao-destrutivo . . . . . . . . . . . . . . . . . . . . 36 4.5.2 Usando Pipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.6 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 5 Comandos avan¸cados 39 5.1 Filtros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.1 diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.1.2 grep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 5.2 Manipula¸c˜ao da fila de impress˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.2.1 lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.2.2 lpq . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5.2.3 lprm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3 Gerˆencia de processos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3.1 ps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3.2 kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.3.3 Foreground e Background . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 5.4 Compacta¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.4.1 gzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.4.2 zcat e gunzip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 5.4.3 tar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 5.5 Comandos ´uteis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.5.1 split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.5.2 df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.5.3 du . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 5.6 Comandos de Busca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.6.1 find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.6.2 which . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 5.7 Exerc´ıcios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6 Editor vi 49 6.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 6.2 In´ıcio do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.3 Inser¸c˜ao de texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 6.4 Apagando textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 6.5 Alterando textos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.6 Comandos de movimenta¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.7 Salvando arquivos e saindo do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 6.8 Editando outro arquivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.9 Incluindo outros arquivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.10 Mudando de janela dentro do VI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 6.11 Executando comandos shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 6.12 Resumo dos principais comandos do vi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7 Emacs 57 7.1 Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.2 Layout da tela . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.3 Linha de modo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57 7.4 Linha de eco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 7.5 Comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
  • 5. 8 Para saber mais 61 8.1 O Projeto de Documenta¸c˜ao do Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.1.1 HOWTOs e mini-HOWTOs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.1.2 Os livros LDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.1.3 As p´aginas de manual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.2 Encontrando programas para o Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.3 Bookmarks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 A Montando um sistema de arquivos 65 A.1 mount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 A.2 umount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 B X-Windows 67 B.1 Introdu¸c˜ao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 B.2 O servidor X-Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 B.3 Iniciando o X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
  • 7. Cap´ıtulo 1 Introdu¸c˜ao ao sistema operacional Linux Um Sistema Operacional (SO) ´e, basicamente, um conjunto de programas cuja fun¸c˜ao ´e gerenciar todos os recursos disponibilizados por um ou mais computadores. Assim, os programas (aplicativos) interagem com os usu´arios utilizando-se destes recursos. Entre as tarefas realizadas por um SO podemos citar: • Controlar os v´arios dispositivos eletrˆonicos ligados ao computador, tais como discos, impressoras, mem´oria, etc. • Compartilhar o uso de tais dispositivos e demais servi¸cos entre v´arios usu´arios ou programas como por exemplo arquivos ou impressoras em uma rede. • Fornecer controle de acesso e seguran¸ca aos recursos do sistema. Os primeiros computadores desenvolvidos eram m´aquinas muito simples e por isto n˜ao possu´ıam um SO. Devido a esse fato, as tarefas que hoje s˜ao feitas pelos SO’s eram deixadas a cargo do programador, o que mostrava-se muito desconfort´avel. Atualmente, uma m´aquina sem um SO ´e inconceb´ıvel. Entre os mais utilizados hoje em dia, podemos citar: MS-DOS, Windows (95, 98, NT), Unix, Mac-OS e, claro, o Linux. 1.1 Linux O que quer dizer Linux? Uma defini¸c˜ao t´ecnica seria: Linux ´e um kernel de sistema operacional de livre distribui¸c˜ao, gratuito, semelhante ao Unix. O kernel, ou n´ucleo, ´e a parte do SO respons´avel pelos servi¸cos b´asicos e essenciais dos quais as fer- ramentas de sistema e os aplicativos se utilizam. Entretanto, a maioria das pessoas usa o termo Linux para se referir a um SO completo, baseado no kernel Linux. Assim chegamos a uma outra defini¸c˜ao: Linux ´e um sistema operacional de livre distribui¸c˜ao, semelhante ao Unix, constitu´ıdo por um kernel, ferramentas de sistema, aplicativos e um completo ambiente de desenvolvimento. Outro termo muito empregado ´e distribui¸c˜ao, que consiste em um kernel Linux e uma cole¸c˜ao de aplicativos e ferramentas de sistema. Existem v´arias distribui¸c˜oes do Sistema Operacional Linux e a dife- ren¸ca entre cada uma delas encontra-se no conjunto de aplicativos e ferramentas de sistema, no programa de instala¸c˜ao, na documenta¸c˜ao e, por fim, na vers˜ao do kernel Linux. Dentre as principais distribui¸c˜oes Linux, podemos citar Red Hat, Debian, Slackware, Caldera e Conectiva, sendo esta ´ultima uma distri- bui¸c˜ao brasileira1 que possui todos os m´odulos de instala¸c˜ao e toda a documenta¸c˜ao em portuguˆes. O Linux ´e o resultado do trabalho de milhares de colaboradores, universidades, empresas de software e distribuidores ao redor do mundo. Aliado a isso, o fato de ser um sistema aberto, de livre distribui¸c˜ao, vem 1http://www.conectiva.com.br 1
  • 8. proporcionando ao Linux um r´apido desenvolvimento e uma ´agil atualiza¸c˜ao de softwares. A maior parte do seu desenvolvimento ´e feita sob o projeto GNU2 da Free Software Foundation, o que torna obrigat´orio a distribui¸c˜ao de todo o seu c´odigo fonte. Assim, qualquer pessoa pode fazer as modifica¸c˜oes que lhe forem convenientes, al´em de acrescentar melhorias aos softwares que seguem essa linha de desenvolvimento. A ´unica exigˆencia ´e que o c´odigo alterado permane¸ca de dom´ınio p´ublico. Antes de iniciarmos o nosso estudo sobre o Linux, ´e necess´ario conhecer um pouco mais sobre sua origem. 1.2 A hist´oria do Linux O kernel do Linux foi originalmente escrito por Linus Torvalds, do Departamento de Ciˆencia da Com- puta¸c˜ao da Universidade de Helsinki, Finlˆandia, com a ajuda de v´arios programadores volunt´arios atrav´es da Internet. Linus Torvalds iniciou o kernel como um projeto particular, inspirado em seu interesse no Minix, um pequeno sistema Unix desenvolvido por Andy Tannenbaum. Ele se limitou a criar, em suas pr´oprias palavras, “a better Minix than Minix”3 . Ap´os trabalhar sozinho por algum tempo em seu projeto, ele enviou a seguinte mensagem para o newsgroup comp.os.minix: Vocˆe est´a ansioso por melhores dias do Minix 1.1, quando homens ser˜ao homens e escre- ver˜ao seus pr´oprios “drivers” de dispositivo? Vocˆe est´a sem um bom projeto e ansioso para come¸car a trabalhar em um S.O. o qual vocˆe possa modificar de acordo com suas necessidades? Vocˆe fica frustrado quando tudo funciona em Minix? Chega de atravessar noites para obter programas que executam corretamente? Ent˜ao esta mensagem pode ser exatamente para vocˆe. Como eu mencionei h´a um mˆes atr´as, estou trabalhando em uma vers˜ao independente de um S.O. similar ao Minix para computadores AT386. Ele est´a, finalmente, pr´oximo do est´agio em que poder´a ser utilizado (embora possa n˜ao ser o que vocˆe esteja esperando), e eu estou disposto a colocar os fontes para ampla distribui¸c˜ao. Ele est´a na vers˜ao 0.02... contudo obtive sucesso executando bash, gcc, gnu-make, gnu-sed, compress˜ao, etc. nele. No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira vers˜ao “oficial” do Linux, que recebeu vers˜ao do kernel 0.02. Desde ent˜ao muitos programadores tˆem respondido ao seu chamado, e tˆem ajudado a fazer do Linux o sistema operacional que ´e hoje. 1.3 Caracter´ısticas O Linux ´e um sistema operacional livre, gratuito e possui todas as caracter´ısticas presentes nos sistemas operacionais modernos. Eis algumas destas: Multiplataforma: O Linux opera em computadores das fam´ılias Intel (386, 486, Pentium, etc) e com- pat´ıveis (Cyrix e AMD), Motorola M680xx (Atari, Amiga e Macintosh), Alpha (DEC), Sparc (Sun), MIPS (Silicon Graphics) e Power PC. Novas arquiteturas est˜ao sendo incorporadas com o seu de- senvolvimento. Multiprocessado: Possui suporte a computadores com mais de um processador. Multitarefa: V´arios programas podem ser executados ao mesmo tempo. Multiusu´ario: V´arios usu´arios podem operar a m´aquina ao mesmo tempo. Al´em destas, o Linux apresenta ainda mem´oria virtual, bibliotecas compartilhadas (de liga¸c˜ao dinˆamica), carregamento de drivers (m´odulos) sob demanda, suporte nativo a redes TCP/IP, f´acil integra¸c˜ao com outros sistemas operacionais e padr˜oes de rede, nomes longos de arquivos, prote¸c˜ao de acesso a recursos compartilhados, suporte a v´arios idiomas e conformidade com padr˜oes internacionais. Existem ainda v´arios ambientes gr´aficos que se utilizam do mouse, ´ıcones e janelas (semelhantemente ao Windows) ao inv´es das famigeradas linhas de comando. 2http://www.gnu.org 3“Um Minix melhor que o Minix.”
  • 9. O Linux ´e um sistema operacional bastante atrativo n˜ao apenas por ser gratuito mas por outros motivos tamb´em. O fato de ser baseado nos sistemas operacionais Unix – sistemas considerados maduros, com mais de duas d´ecadas de desenvolvimento – contribuiu muito para a sua estabilidade e confiabilidade. Isto ´e, um Linux configurado corretamente n˜ao “trava”. Chegamos ent˜ao a outro fator muito importante em favor do sistema: o fato de poder ser configurado e adaptado segundo a necessidade de cada um (apesar de, muitas vezes, isso n˜ao ser uma tarefa simples). Muitos j´a devem ter ouvido algu´em dizer: “O meu Linux ´e melhor que o seu!” Al´em disso, pode-se instalar num computador o Linux juntamente com outro sistema operacional. Por exemplo, pode-se instalar Linux em uma m´aquina que j´a contenha Windows e utilizar os dois sistemas, sem que nenhum dado seja perdido. Ou seja, o Linux consegue acessar todos os arquivos usados no Windows.
  • 11. Cap´ıtulo 2 Como ´e o Linux 2.1 Ligando seu computador com o Linux Quando vocˆe liga seu computador, este realiza alguns testes e ent˜ao come¸ca a executar o sistema opera- cional. No Linux, a primeira parte do sistema a ser carregada na mem´oria e executada ´e o kernel. Este, ent˜ao, detecta e configura os dispositivos eletrˆonicos conectados ao computador. Ap´os isso, alguns pro- gramas de sistema que prestam servi¸cos b´asicos, como acesso `a rede, s˜ao tamb´em inicializados. Ao longo deste processo, o qual recebe o nome de boot do sistema, ou simplesmente boot, v´arias mensagens s˜ao arquivadas e mostradas na tela para informar ao administrador do sistema do sucesso ou falha nesta opera¸c˜ao. Ap´os o boot, uma mensagem de sauda¸c˜ao1 seguida da palavra login aparece no v´ıdeo: Bem-vindo ao sistema Linux 2.2.10 login: Chegando a esse est´agio, o sistema aguarda a conex˜ao (login) de um usu´ario previamente cadastrado. 2.2 Conta de usu´ario Para realizar o seu login, ´e necess´ario que o usu´ario possua uma conta v´alida na m´aquina em quest˜ao (para obter uma conta, procure o administrador do sistema). Uma conta nada mais ´e que um cadastro eletrˆonico que indica quem s˜ao as pessoas aptas a utilizar o sistema. Esse cadastro cont´em as seguintes informa¸c˜oes: N´umero de identifica¸c˜ao: N´umero inteiro ´unico para cada usu´ario do sistema, tal como um RG ou CPF. Tamb´em denominado user id ou UID (user identification), serve para identificar cada um dos usu´arios; Nome de usu´ario: Tamb´em ´unico para cada usu´ario, ´e formado por apenas uma palavra, sem espa¸cos em branco, e possui a mesma utilidade que o UID. A diferen¸ca est´a no fato de que enquanto a m´aquina trabalha melhor com n´umeros (UIDs), n´os humanos – e tamb´em o administrador do sistema – nos sa´ımos melhor com nomes. Este campo tamb´em recebe a denomina¸c˜ao de username ou login; Identifica¸c˜ao de grupo: Um grupo agrega usu´arios que realizam tarefas semelhantes ou que possuem permiss˜oes de acesso semelhantes. O group id (GID) ´e o n´umero inteiro que identifica o grupo ao qual o usu´ario pertence2 ; Senha: Constitui o mecanismo de seguran¸ca de acesso `a conta do usu´ario; Nome completo: Nome completo do usu´ario ou descri¸c˜ao da finalidade da conta; 1Esta mensagem pode ser alterada, pois muito do Linux ´e configur´avel. 2Cada usu´ario pode fazer parte de v´arios grupos. 5
  • 12. Diret´orio pessoal: Tamb´em denominado diret´orio home, ´e o diret´orio pessoal do usu´ario e reservado para que este armazene os seus arquivos; A ´ultima informa¸c˜ao contida neste cadastro ´e o nome do programa executado quando o usu´ario se conecta ao sistema. Geralmente ´e o nome de um tipo interpretador de comandos. Um programa interpretador de comandos (shell) fornece uma interface (meio de comunica¸c˜ao) simples entre o usu´ario e o computador. Como um int´erprete que fica entre duas pessoas que falam l´ınguas diferentes, o shell situa-se entre o usu´ario e o kernel. Ele “diz” ao kernel para fazer o trabalho que o usu´ario solicitou, eliminando a necessidade deste ´ultimo ter que falar diretamente com o kernel em uma linguagem que ele entenda. O shell tamb´em ´e uma linguagem de programa¸c˜ao completa. Possui vari´aveis, constru¸c˜oes condicionais e interativas, e ambiente adapt´avel ao usu´ario. Existem v´arios tipos de shells sendo que os mais conhecidos s˜ao o Bourne Again Shell (bash) e o C Shell (csh). O shell preferido varia de usu´ario para usu´ario. Alguns preferem a sintaxe com caracter´ısticas mais avan¸cadas do bash enquanto que outros preferem a sintaxe mais estruturada do csh3 . No cap´ıtulo 4 veremos mais detalhes do bash. 2.3 Conectando-se ao sistema A partir do momento em que o usu´ario obt´em uma conta, ele j´a pode se conectar (“logar”) no sistema. O processo de “login” ´e simples. Na tela da mensagem de sauda¸c˜ao, ap´os a palavra “login”, o usu´ario deve digitar o seu nome de usu´ario (username ou login), fornecido pelo administrador, e pressionar a tecla ENTER (ou RETURN): Bem-vindo ao sistema Linux 2.2.10 login: joao Password: O sistema aguardar´a, ent˜ao, que o usu´ario digite a sua senha4 (password) e pressione ENTER. Enquanto o usu´ario digita a senha, os caracteres que constituem-na n˜ao aparecem na tela por motivo de seguran¸ca. Fornecida a senha, o sistema consultar´a o cadastro de usu´arios procurando pelo nome de usu´ario fornecido para ent˜ao conferir a validade da senha digitada. Caso esta n˜ao seja a mesma do cadastro ou o nome de usu´ario fornecido n˜ao seja encontrado, uma mensagem de login inv´alido ser´a mostrada e o processo ser´a reiniciado: Bem-vindo ao sistema Linux 2.2.10 login: joao Password: Login incorrect login: Se o nome de usu´ario (login) e senha forem v´alidos, o sistema inicilizar´a a execu¸c˜ao de um interpretador de comandos ou de um ambiente gr´afico e o usu´ario poder´a utilizar os aplicativos e os recursos computacionais disponibilizados pela m´aquina. O processo de login ter´a sido conclu´ıdo com sucesso se o usu´ario estiver vendo na tela o prompt do shell, em geral um “$”5 . Quando o usu´ario terminar o seu trabalho, ´e muito importante que este realize o processo de desco- nex˜ao. Por motivos de seguran¸ca, nunca se deve abandonar a m´aquina com uma conta “aberta”. Para realizar o processo de desconex˜ao basta digitar logout e pressionar ENTER. $ logout Bem-vindo ao sistema Linux 2.2.10 login: 3Entretanto, para o uso de comandos mais comuns o tipo de shell usado n˜ao importa, pois a sintaxe ´e basicamente a mesma e as diferen¸cas s´o come¸cam a aparecer em aplica¸c˜oes mais avan¸cadas. 4A princ´ıpio, o usu´ario recebe uma senha criada pelo administrador do sistema. Contudo, est´a senha pode ser alterada pelo pr´oprio usu´ario. 5Como quase tudo no Linux, o prompt pode ser configurado. Veremos como fazer isso na se¸c˜ao 4.3.1
  • 13. Para realizar o processo de desconex˜ao no modo gr´afico, clique com o bot˜ao direito do mouse sobre qualquer ´area e escolha a op¸c˜ao Window Manager e em seguida Exit. A mensagem de sauda¸c˜ao aparece novamente, deixando a sistema dispon´ıvel para outro usu´ario. No pr´oximo cap´ıtulo, veremos o que podemos fazer uma vez “logados” no sistema. 2.4 Primeiros passos Obtido sucesso no processo de login, o sistema executar´a o interpretador de comandos do usu´ario ou um ambiente gr´afico. No modo gr´afico os comandos ser˜ao digitados em um emulador de terminal. Cada ambiente possui um processo para a abertura. No Window Maker basta apertar o bot˜ao direito do mouse sobre qualquer ´area da tela e escolher no menu a op¸c˜ao XShells e em seguida XTerm. No modo texto, na tela ser´a mostrando o prompt, indicando que o usu´ario j´a pode digitar um comando: $ O prompt pode ser constitu´ıdo ainda de informa¸c˜oes como nome de usu´ario, nome da m´aquina, diret´orio que em o usu´ario est´a trabalhando, etc. . . Na se¸c˜ao tian van Kaick≪vankaick@hotmail.com¿refvarprompt veremos como configur´a-lo. Por hora, adotaremos apenas o cifr˜ao ($). Ao se digitar um comando e teclar ENTER, o interpretador executar´a esse comando. A seguir veremos como descobrir quais informa¸c˜oes o sistema cont´em sobre a conta do usu´ario e sobre a m´aquina. 2.4.1 Quem sou eu? Onde estou? O comando whoami6 mostra o nome do usu´ario associado com a conta em uso. Por exemplo, caso o usu´ario joao execute esse comando, “joao” ser´a mostrado na tela seguido de um novo prompt: $ whoami joao $ O comando hostname informa o nome da m´aquina que o usu´ario est´a operando. No exemplo abaixo, a m´aquina chama-se “cerebro”: $ hostname cerebro $ O comando groups ´e usado para mostrar os grupos de usu´arios aos quais este usu´ario pertence. No exemplo abaixo, tais grupos s˜ao “estudantes” e “projeto”. $ groups estudantes projeto $ Para obter v´arias informa¸c˜oes sobre a conta de um usu´ario qualquer – com exce¸c˜ao, evidentemente, da senha – usa-se o comando finger. Este comando requer como parˆametro o login de um usu´ario. $ finger joao Login: joao Name: Jo~ao da Silva Directory: /home/joao Shell: /bin/bash Last login Wed Aug 25 17:05 on tty1 No mail. No Plan. $ 6“Who am I ?” ou “Quem sou eu?”
  • 14. 3 Neste exemplo, as informa¸c˜oes sobre o usu´ario joao s˜ao solicitadas. Como resposta, recebemos o seu nome de usu´ario (login), nome completo, o seu diret´orio pessoal (onde est˜ao os seus arquivos) e o interpretador de comandos por ele utilizado. Al´em destas informa¸c˜oes, contidas no cadastro, tamb´em s˜ao mostrados outros dados, como a ´ultima vez em que ele se conectou ao sistema, informa¸c˜ao sobre a leitura de e-mail por parte deste usu´ario e, por ´ultimo, alguma mensagem que o usu´ario possa ter deixado em um arquivo chamado .plan de seu diret´orio. O comando who mostra todos os usu´arios que est˜ao usando o sistema no momento. Por exemplo: $ who root tty1 Aug 25 12:36 joao tty2 Aug 25 10:20 paulo tty3 Aug 25 11:15 juca tty4 Aug 25 9:37 $ A primeira coluna indica os nomes de login dos usu´arios. As outras indicam, respectivamente, o terminal, a data e o hor´ario no qual cada usu´ario se conectou. No exemplo acima, est˜ao usando o sistema, al´em de joao, os usu´arios root, paulo, juca. Em todos os sistemas Linux, root ´e o nome de usu´ario dado ao administrador do sistema. 2.4.2 Mudan¸ca de Senha Um dos primeiros passos para que o sistema se adapte ao usu´ario ´e a mudan¸ca da senha de login. Para isto usa-se o comando yppasswd. ´E importante lembrar que a senha deve conter tanto caracteres mai´usculos quanto min´usculos. $ yppasswd Please enter old password: Please enter new password: Please retype your new password: The password had been changed. $ Vale destacar tamb´em que, em Linux, os caracteres da senha n˜ao aparecem em forma de * como normalmente, portanto deve-se redobrar a aten¸c˜ao ao digitar-se a senha. 2.5 Exerc´ıcios 1. Execute o comando who e utilize o finger com cada um do nomes de usu´arios que o primeiro comando lhe mostrar. 2. Descubra para cada usu´ario, visto no exerc´ıcio anterior, a quais grupos eles pertencem. 3. Experimente o comando “w” e descubra a sua utilidade.
  • 15. Cap´ıtulo 3 Conceitos b´asicos Antes de prosseguirmos com outros comandos, o conhecimento de alguns conceitos b´asicos, tais como arquivos e diret´orios, se faz necess´ario. Retorne a este cap´ıtulo sempre que tiver d´uvidas pois os conceitos aqui apresentados s˜ao de grande importˆancia para o entendimento do resto do conte´udo da apostila. 3.1 Arquivos Um arquivo representa um conjunto de informa¸c˜oes e ´e a unidade m´ınima de armazenamento de dados, quer seja em disco ou fita magn´etica. Ou seja, qualquer tipo de informa¸c˜ao (texto, imagem, som, etc. . . ) armazenada em um destes tipos de dispositivo eletrˆonico estar´a na forma de um ou mais arquivos. Cada arquivo possui, entre outras propriedades, um nome que o identifica e um tamanho que indica o n´umero de caracteres (bytes) que ele cont´em. Abaixo est˜ao alguns exemplos de nomes de arquivos: carta Carta arquivo1 videoclip.mpg musica.mp3 copia_de_seguranca.tar.gz linux-2.2.13-SPARC.tar.gz O Linux distingue letras mai´usculas de min´usculas. Assim, os dois primeiros exemplos, carta e Carta, constituem nomes de arquivos diferentes. O Linux tamb´em permite que nomes de arquivos sejam longos, com at´e mais de uma centena de caracteres. Como se pode notar, alguns dos nomes dos arquivos acima possuem um ou mais pontos (“.”). A seq¨uˆencia de caracteres, ap´os o ´ultimo ponto no nome do arquivo, ´e denomidada extens˜ao do arquivo e indica a natureza de seu conte´udo ou o aplicativo com o qual ele ´e utilizado. Arquivos n˜ao precisam, obrigatoriamente, possuir uma extens˜ao em seu nome. Isto ´e apenas uma conven¸c˜ao feita por usu´arios e desenvolvedores de aplicativos para facilitar a identifica¸c˜ao do conte´udo contido em um arquivo. Imagine um usu´ario tentando abrir um arquivo de som em um processador de texto. Certamente n˜ao conseguiria. ´E justamente para evitar esses enganos que as extens˜oes de arquivo s˜ao utilizadas. Por´em, nada impede que o nome de um arquivo n˜ao tenha nenhuma extens˜ao. A seguir temos algumas extens˜oes de arquivos muito comuns de serem encontradas: txt Indica que o arquivo cont´em apenas texto (ASCII); bak Indica que se trata de um arquivo de c´opia de seguran¸ca (backup); old Arquivo cujo conte´udo fora atualizado e gravado em outro arquivo; jpg Arquivo que cont´em uma imagem em formato jpeg; mp3 Arquivo de som; html Arquivo contendo hipertexto, que ´e encontrado nas p´aginas da Internet. 9
  • 16. Existe uma enorme variedade de extens˜oes de arquivos. Deve-se lembrar que as extens˜oes s˜ao apenas uma conven¸c˜ao e n˜ao constituem uma regra. Assim, nada impede um usu´ario de dar uma extens˜ao txt (arquivo de texto) a um arquivo que contenha uma imagem. Apesar de isso n˜ao ser muito aconselh´avel – pois ele mesmo pode se confundir – a imagem pode ser visualizada normalmente, bastando-se utilizar o aplicativo correto, ou seja, aquele que interprete o conte´udo do arquivo como sendo dados de uma imagem. 3.2 Diret´orios Um segundo conceito importante ´e o de diret´orio, muitas vezes tamb´em denominado pasta. Realmente, um diret´orio ´e muito semelhante a uma pasta de escrit´orio: ´e utilizado para se agrupar v´arios arquivos. Cada diret´orio ´e identificado por um nome, da mesma forma que arquivos1 . Extens˜oes podem ser utilizadas, mas geralmente n˜ao o s˜ao. Um diret´orio pode conter ainda, al´em de arquivos, outros diret´orios, que por sua vez tamb´em podem conter arquivos e diret´orios. Assim, surgem as hierarquias de diret´orios ou ´arvores de diret´orios. O diret´orio no topo de qualquer hierarquia de diret´orios, e que cont´em todos os outros diret´orios, ´e denominado diret´orio raiz e, ao inv´ez de um nome, ´e identificado pelo s´ımbolo “/” (barra). Assim, para identificar um diret´orio precisamos al´em do seu nome, os nomes de todos os diret´orios que o contˆem, at´e chegarmos ao diret´orio raiz. A figura acima mostra uma ´arvore de diret´orios2 . Na figura, o diret´orio /home cont´em os subdiret´orios ftp, rildo, e julius; /dev cont´em fd0 e cua0; /usr cont´em bin, lib, man e local. Abaixo temos alguns exemplos do que ´e chamado de caminho absoluto de diret´orio, ou seja, especifica¸c˜ao do caminho desde o diret´orio raiz: / /etc /home/ftp /home/julius /proc /usr/local /usr/bin S˜ao esses caminhos que identificam um diret´orio em uma hierarquia de diret´orios. Para identificarmos um arquivo, informamos a identifica¸c˜ao do diret´orio que o cont´em, seguido do nome deste arquivo. Por exemplo: /home/julius/relatorio.txt /usr/local/musica.mp3 /etc/servidores.bak /carta.txt Dependendo do shell utilizado, podemos evitar ter que escrever o caminho absoluto dos arquivos. O interpretador de comandos bash, por exemplo, nos permite as seguintes substitui¸c˜oes: 1No Linux, um diret´orio ´e, na verdade, um tipo especial de arquivo. 2Os nomes dos arquivos contidos em cada diret´orio n˜ao s˜ao mostrados.
  • 17. . O caracter “ponto” representa o diret´orio corrente, ou seja, aquele em que estamos trabalhando; .. A seq¨uˆencia “ponto ponto”, sem espa¸cos em branco intermedi´arios, identifica o diret´orio “pai” do diret´orio corrente, ou seja, aquele no qual o diret´orio corrente est´a contido; ˜ O caracter “til” representa o diret´orio pessoal (home) do usu´ario; ~login representa o diret´orio pessoal do usu´ario identificado por “login”. 3.3 Sintaxes Antes de abordarmos os primeiros comandos, vamos entender como a sintaxe destes ´e apresentada nas documenta¸c˜oes existentes. Uma sintaxe de comando explica a forma geral de um comando – seu nome, os argumentos que recebe e op¸c˜oes. Vamos analisar ent˜ao a sintaxe abaixo: <nome do comando> {a,b,c} [<op¸c~oes>] [<argumentos>] Os s´ımbolos <, >, [, ], { e } s˜ao usados apenas para explicar a sintaxe dos comandos, seguindo uma conven¸c˜ao. N˜ao ´e necess´ario digit´a-los. O texto entre os s´ımbolos < e > constitui uma descri¸c˜ao do que deve ser digitado. Assim, o exemplo acima informa que a linha de comando come¸ca com o nome do comando a ser executando, n˜ao sendo necess´ario digitar os caracteres < e >. As chaves ({ e }) indicam os valores que podem ser usados em determinado campo do comando. Os colchetes ([ e ]) servem para informar que todo o conte´udo entre eles ´e opcional, isto ´e, pode ser omitido. Conforme os comandos forem sendo apresentados essas regras ficar˜ao mais claras. Em muitos exemplos desta apostila, ser´a empregado o s´ımbolo “#” para acrescentar coment´arios dos autores ao texto mostrado na tela do computador. Este s´ımbolo e o texto `a sua direita indicam observa¸c˜oes usadas para melhor explicar comandos e demais t´opicos. Tais observa¸c˜oes n˜ao s˜ao mostrados na tela do computador. 3.4 Manipulando diret´orios Ap´os o processo de login, o shell acessar´a automaticamente o diret´orio pessoal do usu´ario, onde est˜ao os seus arquivos. Como j´a vimos, o diret´orio pessoal ´e defindo pelo administrador do sistema e aparece na sa´ıda do comando finger (se¸c˜ao 2.4.1). Para confirmar o nome do diret´orio de trabalho, usa-se o comando pwd (Print name of Working Directory): $ pwd /home/joao $ Note que pwd sempre informa o nome do diret´orio de trabalho. No exemplo acima, tal diret´orio coincide com o diret´orio pessoal de Jo˜ao da Silva, pois este acaba de efetuar o login no sistema. Para listar o conte´udo de um diret´orio (mostrar os nomes dos arquivos e diret´orios nele contidos) usamos o comando ls (list): $ ls Mail Mailbox artigos cartas $ Podemos ver aqui que Jo˜ao possui quatro itens em seu diret´orio pessoal. Cada um desses itens – cujos nomes s˜ao Mail, Mailbox, artigos e cartas – representa um arquivo ou um diret´orio. O comando ls -F pode ser usado para se identificar quais itens de um diret´orio s˜ao arquivos e quais s˜ao diret´orios (subdiret´orios). $ ls -F Mail/ Mailbox artigos/ cartas/ $
  • 18. Neste exemplo, a op¸c˜ao “-F” faz com que o comando ls adicione um caracter ao nome de cada item de diret´orio, identificando o seu tipo. Diret´orios s˜ao identificados por uma barra (/). Arquivos comuns n˜ao tˆem nenhum caracter acrescentado ao seu nome. Logo, dentre os itens de diret´orio acima, Mail, artigos e cartas s˜ao diret´orios e Mailbox ´e um arquivo comum. Caso vocˆe deseje obter mais informa¸c˜oes sobre o ls, utilize o seguinte comando: man ls Para mudar de diret´orio, movendo-se na ´arvore de diret´orios, utilizamos o comando cd (Change Directory). cd recebe como argumento o nome de um novo diret´orio de trabalho, que pode ser um caminho absoluto ou relativo. Sua forma geral ´e a seguinte: cd <nome do novo diret´orio de trabalho> Caso o usu´ario quisesse mover-se para o subdiret´orio artigos, seria necess´ario digitar: $ cd artigos $ Neste caso informamos um caminho relativo do diret´orio. Isso tamb´em poderia ser feito usando-se o caminho absoluto, do seguinte modo: $ cd /home/joao/artigos $ Como vimos na se¸c˜ao 3.2, o shell pode nos facilitar essa tarefa. Poder´ıamos ter substitu´ıdo /home/joao pelo caracter “~” (til)3 ou “.” (ponto). Neste caso, “~” e “.” coincidem, pois o diret´orio pessoal ´e o mesmo que o diret´orio de trabalho. Recapitulando, estando em /home/joao, qualquer um dos seguintes comandos teria o mesmo efeito, isto ´e, mudariam o diret´orio de trabalho para /home/joao/artigos. cd artigos cd /home/joao/artigos cd ~/artigos cd ./artigos Para verificar o resultado de qualquer um deles: $ pwd /home/joao/artigos $ O comando cd pode ser usado para mudarmos para qualquer outro diret´orio da ´arvore de diret´orios desde que tenhamos permiss˜ao de acesso (veja a se¸c˜ao 3.6). Experimente a seguinte seq¨uˆencia de comandos: cd / pwd ls cd /home pwd ls cd /etc pwd ls cd pwd ls cd ~ pwd ls 3Aqui, supomos que estamos conectados com o login joao.
  • 19. Note que os dois ´ultimos comandos cd retornam ao diret´orio pessoal do usu´ario. O comando cd sem um nome de diret´orio tamb´em leva ao diret´orio pessoal. Todo diret´orio possui uma entrada (item) com o nome “..”4 que faz referˆencia ao diret´orio anterior5 , isto ´e, o “pai” do diret´orio atual. Assim, o comando cd .. muda o diret´orio de trabalho para o diret´orio um n´ıvel acima na hierarquia de diret´orios. $ pwd /home/joao $ cd .. $ ls $ pwd /home $ Para retornar ao diret´orio de trabalho anterior, utilize o comando “cd -” (“cd menos”): $ cd $ pwd /home/joao $ cd /bin $ pwd /bin $ cd - $ pwd /home/joao $ 3.4.1 Criando e removendo diret´orios Se quisermos criar um novo diret´orio chamado trabalhos no diret´orio pessoal do Joao, devemos usar o comando mkdir (Make Directory): $ pwd /home/joao $ ls Mail Mailbox artigos cartas $ mkdir trabalhos # cria o diret´orio $ ls Mail artigos cartas trabalhos Mailbox $ cd trabalhos $ pwd /home/joao/trabalhos $ Poder´ıamos ter criado o novo diret´orio com qualquer um dos comandos abaixo, pois o resultado seria o mesmo. mkdir ./trabalhos mkdir /home/joao/trabalhos mkdir ~/trabalhos 4Lˆe-se “ponto ponto”. 5O diret´orio hierarquicamente superior ao atual na ´arvore de diret´orios.
  • 20. A opera¸c˜ao inversa `a do comando mkdir ´e realizada pelo comando rmdir (Remove Directory) que remove um diret´orio: $ ls Mail artigos cartas trabalhos Mailbox $ rmdir trabalhos # remove o diret´orio $ ls Mail Mailbox artigos cartas $ Analogamente, poder´ıamos ter usado os comandos: rmdir ./trabalhos rmdir /home/joao/trabalhos rmdir ~/trabalhos Uma observa¸c˜ao deve ser feita: se o diret´orio a ser removido n˜ao estiver vazio, este comando n˜ao funcionar´a. O usu´ario ter´a que remover todo o conte´udo do diret´orio antes (veja se¸c˜ao 3.5.5). 3.4.2 A ´arvore de diret´orios do Linux A ´arvore de diret´orios do Linux ´e controlada por um conjunto de regras estabelecidas pelo Linux Filesys- tem Standard6 , ou FSSTND. Este tenta seguir a tradi¸c˜ao Unix, tornando o Linux semelhante `a grande maioria dos sistemas Unix atuais. Por que estudar primeiro a organiza¸c˜ao dos arquivos? A reposta ´e simples. Conhecendo a distribui¸c˜ao dos arquivos (dados) na ´arvore de diret´orios, fica mais f´acil entender o que as aplica¸c˜oes e ferramentas devem fazer. A seguir temos uma breve descri¸c˜ao dos principais diret´orios e seus conte´udos: / O diret´orio raiz, que ´e espec´ıfico para cada m´aquina. Geralmente armazenado localmente, cont´em os arquivos para a carga do sistema (boot), de forma a permitir a inclus˜ao dos outros sistemas de arquivos (outras hierarquias de diret´orios) na ´arvore de diret´orios. /bin Cont´em programas (execut´aveis) que s˜ao necess´arios durante o boot do sistema mas que tamb´em podem ser usados pelos usu´arios. /dev Os arquivos deste diret´orio s˜ao tamb´em conhecidos como “device drives” e s˜ao usados para acessar dispositivos eletrˆonicos do sistema7 . Por exemplo, assim como podemos ler dados de um arquivo, podemos ler dados de um disquete acessando /dev/fd0. /etc Este diret´orio ´e um dos mais importantes. Cont´em uma miscelˆanea de dados de configura¸c˜ao, como por exemplo roteiros (scripts) de inicializa¸c˜ao do sistema em seus v´arios n´ıveis e outros como a tabela de sistemas de arquivo, configura¸c˜ao da inicializa¸c˜ao do sistema para cada n´ıvel, configura¸c˜oes de login para todos os usu´arios, configura¸c˜ao da fila de impress˜ao, e um n´umero consider´avel de arquivos para configura¸c˜ao de rede e outros aspectos do sistema, incluindo a interface gr´afica. /home Cont´em os diret´orios pessoais dos usu´arios comuns8 . Quando este diret´orio se torna excessiva- mente grande, ele pode ser subdividido para facilitar sua manuten¸c˜ao. Por exemplo: /home/professores, /home/estudantes. /lib Este diret´orio cont´em bibliotecas do sistema. O nome lib vem de library, ou biblioteca. /lost+found Um diret´orio aonde s˜ao colocados os arquivos “recuperados” pelo utilit´ario fsck, isto ´e, dados orf˜aos (perdidos) no disco ou que pertenciam a arquivos danificados. /mnt ´e um diret´orio com pontos para montagem de dispositivos de bloco, como discos r´ıgidos adicionais, disquetes, CD-ROMs, etc. Simplificando, ´e o lugar reservado para a inclus˜ao de outras hierarquias de diret´orios, que podem estar em outros dispositivos ou em outra m´aquina da rede. 6Padr˜ao de Sistema de Arquivos Linux. 7Recursos como discos, modems, mem´oria, etc. . . 8O superusu´ario, ou admistrador do sistema, utiliza o diret´orio /root
  • 21. /proc ´e um diret´orio cujos dados s˜ao armazenados na mem´oria e n˜ao em disco. Nele encontramos “arquivos” com a configura¸c˜ao atual do sistema, dados estat´ısticos, dispositivos j´a montados, in- terrup¸c˜oes, endere¸cos e estados das portas f´ısicas, dados sobre a rede, processador, mem´oria, etc. Al´em disso, cont´em subdiret´orios com informa¸c˜oes detalhadas sobre o estado de cada programa em execu¸c˜ao na m´aquina. /sbin Execut´aveis e ferramentas para a administra¸c˜ao do sistema (para uso do superusu´ario). /tmp Local destinado aos arquivos tempor´arios. Observe a duplicidade aparente deste diret´orio com o /var/tmp. Na realidade o /tmp, em geral, tem os dados apagados entre uma sess˜ao e outra, enquanto que o /var normalmente fica com os dados salvos por mais tempo. Programas executados ap´os o boot do sistema devem preferencialmente usar o diret´orio /var/tmp, que provavelmente ter´a mais espa¸co dispon´ıvel. /usr Cont´em arquivos de comandos, programas, bibliotecas, manuais, e outros arquivos est´aveis, isto ´e, que n˜ao precisem ser modificados durante a opera¸c˜ao normal do sistema. O Linux possibilita ao administrador da rede instalar aplicativos no /usr de apenas uma m´aquina e compartilhar esse diret´orio com outras m´aquinas da rede. /var Cont´em em geral os arquivos que sofrem modifica¸c˜oes durante a sess˜ao, bem como arquivos tem- por´arios. Cada m´aquina possui o seu pr´oprio diret´orio /var (n˜ao ´e compartilhado em rede). Alguns destes diret´orios ser˜ao abordados mais detalhadamente a seguir. O Diret´orio /etc O diret´orio /etc , como j´a mencionamos anteriormente, possui arquivos relacionados com a configura¸c˜ao dos v´arios aspectos do sistema. Muitos programas n˜ao-padronizados pelas distribui¸c˜oes de Linux tamb´em se utilizam desse diret´orio para colocar seus arquivos de configura¸c˜oes gerais. Configura¸c˜oes espec´ıficas para cada usu´ario residem freq¨uˆentemente no diret´orio pessoal (home)9 de cada um. Estes s˜ao alguns dos principais arquivos do /etc: /etc/passwd Este arquivo constitui uma base de dados (contas) com informa¸c˜oes dos usu´arios que podem logar no sistema. Tem um formato de sete campos, separados pelo caracter “:” (dois pontos) e sempre na mesma ordem: nome de login do usu´ario; senha criptografada (codificada); id do usu´ario, grupo prim´ario deste usu´ario; nome completo ou descri¸c˜ao da conta; diret´orio pessoal do usu´ario; e shell inicial. Para mostrar melhor como s˜ao estes valores, abaixo temos um exemplo de uma linha deste arquivo: maria:gfTMTkLpLeupE:500:100:Maria da Silva:/home/maria:/bin/bash Quando estamos utilizando shadow password10 , o segundo campo ´e substituido por um “*” e a senha ´e armazenada em outro arquivo, normalmente acess´ıvel somente ao administrador do sistema. /etc/group Define os grupos aos quais os usu´arios pertencem. Cont´em linhas da forma: <nome do grupo>:<senha>:<ID do grupo>:<lista de usu´arios> Um usu´ario pode pertencer a qualquer n´umero de grupos e herdar todas as permiss˜oes de acesso a arquivos desses grupos. Opcionalmente um grupo pode ter uma senha – codificada no campo senha. O ID do grupo ´e um c´odigo como o ID do usu´ario no arquivo /etc/passwd. O ´ultimo campo ´e uma lista com os nomes (logins) separados por v´ırgulas, de todos os usu´arios que pertencem a este grupo. /etc/fstab Este arquivo cont´em uma tabela de parˆametros para a montagem (inclus˜ao) de sistemas de arquivos de discos (r´ıgidos, CD-ROMs, disquetes, de rede) na ´arvore de diret´orios. Tamb´em ´e ´util para determinar quais deles ser˜ao montados automaticamente durante o boot, e quais dever˜ao ser montados apenas quando os seus diret´orios s˜ao visitados. 9/home/<nome do usu´ario> 10Software que evita o acesso `as senhas criptografadas dos usu´arios.
  • 22. /etc/inittab Tabela com configura¸c˜oes de inicializa¸c˜ao de diversos programas. /etc/issue Cont´em a mensagem de sauda¸c˜ao – ou outras informa¸c˜oes – apresentadas aos usu´arios antes do processo de login. /etc/motd O conte´udo deste arquivo ´e exibido imediatamente ap´os um processo de login bem-sucedido, e antes do shell ser executado. motd significa “Message of the Day”, ou “Mensagem do Dia”. /etc/mtab Tabela dos dispositivos que se encontram montados. O seu formato ´e semelhante ao do /etc/fstab. Note que este arquivo ´e modificado dinamicamente `a medida que montamos ou desmon- tamos sistemas de arquivos. /etc/printcap Banco de dados com as capacidades (habilidades) das impressoras. /etc/termcap Banco de dados com as capacidades dos terminais. Atualmente o banco de dados mais usado para esse fim ´e o terminfo. Os dados contidos nestes bancos de dados referem-se a sequˆencias de controle para realizar opera¸c˜oes com a tela (limpeza, movimenta¸c˜ao do cursor, etc), bem como quais sequˆencias de eventos de teclas s˜ao enviados quando uma tecla especial – por exemplo HOME, INSERT, F1 – ´e pressionada. Al´em destes, existem outros arquivos presentes em /etc, como arquivos de configura¸c˜ao de ambiente de rede, entre eles: hosts, hosts.deny, hosts.allow, host.conf, exports, networks, etc. . . Como podemos ver, no Linux as configura¸c˜oes do sistema s˜ao vis´ıveis (textos), o que nem sempre ocorre em outros sistemas operacionais. Por esta raz˜ao diz-se que administrar um sistema Linux ´e manipular corretamente arquivos texto. O Diret´orio /usr O diret´orio /usr ´e geralmente grande, uma vez que muitos programas s˜ao instalados nele. Todos os arquivos deste diret´orio vˆem da distribui¸c˜ao Linux e geralmente s˜ao compartilhados na rede, enquanto que programas localmente instalados s˜ao armazenados em /usr/local. Isto faz com que seja poss´ıvel atualizar o sistema para uma nova vers˜ao de distribui¸c˜ao ou mesmo uma nova distribui¸c˜ao sem que seja necess´ario instalar todos os programas novamente. Os principais subdiret´orios do /usr est˜ao listados abaixo: /usr/local Softwares instalados localmente – que n˜ao s˜ao compartilhados de outra m´aquina da rede – e outros arquivos e softwares que n˜ao vˆem com a distribui¸c˜ao utilizada. /usr/X11R6 Arquivos do X Window System, o sistema gr´afico de janelas. Para simplificar o seu desenvolvimento e instala¸c˜ao, os arquivos do X n˜ao s˜ao integrados com o resto do sistema. /usr/bin Comandos dos usu´arios. Alguns outros comandos est˜ao em /bin ou /usr/local/bin (veja /usr/local). /usr/sbin Comandos para administra¸c˜ao do sistema (utilizados apenas pelo administrador). /usr/man, /usr/info, /usr/doc P´aginas de manual, documentos GNU info e outros arquivos de do- cumenta¸c˜ao diversa, respectivamente. /usr/include Arquivos de cabe¸calho para programas em linguangem C. /usr/lib Arquivos de dados imut´aveis, incluindo alguns arquivos de configura¸c˜ao. O Diret´orio /var O diret´orio /var cont´em dados que s˜ao alterados quando o sistema est´a operando normalmente. ´E espec´ıfico para cada sistema, ou seja, n˜ao deve ser compartilhado com outras m´aquinas em uma rede. /var/catman Algumas p´aginas de manual s˜ao armazenadas em /usr/man e vˆem numa vers˜ao pr´e- formatada. Outras p´aginas de manual precisam ser formatadas quando s˜ao acessadas pela primeira vez. A vers˜ao formatada ´e ent˜ao armazenada em /var/man e o pr´oximo usu´ario a acessar a essa p´agina n˜ao ter´a que esperar pela formata¸c˜ao. O arquivo /var/catman guarda informa¸c˜oes sobre as p´aginas que foram formatadas recentemente (cache).
  • 23. /var/lib Arquivos alterados enquanto o sistema est´a operando. /var/local Dados vari´aveis para programas instalados em /usr/local. /var/log Arquivos de log (registro) para v´arios programas especialmente login e syslog. Arquivos em /var/log tendem a crescer indefinidamente e precisam ser apagados regularmente. /var/run Arquivos que contˆem informa¸c˜oes sobre o sistema e s˜ao v´alidos at´e que haja um novo boot. Por exemplo, /var/run/utmp cont´em informa¸c˜oes sobre usu´arios atualmente logados. /var/spool Diret´orio com dados da fila de trabalho de impressoras, correio eletrˆonico (e-mail), not´ıcias (news), etc. . . /var/tmp Arquivos tempor´arios que devem existir por um per´ıodo de tempo mais longo que aqueles armazenados em /tmp. O Diret´orio /proc O diret´orio /proc cont´em um conjunto de arquivos “virtuais”. Estes arquivos n˜ao existem em disco efetivamente e s˜ao criados na mem´oria pelo kernel. Alguns dos mais importantes arquivos e diret´orios s˜ao descritos abaixo: /proc/n ´e um diret´orio com informa¸c˜oes sobre o processo n´umero n. Cada programa em execu¸c˜ao (processo) tem um subdiret´orio correspondente em /proc. /proc/cpuinfo Informa¸c˜oes a respeito do processador como tipo, modelo e performance. /proc/devices Lista de controladores de disposit´ıvo (device drivers) configurados no kernel em execu¸c˜ao. /proc/dma Informa quais canais de acesso direto `a mem´oria (Direct Memory Access) est˜ao sendo uti- lizados atualmente. /proc/filesystems Sistemas de arquivos configurados no kernel. /proc/interrupts Informa quais interrup¸c˜oes de hardware est˜ao em uso. /proc/ioports Informa quais portas de entrada e sa´ıda est˜ao em uso no momento. /proc/meminfo Informa sobre o atual uso de mem´oria, real e virtual. /proc/net Informa o status dos protocolos de redes. /proc/stat V´arias informa¸c˜oes estat´ısticas sobre o sistema. /proc/version Informa a vers˜ao do kernel. 3.5 Manipulando arquivos 3.5.1 Criando arquivos Para exemplificarmos a manipula¸c˜ao de arquivos usaremos o comando touch para criarmos arquivos vazios, cuja sintaxe ´e: touch <nome do arquivo> Outro modo de cria¸c˜ao de arquivos, mas desta vez com um conte´udo de texto, ´e usando o comando cat cuja sintaxe ´e: cat > <nome do arquivo> ´E importante notar o sinal ≫”que em breve ser´a melhor estudado, assim como as outras fun¸c˜oes do comando cat.
  • 24. 3.5.2 Arquivos ocultos No Linux, arquivos cujos nomes comecem por um “.” (ponto) n˜ao s˜ao mostrados na tela quando utilizamos o comando ls ou “ls -l”. Isto ´e, colocar um ponto no in´ıcio do nome de um arquivo torna ele invis´ıvel ao comando ls, em sua forma simples. Geralmente arquivos relacionados a configura¸c˜oes s˜ao ocultos (veja se¸c˜ao 4.4). Para vizualizar estes arquivos utilize qualquer um dos seguintes comandos: ls -a ls -la A op¸c˜ao “a” (all) mostra todos os arquivos do diret´orio, incluindo os arquivos que iniciam com ponto, os chamados arquivos ocultos. 3.5.3 Copiando arquivos A c´opia de arquivos ´e feita usando o comando cp , cuja sintaxe ´e: cp <arquivo original> <arquivo c´opia> O primeiro argumento indica o arquivo a ser copiado e pode ser composto pelo caminho absoluto ou pelo caminho relativo do arquivo. O segundo argumento indica o arquivo a ser criado, ou seja, a c´opia. cp /home/joao/cartas/texto1.txt /home/joao/artigos/texto1.txt cp ~joao/cartas/texto1.txt ~joao/artigos/texto1.txt Os comandos do exemplo acima copiam o arquivo texto1.txt do diret´orio cartas de joao para o diret´orio artigos do mesmo usu´ario. Ainda, se o usu´ario que executar o comando for joao: cp ~/cartas/texto1.txt ~/artigos/texto1.txt A seq¨uˆencia de comandos abaixo produz o mesmo resultado usando nomes relativos para os arquivos: $ cd /home/joao $ cp cartas/texto1.txt artigos/texto1.txt Se o segundo argumento for constitu´ıdo apenas por um nome de diret´orio, a c´opia ser´a criada nesse diret´orio com o mesmo nome do arquivo original. Assim, o comando abaixo tamb´em produz o mesmo resultado que o anterior (se o diret´orio de trabalho for /home/joao) . $ cp cartas/texto1.txt artigos No exemplo abaixo temos um arquivo sendo copiado para o diret´orio atual, /home/joao/artigos, representado pelo “.” (ponto) no final do comando. $ pwd /home/joao/artigos $ cp ~paulo/documentos/projeto.txt . Caso o diret´orio do arquivo original e da c´opia sejam o mesmo, deve-se especificar um nome diferente para esta. $ cp artigos/texto1.txt artigos/texto1.old
  • 25. 3.5.4 Mudando o nome e o lugar de arquivos e diret´orios O comando mv possui a mesma sintaxe do comando cp mas ao inv´es de copiar arquivos ´e utilizado para movˆe-los de um diret´orio para outro. Se os diret´orios forem o mesmo, especificamos um nome diferente para o arquivo e o efeito ´e a troca de nomes. $ mv ~joao/cartas/texto1.txt ~joao/artigos/texto1.txt Depois de executados os comandos acima, o diret´orio cartas n˜ao mais cont´em o arquivo texto1.txt. O exemplo abaixo ´e equivalente ao acima. $ cd /home/joao $ mv cartas/texto1.txt artigos Para renomear um arquivo basta movˆe-lo para o mesmo diret´orio em que se encontra, especificando um nome diferente: $ cd /home/joao/cartas $ mv texto1.txt carta1.txt Agora, o diret´orio cartas n˜ao mais possui um arquivo chamado texto1.txt, mas sim um arquivo de nome carta1.txt. Os procedimentos acima tamb´em se aplicam a diret´orios. 3.5.5 Removendo arquivos Para remover (apagar) um arquivo usamos o comando rm. A seguir temos a sua sintaxe e alguns exemplos. Sintaxe: rm <arquivo> rm /home/joao/artigos/carta1.txt rm ~/artigos/carta1.txt rm carta1.txt Para remover um diret´orio, deve-se antes remover todos os arquivos que ele cont´em e em seguida utilizar o comando rmdir como j´a foi visto. 3.5.6 Verificando o tipo de arquivos Para verificar o tipo de um arquivo, usa-se o comando file. Este realiza uma s´erie de testes para cada nome de arquivo passado como argumento, tentando classific´a-los. Sintaxe: file <arquivo> $ file carta.txt carta: ASCII text $ file pinguim.gif pinguin.gif: GIF image data, version 89a, 258 x 303, $ file musica.mp3 musica.mp3: MPEG audio stream data $ file . .: directory $ file .. ..: directory
  • 26. 3.5.7 Vendo o conte´udo de arquivos texto O comando cat imprime na tela todo o conte´udo de um arquivo do tipo texto. Sintaxe: cat <arquivo> Diferentemente de cat, o comando more exibe o conte´udo de arquivos texto fazendo pausas a cada vez em que a tela ´e completamente preenchida. O texto “--More--” ´e mostrado na parte inferior da tela, seguido de um indicador para a porcentagem do conte´udo do arquivo que j´a foi exibida. Ao teclar-se ENTER, more exibir´a uma linha a mais de texto. Pressionando-se a barra de espa¸co outra tela ser´a exibida. O caracter “b” faz com que more exiba a tela anterior e “q” provoca o t´ermino da execu¸c˜ao do comando. Para se procurar por uma palavra – ou uma cadeia de caracteres – em um arquivo pode-se pressionar o caracter “/” (barra) quando “--More--” estiver sendo mostrado, digitar a palavra e teclar ENTER. Sintaxe: more <arquivo> Existem ainda os comandos head e tail que mostram, respectivamente, as partes inicial e final de um arquivo. head [-n] <arquivo> tail [-n] <arquivo> Acima, o valor opcional n indica o numero de linhas a partir do inicio (head) ou a partir do final (tail) do arquivo. head -10 texto1.txt tail -20 texto1.txt Nos exemplos, s˜ao exibidas, respectivamente, as dez primeiras e as vinte ´ultimas linhas do arquivo texto1.txt. 3.6 Permiss˜oes Todo arquivo tem necessariamente um nome e um conjunto de dados. O Linux associa ainda a cada arquivo algumas outras informa¸c˜oes chamadas atributos de arquivo. Entre estes atributos est˜ao o tipo do arquivo e as permiss˜oes de acesso a ele. Tais permiss˜oes constituem um mecanismo de seguran¸ca necess´ario devido a existˆencia de v´arios usu´arios utiliando o mesmo sistema. 3.6.1 Os tipos de permiss˜oes de acesso O sistema de arquivos do Linux permite restringir a determinados usu´arios as formas de acesso a arquivos e diret´orios. Assim, a cada arquivo ou diret´orio ´e associado um conjunto de permiss˜oes. Essas permiss˜oes determinam quais usu´arios podem ler, escrever (alterar), ou executar um arquivo (no caso de arquivos execut´aveis como programas). Se um usu´ario tem permiss˜ao de execu¸c˜ao para determinado diret´orio, significa que ele pode realizar buscas dentro dele, e n˜ao execut´a-lo como se fosse programa. As permiss˜oes de acesso aos arquivos podem ser vistas atrav´es do comando “ls -l” . Ao execut´a-lo, podemos notar v´arias colunas de informa¸c˜oes. Por exemplo: $ ls -l drwxrwxr-x 3 joao estudantes 1024 Jul 14 17:59 Documentos -rwxr-x--- 1 joao estudantes 259 Aug 26 9:44 impresso -rw-r--r-- 1 joao estudantes 13500 Aug 25 15:05 projeto.txt $ Vamos analisar como cada linha ´e formada. O primeiro campo da listagem, “drwxrwxr-x” por exem- plo, indica o tipo do arquivo e suas permiss˜oes de acesso. O segundo indica o n´umero de liga¸c˜oes diretas (hard links) para esse arquivo (ver se¸c˜ao 3.7). O terceiro campo mostra o nome do dono e o quarto o grupo ao qual o arquivo pertence. Depois, aparecem ainda o tamanho, a data e hora da ´ultima grava¸c˜ao, e, por ´ultimo, o nome do arquivo (ou diret´orio). Por enquanto, interessa-nos apenas o primeiro campo, composto de 10 caracteres. O primeiro destes ´e uma indica¸c˜ao de tipo: se for um “-” indica um arquivo; se for um “d”, um diret´orio; se for um “l”,
  • 27. uma liga¸c˜ao (link). Os nove caracteres em seguida representam as permiss˜oes de acesso e s˜ao divididos em trˆes grupos de trˆes caracteres consecutivos. O primeiro, segundo e terceiro grupos constituem, res- pectivamente, as permiss˜oes de acesso do usu´ario dono do arquivo, dos usu´arios pertencentes ao mesmo grupo ao qual o arquivo pertence, e de todos os outros usu´arios do sistema. O primeiro caractere de cada grupo, indica a presen¸ca (r) ou ausˆencia (-) de permiss˜ao de leitura. O segundo caractere de cada grupo, indica a presen¸ca (w) ou ausˆencia (-) de permiss˜ao de escrita (altera¸c˜ao). O terceiro caractere de cada grupo (x), indica permiss˜ao de execu¸c˜ao para o arquivo – nesse caso, um arquivo de programa – ou indica permiss˜ao de busca em se tratando de um diret´orio (permiss˜ao de realizar um comando cd para esse diret´orio). Na primeira linha do exemplo acima, temos: “drwxrwxr-x”. O “d” indica que Documentos ´e um diret´orio. Em seguida (drwxrwxr-x), temos as permiss˜oes para o dono do arquivo, indicando que ele tem permiss˜ao de leitura, escrita e busca nesse diret´orio. Para os usu´arios pertencentes ao mesmo grupo do dono do arquivo, temos, nesse caso, as mesmas permiss˜oes do dono (drwxrwxr-x). Finalmente, temos que para os demais usu´arios do sistema (drwxrwxr-x) s˜ao permitidas a leitura e execu¸c˜ao, mas n˜ao a escrita (altera¸c˜ao). Isso significa que eles n˜ao podem criar nem remover arquivos e diret´orios dentro do diret´orio Documentos. A segunda linha indica que impresso ´e um arquivo (-) e pode ser lido, alterado e executado pelo seu dono (-rwxr-x---). Os usu´arios do grupo estudantes podem lˆe-lo e execut´a-lo (-rwxr-x---). Aos demais usu´arios n˜ao ´e permitido nenhum tipo de acesso (-rwxr-x---). Na terceira linha da listagem, projeto.txt tamb´em ´e um arquivo, como indica o primeiro caractere da linha (-). O dono do arquivo tem permiss˜ao de leitura e escrita (-rw-r--r--), os usu´arios do mesmo grupo (-rw-r--r--), e os demais usu´arios (-rw-r--r--) tˆem apenas permiss˜ao de leitura. ´E importante notar que as permiss˜oes atribu´ıdas aos arquivos dependem das permiss˜oes atribu´ıdas tamb´em ao diret´orio que os cont´em. Por exemplo, mesmo se um arquivo tem permiss˜oes do tipo “- rwxrwxrwx”, outros usu´arios n˜ao podem acess´a-lo a menos que tenham permiss˜ao de busca (x) neste diret´orio. Se um usu´ario quiser restrigir o acesso para todos os seus arquivos, ele pode simplesmente configurar as permiss˜oes do seu diret´orio pessoal para “-rwx------”. Assim, nenhum outro usu´ario poder´a acessar seu diret´orio e os arquivos que nele est˜ao contidos. Portanto, o usu´ario n˜ao precisar´a se preocupar com as permiss˜oes individuais dos arquivos. Em outras palavras, para acessar um arquivo, o usu´ario precisa ter permiss˜ao de busca em todos os diret´orios que perten¸cam ao caminho absoluto do arquivo, al´em de permiss˜ao de leitura ou execu¸c˜ao no arquivo em si. Geralmente, as permiss˜oes inicialmente dadas aos arquivos s˜ao “-rw-r--r--” e aos diret´orios “-rwxr-xr-x”. 3.6.2 Alterando permiss˜oes Somente o dono e o administrador do sistema podem alterar as permiss˜oes de arquivos e diret´orios. O comando chmod (Change Mode) ´e usado para isto e sua sintaxe ´e: chmod {a,u,g,o}{+,-,=}{r,w,x} <nome do arquivo ou diret´orio> ou chmod XYZ <nome do arquivo ou diret´orio> onde X, Y, e Z s˜ao digitos menores que 8 ({0,1,2,3,4,5,6,7}). Em sua primeira forma, o primeiro campo ap´os o nome do comando indica se devem ser alteradas as permiss˜oes para todos os usu´arios (“a”, all), para o dono do arquivo (“u”, user), para os usu´arios do grupo ao qual o arquivo pertence (“g”, group), ou para os demais usu´arios (“o” - others). O s´ımbolo “+” indica acr´escimo de permiss˜ao, “-” remo¸c˜ao de permiss˜ao e “=” estabelece permiss˜oes apenas para os tipos indicados. O ´ultimo parˆametro (r, w ou x) indica o tipo da permiss˜ao a ser alterada – leitura, escrita ou grava¸c˜ao. Vejamos alguns exemplos: 1. Atribuir permiss˜ao de leitura (r) ao arquivo carta para todos os usu´arios: chmod a+r carta 2. Quando “a”, “u”, “g” e “o” n˜ao s˜ao especificados, “a” ´e tomado como padr˜ao. O comando a seguir tem o mesmo efeito do anterior: chmod +r carta
  • 28. 3. Retirar a permiss˜ao de execu¸c˜ao de todos os usu´arios exceto o dono: chmod go-x carta 4. Tornar a permiss˜ao de outros igual a “r-x”: chmod o=rx carta 5. Permitir ao dono do arquivo, leitura, escrita e execu¸c˜ao: chmod u+rwx carta Note que o comando comando acima n˜ao altera as permiss˜oes de grupo e dos demais usu´arios. 3.6.3 Usando valores octais Uma outra forma de alterar as permiss˜oes de arquivos e diret´orios ´e o chamado formato absoluto. Este m´etodo ´e baseado em n´umeros octais (base 8) que fornecem um c´odigo de trˆes d´ıgitos para especificar todas as permiss˜oes (dono, grupo e outros). Seja o trio de permiss˜oes: “r-x”. Se representarmos a ausˆencia de uma permiss˜ao com um “0” (zero) e a presen¸ca desta com um “1”, o mesmo trio pode ser representado da seguinte forma: “101”. Analogamente, representamos “rwx” por “111” e “r--” por “100”. Analisando “101”, “111” e “100” como n´umeros bin´arios (base 2), temos os valores octais 5, 7 e 4. A tabela abaixo mostra todas as possibilidades: Permiss˜oes Bin´ario Octal --- 000 0 --x 001 1 -w- 010 2 -wx 011 3 r-- 100 4 r-x 101 5 rw- 110 6 rwx 111 7 Suponhamos que vamos estabelecer as seguintes permiss˜oes para o arquivo cartas: “rwx” para o dono, “rw-” para o grupo e “r--” para os outros usu´arios. Consultando a tabela acima, obtemos os valores 7, 6 e 4, respectivamente. Os comandos abaixo estabelecem essas permiss˜oes. chmod u=rwx,g=rw,o=r cartas chmod 764 cartas Observe que no primeiro comando n˜ao pode haver espa¸cos em branco junto `as v´ırgulas. Podemos ver que a segunda forma ´e mais pr´atica. Basta nos acostumarmos com o uso de n´umeros octais. Caso as permiss˜oes fossem “r-x” (5), “--x” (1) e “---” (0), o comando seria: chmod u=rx,g=x,o= cartas chmod 510 cartas Outra forma de calcular valores octais para alterarmos as permiss˜oes ´e atribuir valores para “r”, “w” e “x” e em seguida somar tais valores. Como “r” ´e sempre o primeiro do trio e como “r--” pode ser visto como o bin´ario 100, atribu´ımos o valor 4 para “r”. Analogamente, “w” ter´a o valor 2, “x” o valor 1 e “-” o valor 0 (zero). Somando os valores das permiss˜oes do dono, grupo e outros obtemos os d´ıgitos que devemos usar no comando. Assim, para os dois ´ultimos exemplos temos: rwx = 4 + 2 + 1 = 7 rw- = 4 + 2 + 0 = 6 r-- = 4 + 0 + 0 = 4 O comando ´e: chmod 764 cartas r-x = 4 + 0 + 1 = 5 --x = 0 + 0 + 1 = 1 --- = 0 + 0 + 0 = 0 O comando ´e: chmod 510 cartas
  • 29. 3.6.4 Estabelecendo as permiss˜oes padr˜ao O comando umask ´e utilizado para configurar o padr˜ao de permiss˜oes que novos arquivos e diret´orios possuir˜ao quando forem criados. Isto pode ser configurado no arquivo de inicializa¸c˜ao .bashrc (veja se¸c˜ao 4.4). O argumento deste comando ´e parecido com o do chmod (na forma octal). A diferen¸ca ´e que em vez de especificar as permiss˜oes que devem ser atribu´ıdas, ele especif´ıca permiss˜oes que devem ser removidas. A regra ´e a seguinte: determinar o acesso para usu´ario, grupo e outros, e subtrair de 7 cada um dos trˆes d´ıgitos. Por exemplo, digamos que, para os novos arquivos que ser˜ao criados, vocˆe queira atribuir a si prˆoprio todas as permiss˜oes (7), ao grupo ler e executar (5) e aos outros nenhuma permiss˜ao (0). Subtraia cada d´ıgito de 7 e o resultado ser´a: 0 para vocˆe, 2 para seu grupo e 7 para outros. Ent˜ao o comando que vocˆe deve executar ou colocar em seu arquivo de inicializa¸c˜ao ´e: umask 027 Observa¸c˜ao: Quando criamos novos arquivos, estes n˜ao recebem permiss˜ao de execu¸c˜ao, mesmo que tal permiss˜ao tenha sido configurada com o umask. 3.7 Links Nesta se¸c˜ao abordaremos uma caracter´ıstica muito importante do sistema de arquivos do Linux: as liga¸c˜oes, ou links. Um link ´e um tipo especial de arquivo que faz referˆencia (liga¸c˜ao) a um outro arquivo, ou diret´orio, do sistema de arquivos. Links podem ser utilizados como qualquer outro arquivo ou diret´orio. Existem dois tipos de links: simb´olicos (symlinks) e diretos (hard links). Aqui abordaremos apenas os simb´olicos. Links simb´olicos s˜ao arquivos (diret´orios) cujo conte´udo ´e o nome de um outro arquivo (diret´orio). Quando lemos ou gravamos dados em um link simb´olico, estamos na verdade lendo ou gravando dados no arquivo referenciado pelo link. Liga¸c˜oes simb´olicas podem ser identificadas com o comando “ls -l”. Vejamos um exemplo: ~/arquivos$ ls -l total 0 lrwxrwxrwx 1 joao estudantes 19 Jan 9 19:46 brc -> /home/joao/.bashrc ~/arquivos$ Um link simb´olico ´e identificado pela letra “l” e a sua configura¸c˜ao de permiss˜oes de acesso n˜ao ´e utilizada (aparecem sempre como “rwxrwxrwx”. S˜ao as permiss˜oes do arquivo referenciado pelo link que na verdade realizam o controle de acesso. No exemplo, o nome do link ´e brc e est´a contido no diret´orio /home/joao/arquivos. A seta (->) indica que ele faz referˆencia ao arquivo /home/joao/.bashrc. Assim, se lermos ou gravarmos dados em brc estaremos lendo ou gravando em /home/joao/.bashrc. As liga¸c˜oes simb´olicas funcionam da mesma forma para os diret´orios. Podemos executar, normalmente, um comando cd para um link que referencia um diret´orio. Podemos tamb´em remover um link simb´olico normalmente, utilizando o comando rm. Contudo, ao fazer isso, estaremos apagando somente o link, man n˜ao arquivo (diret´orio) referenciado por ele. Links simb´olicos possibilitam ao usu´ario atribuir diferentes nomes para um mesmo arquivo, sem precisar manter v´arias c´opias de tal arquivo. Tamb´em possibilita que um mesmo arquivo seja acessado a partir de diferentes locais da ´arvore de diret´orios. Para criar um link simb´olico utilizamos o comando ln com a op¸c˜ao “-s”. A seguir temos a sintaxe deste comando: ln -s <nome do arquivo a ser referenciado> <nome do link> Para exemplificar o seu uso, vamos criar, no mesmo diret´orio do exemplo anterior, um link chamado prof que referencia o arquivo /home/joao/.profile. ~/arquivos$ ln -s /home/joao/.profile prof ~/arquivos$ ls -l
  • 30. total 0 lrwxrwxrwx 1 joao estudantes 19 Jan 9 19:46 brc -> /home/joao/.bashrc lrwxrwxrwx 1 joao estudantes 20 Jan 9 20:20 prof -> /home/paulo/.profile ~/arquivos$ Devemos tomar cuidado com o uso dos links pois podemos, por exemplo, criar uma liga¸c˜ao simb´olica para um arquivo que n˜ao existe. Tamb´em pode ocorrer de apagarmos um arquivo e esquecermos de apagar os links para esse arquivo, ficando com links ´orf˜aos. Links s˜ao muito usados no Linux, especialmente os simb´olicos. Conforme vocˆe for adquirindo ex- periˆencia com o Linux, encontrar´a situa¸c˜oes prop´ıcias para o uso deles. Vocˆe pode us´a-los para evitar possuir v´arias c´opias de um mesmo arquivo, em diret´orios diferentes. Isso pode n˜ao parecer muita van- tagem, mas imagine um arquivo de v´arios megabytes, ou mesmo todo um diret´orio. O espa¸co em disco economizado seria consider´avel. 3.8 Exerc´ıcios 1. Visite os seguintes diret´orios, utilizando os comandos cd, pwd e ls. (a) /home (b) O pai do /home (use o “..”) (c) / (d) /bin (e) /usr (f) /proc (g) /usr/bin (h) Seu diret´orio pessoal 2. Liste o conte´udo de cada um dos diret´orios acima, de dois modos: (a) Sem sair do seu diret´orio pessoal (b) Movendo-se primeiramente para o diret´orio a ser listado 3. Crie em seu diret´orio pessoal um diret´orio com nome igual ao da m´aquina que vocˆe est´a usando. Ex: patolino, catatau, etc. Mova-se para esse diret´orio. 4. Crie um diret´orio para cada um dos dias da semana. 5. No diret´orio destinado ao s´abado, crie trˆes subdiret´orios chamados manha, tarde e noite. 6. Crie um diret´orio chamado “.todo dia” (todo dia precedido por um ponto) no seu diret´orio pessoal. 7. Liste o conte´udo de todos os diret´orios criados nos exerc´ıcios anteriores. 8. Remova o diret´orio domingo criado no exerc´ıcio 4. 9. Crie um diret´orio com o seu nome. Em seguida, altere as permiss˜oes desse diret´orio de forma que somente vocˆe (dono do diret´orio) tenha permiss˜ao de leitura, escrita e execu¸c˜ao. Os outros usu´arios n˜ao devem ter nenhuma permiss˜ao (rwx------). 10. Copie para dentro do diret´orio criado no exerc´ıcio 9 os arquivos termcap, profile, motd, issue e HOSTNAME que est˜ao no diret´orio /etc. (a) Qual o tipo desses arquivos ? (b) Quais s˜ao os comandos que se pode utilizar para mostrar o conte´udo desses arquivos? (c) Veja o conte´udo destes arquivos, usando more, head e tail caso ele n˜ao caiba totalmente na tela.
  • 31. (d) Mova o arquivo hostname para o diret´orio “pai” do diret´orio atual (n˜ao utilize cp, nem rm). (e) Altere o nome desses arquivos para, respectivamente, terminal, perfil, mensagem do dia, edicao e nome da maquina. 11. Remova todos os arquivos e diret´orios criados nos exerc´ıcios anteriores.
  • 33. Cap´ıtulo 4 Bash Entre os conceitos b´asicos j´a abordados, encontra-se o de shell ou interpretador de comandos. O shell ´e um programa que obt´em cada linha de comando do usu´ario, realiza algumas transforma¸c˜oes e a repassa para o SO. Neste cap´ıtulo ser˜ao abordados os diversos recursos e caracter´ısticas do interpretador de comandos Bourne Again Shell ou bash. O bash foi criado pelo projeto GNU em 1988. Seguindo os pr´ıncipios da pr´opria organiza¸c˜ao, todas as vers˜oes do bash desde a 0.99 tem sido distribu´ıdas pela Free Software Foundation (FSF). bash foi incorporado `as principais vers˜oes do Unix e rapidamente se tornou popular sendo inclu´ıdo como shell padr˜ao nos sistemas Linux. 4.1 Expans˜ao A expans˜ao de textos realizada pelo shell consiste na substitui¸c˜ao autom´atica de caracteres em nome de arquivos, diret´orios ou mesmo na inclus˜ao de toda a linha de comando. Suas principais vantagens s˜ao: redu¸c˜ao da quantidade de digita¸c˜ao necess´aria; encorajamento de boas conven¸c˜oes de nomea¸c˜ao; simplifica¸c˜ao na programa¸c˜ao do shell, etc. 4.1.1 Metacaracteres Um recurso muito ´util que o shell oferece ao usu´ario ´e o uso dos caracteres especiais, ou metacaracteres, “*” e “?” (aster´ısco e interroga¸c˜ao), para permitir a expans˜ao de nomes de arquivos e diret´orios. O caracter “*” refere-se a um conjunto de caracteres qualquer contido no nome de um arquivo ou diret´orio. Por exemplo, quando-se usa o caracter “*” em um nome de arquivo, o shell o substitui por todas as combina¸c˜oes poss´ıveis de caracteres que constituem nomes de arquivos presentes no diret´orio pesquisado. Vamos supor que o joao tem os arquivos Mailbox, projeto e trabalho em seu diret´orio corrente. Pode-se usar metacaracteres para listar somente os arquivos cujo nome termine com a letra “o”. $ ls Mailbox projeto trabalho $ ls *o projeto trabalho $ Ou todos os arquivos cujos nomes come¸cam pela letra “o”: $ ls o* ls: o*: No such file or directory $ O ´ultimo comando resultou em erro, pois em /home/joao n˜ao existe nenhum arquivo ou diret´orio come¸cado pela letra “o”. Para listarmos todos os arquivos cujo nome contenha essa letra: 27
  • 34. $ ls *o* Mailbox projeto trabalho $ Neste exemplo, todos os arquivos foram listados pois os nomes de todos eles continham a letra “o”. O uso do “*” isolado simplesmente identifica todos os nomes dos arquivos e diret´orios presentes do diret´orio corrente. $ ls * Mailbox projeto trabalho O processo de substitui¸c˜ao do “*” ´e chamado de expans˜ao do metacaracter e ´e feito pelo shell. O comando em si nunca recebe o “*” em sua lista de parˆametros. Ao inv´es disso, recebe todos os nome de arquivos expandidos pelo shell. Portanto, o comando: $ ls *o ´e expandido pelo shell e constitui na realidade: $ ls projeto trabalho Outro aspecto importante sobre o “*” ´e que este metacaracter n˜ao casa com nomes que come¸cam com “.” (ponto). Estes arquivos s˜ao tratados como arquivos ocultos. Esta caracter´ıstica visa a uma maior seguran¸ca pois caso contr´ario, o “*” poderia expandir os nomes dos diret´orios “.” e “..” e isso, al´em de inconveniente, poderia ser perigoso quando usado com certos comandos. O metacaracter “?” expande somente um caracter. Assim, o comando “ls ?” mostra todos os arquivos cujo nome ´e formado por um ´unico caracter qualquer, e “ls cart?” mostrar´a carta mas n˜ao cartas ou carta.txt. Eis mais um exemplo: $ ls ?ar* carta cartas parte1.txt $ Como vocˆe pode ver, o uso de metacaracteres pode especificar muitos arquivos de uma s´o vez. Para copiar ou mover v´arios arquivos ao mesmo tempo podemos usar: /home/joao$ cp ~joao/projetos/* ~joao/trabalhos Assim, todos os arquivos do primeiro diret´orio ser˜ao copiados para o segundo. Note que se estamos copiando ou movendo v´arios arquivos ao mesmo tempo, o parˆametro de destino, o ´ultimo, precisa ser um diret´orio. 4.1.2 Edi¸c˜ao O bash, assim como outros tipos de shell, oferece recursos de edi¸c˜ao de comandos muito ´uteis. As teclas ↑ e ↓ Como vocˆe j´a pode ter notado, toda vez que pressionamos a tecla “↑” o shell preenche a linha do prompt com o comando digitado anteriormente. Se continuarmos pressionando esta tecla veremos todos1 os comandos que j´a digitamos. Assim, combinando as teclas “↑” e “↓” podemos escolher um destes comandos e para execut´a-lo novamente basta teclarmos ENTER. 1Na verdade, todos os comandos contidos no history de comandos do usu´ario. O n´umero de comandos armazenados depende do tamanho armazenado na vari´avel HISTSIZE (veja se¸c˜ao 4.3).
  • 35. A tecla TAB Outro recurso de expans˜ao apresentado pelo bash ´e obtido utilizando-se a tecla TAB – em muitos teclados identificada por um s´ımbolo “⇀↽” ou semelhante. Para ilustrar este recurso, se digitarmos na linha de comando “ca” e pressionarmos TAB, teremos o seguinte resultado: $ ca # pressione TAB duas vezes cal captoinfo case cat $ ca # digite complemento Pressionando essa tecla, o shell informar´a quais os complementos poss´ıveis para a palavra que est´a sendo digitada. Caso n˜ao exista nenhum complemento, o shell emitir´a um som (um beep) para informar o usu´ario. Na ´ultima linha do exemplo, o “ca” foi copiado automaticamente pelo shell, que aguarda que o usu´ario digite o complemento. Se, ap´os isso, teclarmos a letra “p” seguida de TAB: $ ca # pressione "p" e TAB $ captoinfo # complemento autom´atico Ap´os digitar o “p”, o comando captoinfo tornou-se o ´unico complemento poss´ıvel. Quando a tecla TAB ´e pressionado e exite um ´unico complemento o shell insere-o automaticamente na linha de comando. A palavra “ca” foi expandida tendo como complementos nomes de comandos. A raz˜ao disto ´e que o shell assume que a primeira palavra de uma linha de comando necess´ariamente ´e um comando. Na expans˜ao de comando, o shell consulta a vari´avel PATH2 . Assim os complementos n˜ao necessariamente est˜ao no diret´orio corrente. Caso o diret´orio que cont´em o comando captoinfo n˜ao fosse o diret´orio corrente e nem estivesse incluso na vari´avel PATH do usu´ario, o complemento captoinfo n˜ao apareceria da lista de comandos fornecida pelo shell depois que TAB foi pressionada. Al´em de comandos, a tecla TAB tamb´em pode ser usada para expandir nomes de arquivos e diret´orios. Por exemplo, se digitarmos “cd /ho” e teclarmos TAB o shell complementar´a a linha formando: $ cd /home/ Caso houvessem outras op¸c˜oes come¸cadas por “/ho”, ouvir´ıamos um beep e se pression´assemos TAB novamente, uma lista de complementos poss´ıveis seria mostrada da mesma forma que na expans˜ao de comandos. Por exemplo: $ ls /ho* home homes $ cd /ho # pressione TAB $ cd /home # "me" inserido pelo shell # pressione TAB novamente home homes $ cd /home # reinserido pelo shell Quando a tecla TAB ´e pressionada, o shell tenta complementar o m´aximo poss´ıvel a linha de co- mando. Somente no momento em que o shell encontra mais de um complemento poss´ıvel ´e que a lista de complementos ´e mostrada. Esperimente digitar “x” na linha de comando e teclar TAB duas vezes: $ x # pressione TAB There are 118 possibilities. Do you really wish to see them all? (y or n) Quando existem muitos complementos poss´ıveis, o shell imprime a mensagem acima perguntando ao usu´ario se ele deseja ver todas as possibilidades. Para responder “Sim” pressionamos “y” (“Yes”) e para “N˜ao”, “n” (“No”). 2Veja se¸c˜ao 4.3.
  • 36. 4.2 Aliases Algumas vezes usamos comandos que necessitam de v´arias op¸c˜oes e argumentos. Para amenizar o trabalho de digitarmos repetidamente estes comandos o bash oferece um recurso chamado alias com o qual podemos definir sinˆonimos ou “apelidos” para um comando. Um alias pode ser definido na linha de comando da seguinte forma: alias <nome>=<comando> Observe que n˜ao pode haver espa¸cos em branco antes ou depois do “=”. Esta sintaxe indica que nome ´e um “alias” (apelido) para comando. Toda vez que digitarmos o comando nome, o bash o substituir´a por comando. Exemplo: $ alias lf=’ls -F’ Isso far´a o shell executar ls -F toda vez que usarmos lf na linha de comando. Ou seja, o que o alias faz na verdade ´e substituir a palavra “lf” por “ls -F”. Observe neste exemplo, existe um espa¸co em branco entre ls e -F. Sempre que houver espa¸cos em branco na defini¸c˜ao de um campo, todo o campo deve ser digitado entre aspas simples (’) ou duplas (”). Apesar de se poder definir um alias na linha de comando, geralmente isto ´e feito nos arquivos de inicializa¸c˜ao .bash profile ou .bashrc. Para remover um alias usa-se o comando unalias cuja sintaxe ´e: unalias <nome>. O exemplo abaixo remove o alias definido anteriormente: $ unalias lf A op¸c˜ao “-a” faz com que todos os aliases sejam removidos: $ unalias -a 4.3 Vari´aveis de ambiente Existem v´arias caracter´ısticas do ambiente do sistema que podemos configurar atrav´es das vari´aveis do shell. Estas vari´aveis podem especificar desde o prompt de comando at´e o intervalo de tempo para a checagem de novas mensagens de e-mail, por exemplo. Como o alias, as vari´aveis do shell s˜ao nomes que possuem valores associados. Por conven¸c˜ao, as vari´aveis pr´e-definidas pelo shell – e alguns outros programas – s˜ao escritas sempre com letras mai´usculas. A sintaxe para definir uma vari´avel ´e similar `a de um alias: <vari´avel>=<valor> sem espa¸cos em branco antes ou depois do “=”. Para referenciar o valor de uma vari´avel em um comando deve-se utilizar o s´ımbolo “$” antes do nome da vari´avel. Pode-se “apagar” uma vari´avel com o comando: unset <nome vari´avel> A maneira mais f´acil de checar o valor de uma vari´avel ´e usar o comando echo: echo $<vari´avel> No exemplo abaixo primeiro definimos a vari´avel EDITOR e, em seguida, verificamos o seu valor: $ EDITOR=emacs $ echo $EDITOR emacs
  • 37. As vari´aveis de ambiente s˜ao aquelas conhecidas pelos demais processos (programas em execu¸c˜ao). Exemplos destas vari´aveis s˜ao: HOME, PATH, MAIL, EDITOR, etc. Para entender o seu uso, vejamos um exemplo: editores de texto como vi ou emacs– os quais veremos adiante – possuem diferentes interfaces para os modos texto e gr´afico e necessitam saber qual o tipo de terminal o usu´ario est´a usando; a vari´avel de ambiente TERM ´e o modo pelo qual isto pode ser determinado. Outro exemplo s˜ao os programas de e-mail que permitem ao usu´ario editar mensagens com o editor de textos de sua proferˆencia. Como estes programas sabem qual editor usar? ´E atrav´es da vari´avel EDITOR ou VISUAL. Qualquer vari´avel pode se tornar uma vari´avel de ambiente. Para isto, ela deve ser “exportada” com o comando export: export <vari´avel> export tamb´em aceita uma lista de vari´aveis como argumento: export <vari´avel1> <vari´avel2> <...> Tamb´em podemos exportar e atribuir valores a uma vari´avel numa ´unica linha de comando: export <vari´avel>=<valor> Podemos verificar quais s˜ao as vari´aveis de ambiente j´a definidas e seus respectivos valores usando o comando abaixo: export -p Para visualizar todas as vari´aveis basta usar set ou env. Uma importante vari´avel de ambiente ´e PATH que ajuda o shell a encontrar os comandos que o usu´ario executa. Todo comando executado ´e, na realidade, um arquivo. Estes arquivos s˜ao chamados execut´aveis e est˜ao armazenados em v´arios diret´orios como /bin ou /usr/bin. O valor da vari´avel PATH ´e uma lista de diret´orios em que o shell procura toda vez que executamos um comando cujo arquivo n˜ao ´e encontrado no diret´orio corrente. Assim, n˜ao precisamos alterar o diret´orio de trabalho todas vez que necessitamos executar um comando que se encontra em outro diret´orio. Basta acrescentar o diret´orio que cont´em tal comando `a vari´avel PATH. Os nomes dos diret´orios na vari´avel s˜ao separados pelo caractere “:”. $echo $PATH /bin:/usr/bin:/usr/local/bin Neste caso, podemos executar qualquer comando contido nestes diret´orios sem alterar nosso diret´orio de trabalho. ´E tamb´em por isso que ao executarmos comandoscomo por exemplo o cat e more n˜ao precisamos digitar “/bin/cat” e “/bin/more”. Caso o usu´ario joao queira adicionar um outro diret´orio, digamos /home/joao/bin `a vari´avel PATH, deve proceder como mostrado a seguir: $ export PATH=$PATH:/home/joao/bin # adiciona o diret´orio $ echo $PATH # verifica /bin:/usr/bin:/usr/local/bin:/home/joao/bin O primeiro comando faz com que a vari´avel receba o seu valor atual, concatenado com o nome do diret´orio a ser acrescentado. Observe que existe um “:” antes do nome do diret´orio. O segundo comando ´e utilizado apenas para visualizarmos o resultado do primeiro. 4.3.1 Vari´aveis de Prompt O shell permite inserir informa¸c˜oes ´uteis no prompt da linha de comando como a data atual e o diret´orio corrente. Para isso, s˜ao utilizados quatro descritores de prompt, armazenados nas vari´aveis PS1, PS2, PS3 e PS4. A vari´avel PS1 ´e chamada string de prompt prim´aria e ´e o prompt usual do shell. At´e agora usamos um cifr˜ao ($), mas podemos configur´a-la de v´arias outras formas. Por exemplo, podemos fazer o prompt ficar igual a “digite um comando: ”:
  • 38. $ PS1="digite um comando: " digite um comando: pwd /home/joao digite um comando: cd .. digite um comando: pwd /home Algumas op¸c˜oes, constitu´ıdas por uma barra invertida () e um caracter, pode ser utilizadas para acrescentar informa¸c˜oes ao prompt. Muitos usu´arios definem a vari´avel PS1 de forma que o diret´orio corrente seja exibido no prompt. Para isso, utilizam a op¸c˜ao “w”. $ pwd # mostra diret´orio corrente /home/joao $ PS1="w$ " # altera prompt ~$ cd artigos ~/artigos$ pwd /home/joao/artigos ~/artigos$ A seguir temos exemplos de algumas op¸c˜oes que podem ser utilizadas no valor de PS1: Data atual no formato “dia da semana, mˆes, dia do mˆes”: $ PS1="d$ " Sun Jan 9$ Nome do usu´ario (login): $ PS1="u$ " joao$ Nome na m´aquina (hostname): $ PS1="h$ " cerebro$ Nome do shell: $ PS1="s$ " bash$ Hora atual no formato “HH:MM:SS” (hora:minuto:segundo): $ PS1="t$ " 17:49:29$ Diret´orio corrente: $ PS1="W$ " artigos$ Diret´orio corrente (caminho completo): $ PS1="w$ " ~/artigos$ Pode-se tamb´em combinar v´arias op¸c˜oes como, por exemplo, nome do usu´ario, nome da m´aquina e diret´orio de trabalho: $ PS1="u h w$ " joao cerebro ~/artigos$
  • 39. A vari´avel PS2 ´e chamada de string de prompt secund´aria e seu valor default ´e “>”. ´E usada como uma indica¸c˜ao para terminar um comando quando digitamos uma linha incompleta e pressionamos ENTER. Por exemplo, suponha que come¸camos a digitar uma seq¨uˆencia de caracteres entre aspas e antes de terminar (fechar as aspas) pressionamos ENTER. Ent˜ao shell exibe um “>” e aguarda at´e que finalizemos a string: $ echo "Esta ´e uma frase muito longa que # pressione ENTER > termina aqui." Esta ´e uma string muito longa que termina aqui. $ Ou seja, a vari´avel PS2 ´e utilizada pelo shell para avisar-nos de que ainda n˜ao acabamos de digitar o comando da linha anterior. As vari´aveis PS3 e PS4 est˜ao relacionadas a programa¸c˜ao shell e n˜ao ser˜ao abordadas. 4.3.2 Outras vari´aveis A seguir temos uma descri¸c˜ao das principais vari´aveis do bash: HISTCMD n´umero do comando atual no history. HISTCONTROL valores poss´ıveis s˜ao: ignorespace : linhas iniciadas com espa¸co n˜ao s˜ao adicionadas no history. ignoredups : linhas que coincidem com a ´ultima linha do history n˜ao s˜ao adicionadas. ignoreboth : habilita as op¸c˜oes anteriores. HISTIGNORE lista de padr˜oes, separados por “:”, que indicam quais comandos n˜ao devem ser adici- onados no history. HISTFILE nome do arquivo de history. O default ´e .bash history HISTFILESIZE n´umero m´aximo de linhas do arquivo de history. HISTSIZE n´umero m´aximo de comandos armazenados. O valor padr˜ao ´e 500. MAIL nome do arquivo para checagem de mensagens de e-mail. MAILCHECK freq¨uˆencia, em segundos, para checagem de novas mensagens de e-mail. MAILPATH lista de arquivos, separados por “:”, para checagem de mensagens de e-mail. HOME nome do diret´orio home. SECONDS tempo, em segundos, desde que o shell foi inicializado. BASH caminho do shell atual. BASH VERSION vers˜ao do shell em uso. PWD diret´orio corrente. OLDPWD diret´orio anterior ao ´ultimo comando cd. COLUMNS n´umero de colunas do display. LINES n´umero de linhas do display. EDITOR caminho do editor de textos default. SHELL caminho do shell atual. TERM tipo de terminal corrente.
  • 40. 4.4 Arquivos .bash profile, .bash logout e .bashrc Estes trˆes arquivos tem um significado especial para o bash e oferecem uma forma de configurar recursos do ambiente automaticamente quando logamos no sistema, quando executamos outro shell bash ou quando deslogamos. Os arquivos devem estar no diret´orio pessoal do usu´ario pois caso contr´ario, o sistema usar´a o arquivo profile localizado no diret´orio /etc. Podemos criar nossos pr´oprios arquivos de configura¸c˜ao para o bash usando um editor de texto. O arquivo .bash profile cont´em comandos que s˜ao executados pelo bash toda vez que logamos no sistema. Se examinarmos este arquivo teremos algo como: PATH=/bin:/usr/bin:/usr/local/bin:${HOME}/bin MAIL=${HOME}/Mailbox PRINTER=bart EDITOR=/usr/bin/vi PS1=’h: w$ ’ PS2=’> ’ alias ll=’ls -l’ Estas linhas estabelecem configura¸c˜oes para v´arios componentes do sistema que s˜ao utilizados pelo usu´ario. Esse conjunto de componetes ´e denominado ambiente de sistema. O arquivo .bash profile pode ter o seu conte´udo modificado conforme as necessidades (preferˆencias) de cada usu´ario. As altera¸c˜oes n˜ao ocorrem at´e que o arquivo seja lido novamente pelo shell. Para isto, devemos deslogar e logar novamente ou executar o seguinte comando: $ source .bash_profile O comando source executa comandos descritos em um determinado arquivo – neste caso, .bash profile. O bash permite dois sinˆonimos para o .bash profile: .bash login e .profile. Se o arquivo .bash profile n˜ao existir em seu diret´orio home, ent˜ao o bash ir´a procurar por .bash login. Se este arquivo tamb´em n˜ao existir a busca ser´a feita por .profile. .bash profile ´e executado apenas pelo shell de login. Se executarmos outro shell, o bash executar´a apenas os comandos existentes no arquivo .bashrc. Este esquema permite que usu´arios tenham a flexibi- lidade de separar comandos de inicializa¸c˜ao – necess´arios no login – daqueles comandos necess´arios para configurar uma outra instˆancia do shell. O arquivo .bash logout ´e lido e executado toda vez que sa´ımos de um shell. Se quisermos executar alguns comandos que removem arquivos tempor´arios ou registra quanto tempo ficamos logados ent˜ao basta adicionar os comandos neste arquivo. Podemos colocar neste arquivo o comando clear, que limpar´a a tela toda vez que deslogarmos. 4.5 Redirecionando entradas e sa´ıdas A entrada de um programa consiste nos dados que lhe s˜ao passados inicialmente, os quais s˜ao necess´arios para a execu¸c˜ao do programa. A entrada de um programa pode vir do teclado ou de um arquivo, por exemplo. Argumentos passados `a comandos constituem a sua entrada. A sa´ıda ´e constitu´ıda pelas informa¸c˜oes geradas pelo programa, ou seja, o resultado de sua execu¸c˜ao. A sa´ıda pode ser mostrada na tela ou gravada em um arquivo de registro. Muitos comandos do Linux tˆem sua entrada configurada para a entrada padr˜ao e sua sa´ıda para a sa´ıda padr˜ao. A entrada padr˜ao ´e o teclado e a sa´ıda padr˜ao ´e o monitor. Vejamos um exemplo usando o comando cat, que lˆe dados de todos os arquivos passados como parˆametros e os envia diretamente para a sa´ıda padr˜ao. Usando o comando abaixo, veremos o conte´udo do arquivo projeto seguido pelo conte´udo de tese. /home/joao$ cat projeto tese Entretanto, se nenhum nome de arquivo for dado como parˆametro, o comando cat lˆe dados da en- trada padr˜ao e os envia para a sa´ıda padr˜ao. Para interromper, deve-se pressionar as teclas ctrl e d simultaneamente (ctrl+d).
  • 41. /home/joao/artigos$ cat Ola! Tem alguem ai? # usu´ario Ola! Tem alguem ai? # eco do sistema Ate mais! # usu´ario Ate mais! # eco do sistema # usu´ario pressiona ctrl+d home/joao/artigos$ Como podemos ver, cada linha que o usu´ario digita ´e imediatamente ecoada pelo comando cat. Aqui um outro exemplo: o comando sort lˆe dados da entrada padr˜ao – a menos que algum arquivo seja dado como parˆametro – e ordena os dados, enviando-os para a sa´ıda padr˜ao: /home/joao/artigos$ sort bananas # usu´ario peras # usu´ario goiabas # usu´ario # ctrl+d bananas # eco do sistema goiabas # eco do sistema peras # eco do sistema /home/joao/artigos$ Digamos que queremos enviar a sa´ıda do comando sort para um arquivo, gravando os dados digitados anteriormente. O shell nos permite redirecionar a sa´ıda para um arquivo usando o s´ımbolo “>”. /home/joao/artigos$ sort > lista bananas # usu´ario peras # usu´ario goiabas # usu´ario # ctrl+d /home/joao/artigos$ Como se pode ver, o resultado do comando sort n˜ao ´e mostrado imediatamente ap´os o se digitar ctrl+d. Ao inv´es disso, ´e salvo em um arquivo chamado lista. Vejamos o conte´udo desse arquivo: /home/joao/artigos$ cat lista bananas goiabas peras /home/joao/artigos$ Com o redirecionamento de sa´ıda, temos uma maneira simples de criar arquivos de texto. Para isso, utilizamos o comando cat para ler a entrada padr˜ao (teclado) e redirecionamos sua sa´ıda para um arquivo. /home/joao/artigos$ cat > itens bananas # usu´ario peras # usu´ario goiabas # usu´ario laranjas # usu´ario # ctrl+d /home/joao/artigos$ Assim, criamos um arquivo contendo a lista de frutas acima. Vamos supor que salvamos a lista de compras original, desordenada, no arquivo itens . Uma maneira de ordenar as informa¸c˜oes e salv´a-las em outro arquivo seria passar a sort o nome do arquivo a ser lido como a entrada e redirecionar sa´ıda do comando para outro arquivo. Assim:
  • 42. /home/joao/artigos$ sort itens > lista /home/joao/artigos$ cat lista bananas goiabas peras /home/joao/artigos$ Como vemos, se passarmos como argumento um nome de arquivo ao comando sort (“sort <arquivo>”), as linhas desse arquivo ser˜ao ordenadas e mostradas na sa´ıda padr˜ao. Entretando h´a uma outra maneira de fazer isso: /home/joao/artigos$ sort < itens bananas goiabas peras /home/joao/artigos$ Tecnicamente, “sort < itens ” ´e equivalente a “sort itens ”, mas isso nos permite demonstrar que o primeiro se comporta como se os dados do arquivo itens estivessem vindo da entrada padr˜ao. Na realidade, o comando sort n˜ao recebe o nome do arquivo, continuando assim a ler da entrada padr˜ao como se estivesse lendo dados digitados atrav´es do teclado. O shell se encarrega do redirecionamento da entrada (<) sem que o comando perceba. Isto introduz o conceito de filtro. Um filtro ´e um programa que lˆe dados da entrada padr˜ao e os processa de algum modo, enviando em seguida os dados processados `a sa´ıda padr˜ao. 4.5.1 Redirecionamentos destrutivo e n˜ao-destrutivo Ao usar “>” para redirecionar a sa´ıda para um arquivo estamos realizando um redirecionamento destrutivo, ou seja, o comando “ls > lista” sobrescreve o conte´udo do arquivo lista. Isto ´e equivalente a dizer que todo o conte´udo anterior de lista ´e apagado. Se ao inv´es disso, redirecionarmos usando “>>”, a sa´ıda ser´a concatenada ao final do arquivo e o conte´udo (se houver) de lista ser´a preservado. Para melhor entender isso, esperimente executar a seguinte seq¨uˆencia de comandos: ls >> listagem ls >> listagem more listagem O redirecionamento neste exemplo, diferentemente do exemplo anterior, ´e denominado redireciona- mento n˜ao-destrutivo. 4.5.2 Usando Pipes Nos exemplos para o filtro sort, os dados de entrada eram digitados pelo usu´ario ou estavam gravados em um arquivo. O que aconteceria se quis´essemos ordenar dados vindos do sa´ıda de outro comando ? Para listar os arquivos do diret´orio corrente em ordem alfab´etica invertida devemos fazer com que a sa´ıda do comando ls seja ordenada pelo comando sort. Usando a op¸c˜ao “-r”, este comando ordena os dados na ordem inversa. /home/joao/artigos$ ls historia notas tese testes /home/joao/artigos$ ls > lista /home/joao/artigos$ sort -r lista testes tese notas lista # observe esse nome de arquivo historia /home/joao/artigos$
  • 43. Aqui, salvamos a sa´ıda do comando ls em um arquivo (lista) e usamos sort com a op¸c˜ao “-r”. Por´em, isso faz com que tenhamos um arquivo tempor´ario para armazenar os dados. Assim, toda vez que fizermos isso, teremos que, em seguida, remover o arquivo lista. A solu¸c˜ao ´e usar o que chamamos de pipeline, outro recurso do shell que nos permite conectar v´arios comandos usando um pipe3 , onde a sa´ıda do primeiro comando ´e enviada diretamente `a entrada do segundo e assim por diante no caso de haver mais de dois comandos conectados por pipes. No nosso caso, queremos enviar a sa´ıda do comando ls para a entrada do comando sort. O s´ımbolo “|”4 ´e usado para criar um pipe: /home/joao/artigos$ ls | sort -r testes tese notas historia /home/joao/artigos$ Note que neste exemplo, nenhum nome de arquivo ´e usado na linha de comando, diferentemente do exemplo anterior que fazia o uso do arquivo intermedi´ario lista. Outra diferen¸ca ´e que o nome desse arquivo intermedi´ario aparece no resultado do pen´ultimo exemplo, mas n˜ao neste ´ultimo. O comando ´e mais curto, mais f´acil de digitar e o resultado ´e mais adequado pois n˜ao inclui nomes de arquivos intermedi´arios. Vejamos outro exemplo bastante ´util. Experimente o comando abaixo: ls /usr/bin Desta vez, teremos a listagem de todos os arquivos do diret´orio /usr/bin e muitos deles passar˜ao pela tela do monitor r´apido demais para que possam ser lidos. Ao inv´es disso, podemos usar o comando more para acrescentar pausas na listagem dos arquivos. Esperimente agora o comando abaixo: ls /usr/bin | more ´E importante observar que o redirecionamento e o uso de pipes s˜ao caracter´ısticas do shell e n˜ao dos comandos em si. ´E o shell quem provˆe a sintaxe dos s´ımbolos “>”, “<” e “|”. 4.6 Exerc´ıcios 1. Exiba todos os arquivos presentes no diret´orio /etc que contenham a extens˜ao conf 2. De dois exemplos de nomes de arquivos que poderiam ser exibidos atrav´es do comando ls ?a ∗ .so 3. Crie um alias com o nome de la o qual quando executado exibe todo os arquivos ocultos do diret´orio corrente. 4. Crie uma vari´avel NOME a qual deve possuir o nome do usu´ario como valor. 5. Redirecione a sa´ıda do comando ls para um arquivo qualquer. 6. Ordene o arquivo do exerc´ıcio anterior e direcione a sa´ıda para outro arquivo. 7. Em apenas uma linha de comando ordene a sa´ıda do comando ls e redirecione para um arquivo. 8. Em apenas uma linha de comando ordene a sa´ıda do comando ls -la e acrescente essa sa´ıda no mesmo arquivo do exerc´ıcio anterior. 3Algumas tradu¸c˜oes poss´ıveis para a palavra “pipe” s˜ao os substantivos “cano” e “tubo” ou o verbo “transportar”. 4O s´ımbolo de pipe, na maioria dos teclados, encontra-se na mesma tecla que a barra invertida e ´e gerado pressionado-se essa tecla simultaneamente com SHIFT.
  • 45. Cap´ıtulo 5 Comandos avan¸cados Neste cap´ıtulo vamos apresentar alguns comandos um pouco mais avan¸cados do Linux. ´E importante frisar que, para cada comando, n˜ao est˜ao descritas todas as op¸c˜oes poss´ıveis, ou seja, n˜ao ´e coberta toda a potencialidade de cada comando. Para obter mais detalhes sobre cada um deles, basta consultar o manual on-line do Linux (man), cuja sintaxe ´e a seguinte: man <comando> Observe que mesmo o man possui v´arias op¸c˜oes tamb´em! Para maiores detalhes sobre o pr´oprio man, basta executar o comando: man man 5.1 Filtros 5.1.1 diff O comando diff compara dois arquivos byte a byte, apresentando uma lista de diferen¸cas para cada byte. Sintaxe: diff <arq1> <arq2> [op¸c~oes] Op¸c˜ao Descri¸c˜ao -a Trata os arquivos como se fossem arquivos textos, comparando linha por linha ao inv´es de byte a byte. -B Ignora mudan¸cas que sejam apenas inclus˜ao de espa¸co em branco. Exemplo: ~/arquivos$ diff lista1 lista2 357c357 < % --- > $ Acima temos uma indica¸c˜ao de que o byte 357 do arquivo lista1 (que ´e um %) ´e diferente do byte 357 do arquivo lista2 (que ´e um $) 5.1.2 grep O comando grep ´e utilizado para filtrar um determinado texto de entrada, enviando para a sa´ıda apenas as linhas que contenham a seq¨uˆencia de caracteres (string) passada como parˆametro. Ou seja, o seu comportamento ´e exibir cada linha que possui a string por completo. Normalmente grep ´e usado atrav´es de um pipe para procurar linhas dentro da sa´ıda de outro programa. Sintaxe: grep [op¸c~oes] <string> <arquivo> 39
  • 46. Op¸c˜ao Descri¸c˜ao -n Onde n ´e um n´umero, faz com que sejam exibidas as n linhas anteriores e as n linhas posteriores `as linhas onde houver ocorrˆencia da string. -An Exibe as n linhas posteriores `as linhas onde houver ocorrˆencia da string. -Bn Exibe as n linhas anteriores `as linhas onde houver ocorrˆencia da string. -v Inverte a procura, ou seja, mostra as linhas onde n˜ao ocorre a string. -e Especifica uma string a ser procurada. ´E poss´ıvel especificar mais de uma string que ´e v´alida para procura, sendo que o comportamento ´e apresentar as linhas em que ocorre pelo menos uma das strings. Exemplo: ~/arquivos$ cat lista_alunos Ana Maria matricula: 9221 ingresso: 1o semestre 1996 Ana Paula matricula: 9231 ingresso: 1o semestre 1997 Joao matricula: 9232 ingresso: 2o semestre 1996 ~/arquivos$ cat lista_alunos | grep Ana Ana Maria matricula: 9221 ingresso: 1o semestre 1996 Ana Paula matricula: 9231 ingresso: 1o semestre 1997 ~/arquivos$ cat lista_alunos | grep -v Ana Joao matricula: 9232 ingresso: 2o semestre 1996 ~/arquivos$ grep 1996 lista_alunos Ana Maria matricula: 9221 ingresso: 1o semestre 1996 Joao matricula: 9232 ingresso: 2o semestre 1996 5.2 Manipula¸c˜ao da fila de impress˜ao 5.2.1 lpr O comando lpr ´e usado para imprimir arquivos. Sintaxe: lpr [op¸c~oes] <nomearq> Op¸c˜ao Descri¸c˜ao -Pimpr Faz com que seja usada a impressora de nome impr ao inv´es da impressora padr˜ao. -d Estabelece que o arquivo ´e do tipo DVI (sa´ıda do TEX ou LATEX). -r Remove o arquivo ap´os o t´ermino da impress˜ao. -#n Imprime n c´opias. O comando lpr tamb´em pode ser usado para imprimir dados provenientes da sa´ıda de outro comando. Para tanto, basta usar um pipe. Exemplos: ~/arquivos$ lpr resumo.txt # imprime texto do arquivo resumo.txt ~/arquivos$ lpr resumo.txt -Pquati # imprime na impressora de nome "quati" ~/arquivos$ ls | lpr -#3 # imprime 3 c´opias da sa´ıda de ls 5.2.2 lpq O comando lpq informa quais arquivos (trabalhos) est˜ao na fila de impress˜ao. Sintaxe: lpq [op¸c~oes] Op¸c˜ao Descri¸c˜ao -Pimpr Especifica de qual impressora ser´a mostrada a fila de impress˜ao. -l Imprime informa¸c˜oes extras de cada arquivo da fila. Exemplo:
  • 47. ~/arquivos$ lpq lp is ready and printing Rank Owner Job Files Total Size active joao 797 listagem 51 bytes 1st joao 798 texto.txt 23 bytes Neste exemplo, existem dois trabalhos (jobs) na fila de impress˜ao, ambos pertencentes ao usu´ario joao. A coluna Rank informa a posi¸c˜ao de cada job na fila de impress˜ao; Owner indica o usu´ario dono; Job indica o n´umero de identifica¸c˜ao; Files indica os nomes dos arquivos em cada trabalho; Total Size informa o tamanho em bytes de cada job. No caso acima, o arquivo listagem est´a sendo impresso, enquanto que texto.txt aguarda na fila de impress˜ao. 5.2.3 lprm O comando lprm ´e utilizado para remover um determinado trabalho (job) da fila de impress˜ao. Para remover um trabalho ´e necess´ario ter permiss˜ao para isso. Normalmente, apenas o dono (owner) de um job pode removˆe-lo. Sintaxe: lprm [-Pimpressora] [<n´umero do job>] [<usu´ario dono>] Exemplos: Para remover o job de n´umero 798, que no exemplo anterior aguarda na fila de impress˜ao, usamos o comando: ~/arquivos$ lprm 798 Para remover todos os jobs do usu´ario joao que ainda est˜ao na fila da impressora de nome “quati”: ~/arquivos$ lprm -Pquati joao 5.3 Gerˆencia de processos Um processo nada mais ´e que um programa (comando) em execu¸c˜ao. Como no Linux podemos ter v´arios programas executando ao mesmo tempo, abordaremos nesta se¸c˜ao formas de se gerenciar esta variedade de processos. 5.3.1 ps O comando ps fornece informa¸c˜oes sobre os processos que est˜ao sendo executados na m´aquina. Sintaxe: ps [op¸c~oes] Op¸c˜ao Descri¸c˜ao a Mostra informa¸c˜oes sobre todos os processos de todos os usu´arios. Normalmente, ps imprime apenas os processos iniciados na se¸c˜ao atual. u Mostra o nome de usu´ario (login) dos donos de cada processo. w Mostra informa¸c˜oes completas, sem o limite de 80 colunas por linha. Exemplos: ~/arquivos$ ps PID TTY STAT TIME COMMAND 1199 p0 S 0:15 bash 1752 p0 S 0:12 emacs 1948 p0 R 0:00 ps Por hora, consideraremos apenas as colunas PID, TIME e COMMAND. A primeira informa o n´umero de identifica¸c˜ao do processo, a segunda informa h´a quanto tempo o processo foi iniciado e a terceira o nome do comando em execu¸c˜ao. Neste caso, o usu´ario est´a executando os comandos bash h´a 15 minutos, emacs h´a 12 minutos e acaba de executar o ps. Com a op¸c˜ao u obtemos outras informa¸c˜oes como o nome do dono de cada processo, o porcentagem de CPU e mem´oria utilizada pelo processo e tamanho da mem´oria utilizada por este (SIZE).
  • 48. ~/arquivos$ ps u USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND joao 16132 0.0 4.2 1876 1296 p0 S 13:47 0:00 bash joao 16207 0.6 13.7 5424 4152 p0 S 14:20 0:11 emacs joao 16299 0.0 1.8 920 568 p0 R 14:48 0:00 ps u Para ver tamb´em os processos de outros usu´arios: ~/arquivos$ ps au USER PID %CPU %MEM SIZE RSS TTY STAT START TIME COMMAND joao 16132 0.0 4.2 1876 1296 p0 S 13:47 0:00 bash joao 16207 0.6 13.7 5424 4152 p0 S 14:20 0:11 emacs joao 16999 0.0 1.8 920 568 p0 R 14:48 0:00 ps u paulo 16712 0.0 2.1 1964 1388 p0 S 05:03 0:00 -bash paulo 16772 0.0 2.0 2420 1304 p0 S 05:37 0:00 xclock root 16500 0.0 4.2 1876 1296 p0 S 3:15 0:00 bash 5.3.2 kill O comando kill ´e utilizado para mandar um sinal a um determinado processo, normalmente terminando-o. Sintaxe: kill [-<n´umero do sinal>] <PID> Como vimos anteriormente, o PID ´e o n´umero de identifica¸c˜ao do processo e pode ser obtido com o comando ps. Alguns dos sinais existentes s˜ao: N´umero Nome Descri¸c˜ao 2 INT interrompe o programa 3 QUIT faz o programa terminar 9 KILL mata o programa (n˜ao pode ser ignorado) Normalmente o comando kill manda um sinal para que o pr´oprio programa termine sua execu¸c˜ao por s´ı pr´oprio. Assim, ele pode, se necess´ario, salvar seus dados em disco por exemplo, antes de terminar. J´a o sinal 9 faz com que o processo seja terminado (morto) instantaneamente e incodicionalmente. Vejamos um exemplo: ~/arquivo$ ps PID TTY STAT TIME COMMAND 1199 p0 S 0:01 bash 1752 p0 S 0:12 emacs 1760 p0 R 0:00 ps ~/arquivos$ kill 1752 O ´ultimo comando do exemplo acima faz com que a o processo de PID igual a 1752 (emacs) termine a sua execu¸c˜ao. Caso o processo ignore o sinal enviado pelo comando kill (caso o processo “trave” e pare de responder) podemos termin´a-lo enviando o sinal de n´umero 9 (KILL): ~/arquivos$ kill -9 1752 Para verificar se o processo realmente morreu, basta utilizar o comando ps mais uma vez. Observe que podemos matar apenas os processos para os quais temos permiss˜ao de fazer isso. Normalmente, apenas o dono de cada processo tem permiss˜ao para mat´a-lo. 5.3.3 Foreground e Background Enquanto a shell aguarda o t´ermino da execu¸c˜ao de um comando antes de exibir o prompt para o pr´oximo comando, dizemos que este comando est´a sendo executado em foreground. Por outro lado, quando o prompt ´e liberado para o usu´ario antes do t´ermino da execu¸c˜ao de um comando, dizemos que este comando est´a sendo executado em background.
  • 49. Um processo em background tem as mesmas caracter´ısticas de um processo em foreground com uma ˙unica exce¸c˜ao: somente os processos em foreground podem receber dados do terminal. Para executarmos comandos em background basta um & no final da linha de comandos. Mas se vocˆe j´a executou o comando e quer deix´a-lo em background , vocˆe precisa digitar Ctrl Z, com isso o processo ´e suspenso e ao executar bg o processo vai para background. Executando fg o processo volta a foreground. Exemplo: No exemplo abaixo o programa netscape seria executado em foreground se a sequˆencia de comandos acima n˜ao fosse aplicada. $ netscape ^Z[1] + Stopped netscape $ bg [1] + netscape & 5.4 Compacta¸c˜ao Muitas vezes, faz-se necess´ario que armazenemos c´opias de seguran¸ca (backups) para v´arios arquivos, disperdi¸cando bastante espa¸co em disco. Em outros casos, precisamos transportar grandes quantidades de dados de uma m´aquina a outra. Tais dados podem n˜ao caber em um ´unico disquete, ou, ainda, a sua conex˜ao `a rede pode n˜ao ser r´apida o suficiente, resultando num tempo de transferˆencia de dados muito grande. Em qualquer uma dessas situa¸c˜oes, certamente, vocˆe achar´a muito proveitoso o uso dos comandos de compacta¸c˜ao de dados abordados nesta se¸c˜ao. 5.4.1 gzip O gzip ´e um aplicativo que utiliza o mesmo m´etodo de compacta¸c˜ao utilizado pelo programa pkzip, do MS-DOS. No geral, o comportamento do gzip ´e remover o(s) arquivo(s) de entrada e escrever um arquivo de sa´ıda compactado com o mesmo nome, mas com a extens˜ao .gz adicionada ao final deste. Sintaxe: gzip [op¸c~oes] <nome do arquivo> Se nenhum arquivo ´e especificado ou se o nome do arquivo ´e um “-”, a entrada padr˜ao ´e compactada e enviada `a sa´ıda padr˜ao. Pode ser especificado mais de um arquivo de uma vez. Sempre ser´a criado um arquivo compactado para cada arquivo especificado. Op¸c˜ao Descri¸c˜ao -c Envia dados compactados `a sa´ıda padr˜ao. -d Descompacta o arquivo especificado. -l Lista o arquivo compactado e os seguintes campos: tamanho do arquivo compactado, tamanho do arquivo descompactado, taxa de compacta¸c˜ao e nome do arquivo original. No exemplo abaixo, o comando compacta arq.txt, criando um arquivo chamado arq.txt.gz. Observe que o arquivo original ´e exclu´ıdo e no diret´orio resta apenas o arquivo compactado. ~/arquivos$ gzip arq.txt ~/arquivos$ ls arq* arq.txt.gz Para descompactar o arquivo: ~/arquivos$ gzip -d arq.txt.gz ~/arquivos$ ls arq* arq.txt 5.4.2 zcat e gunzip O zcat e o gunzip s˜ao aplicativos que descompactam arquivos compactados com o gzip. Essencialmente, eles funcionam da mesma maneira. Na verdade zcat ´e o mesmo que “gunzip -c”. Ou seja, ele descom- pacta os dados e os envia `a sa´ıda padr˜ao. O comportamento padr˜ao do gunzip ´e descompactar o arquivo e remover o arquivo compactado. Sintaxes:
  • 50. zcat [op¸c~oes] <nome do arquivo> gunzip [op¸c~oes] <nome do arquivo> As op¸c˜oes s˜ao as mesmas que para o gzip. O comando abaixo descompacta o arquivo arq.txt.gz, criando um arquivo chamado arq.txt. ~/arquivos$ gunzip arq.txt.gz Se quis´essemos apenas mostrar na tela o conte´udo do arquivo texto compactado: ~/arquivos$ zcat arq.txt.gz 5.4.3 tar O tar ´e um aplicativo que tem por finalidade arquivar programas, ou seja, guardar uma s´erie de arquivos dentro de apenas um arquivo. A finalidade de se arquivar programas pode ser para criar um grande arquivo e depois dividi-lo em partes (por exemplo, para guardar em v´arios disquetes), guardar em uma fita dat, compactar, etc. Programas como o conhecido pkzip s˜ao, na verdade, uma combina¸c˜ao de arquivadores com compactadores. Sintaxe: tar [op¸c~oes] <lista de arquivos> Onde lista de arquivos ´e constitu´ıda por nomes de arquivos separados por espa¸cos em branco. Se a op¸c˜ao “f” n˜ao for utilizada, o arquivamento ´e enviado `a sa´ıda padr˜ao. Op¸c˜ao Descri¸c˜ao x Extrai arquivos de um arquivo. c Arquiva a lista de arquivos. v Modo “verboso”, ou seja, `a medida que o (des)arquivamento ocorre, mostra na tela mensagens sobre o arquivo sendo precessado. z Usa o gzip como filtro, ou seja, (des)compacta os arquivos durante o processo. f <arq> Especifica que os arquivos da lista devem ser arquivados no arquivo de nome arq. M Arquiva em multiplos volumes (disquetes, por exemplo). ´E interessante observar que o tar trabalha recursivamente, ou sejam, caso um dos arquivos especificado para arquivar seja um diret´orio, todos os seus arquivos e subdiret´orios tamb´em ser˜ao arquivados e ter˜ao sua estrutura original mantida. Resaltamos tamb´em que, diferentemente do gzip o tar preserva os arquivos originais, n˜ao revendo-os como o outro comando faz. Exemplos: Arquivar todos os arquivos do diret´orio atual no arquivo arq1.tar: ~/arquivos$ tar cf arq1.tar * Arquivar e compactar os arquivos do diret´orio atual em arq2.tar.gz1 : ~/arquivos$ tar czf arq2.tar.gz * Descompactar e extrair de arq2.tar.gz apenas um arquivo chamado texto.txt: ~/arquivos$ tar xzf arq2.tar.gz texto.txt Arquivar toda a sua ´area pessoal em disquetes: ~/arquivos$ tar cMf /dev/fd0 ~ Quando arquivamos em m´ultiplos volumes, como neste ´ultimo exemplo, o tar n˜ao aceita a op¸c˜ao “z”. Assim, para economizarmos disquetes, ´e melhor primeiro compactarmos os dados e depois arquivarmo-los em m´ultiplos volumes. Isto fica como exerc´ıcio para vocˆe (dica: vocˆe deve usar duas vezes o comando tar). 1As extens˜oes .tar.gz e .tgz s˜ao usualmente utilizadas para identificar arquivos gerados com a combina¸c˜ao do tar com o gzip.
  • 51. 5.5 Comandos ´uteis 5.5.1 split O comando split quebra um determinado arquivo em varias partes cujo tamanho ´e indicado na sintaxe: split -b <tamanho de cada parti¸c~ao> <nome do arquivo> O tamanho ´e indicado em bytes. Para indicar o tamanho em kilobytes ou megabytes deve-se acres- centar os sufixos k ou m respectivamente ap´os o tamanhocomo no exemplo: split -b 100k foto.jpg Tal comando dividiria o arquivo foto.jpg em varios arquivos com 100 kbytes cada. Mas cuidado ao escolher o tamanho para quebrar arquivos muito grandes ou quebrar um arquivo em peda¸cos muito pequenos. 5.5.2 df O comando df ´e utilizado para obter o espa¸co dispon´ıvel em cada parti¸c˜ao dos discos da m´aquina. Sintaxe: df [op¸c~oes] Op¸c˜ao Descri¸c˜ao -h Apresenta os valores utilizando como unidade o kilobyte (K), o megabyte (M) e o gigabyte (G), o que for mais apropriado `a grandeza de cada valor. -k Apresenta os valores utilizando como unidade o kilobyte (K). -m Apresenta os valores utilizando como unidade o megabyte (M). Exemplos: ~$ df Filesystem 1024-blocks Used Available Use% Mounted on /dev/hda4 4222295 3163808 840003 79% / /dev/hda2 256590 21 243316 0% /tmp /dev/hda3 1484386 847188 560488 60% /home ~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/hda4 4.0G 3.0G 820M 79% / /dev/hda2 251M 21K 238M 0% /tmp /dev/hda3 1.4G 827M 547M 60% /home O segundo comando do exemplo nos mostra que na parti¸c˜ao do diret´orio raiz (/) est˜ao dispon´ıveis 820 megabytes de um total de 4 gigabytes; na parti¸c˜ao do diret´orio /home, onde est˜ao os dados pessoais dos usu´arios, est˜ao dispon´ıveis 547 megabytes de um total de 1,4 gigabyte; na parti¸c˜ao dos arquivos tempor´arios, utilizada por diversos aplicativos, est˜ao dispon´ıveis 238 de um total de 251 megabytes. 5.5.3 du O comando du ´e usado para descobrir qual ´e o espa¸co ocupado por um diret´orio ou conjunto de arquivos. Esse comando funciona de maneira recursiva, ou seja, para obter o tamanho de um diret´orio, ele verifica o tamanho de todos os subdiret´orios deste diret´orio. Sintaxe: du [op¸c~oes] Op¸c˜ao Descri¸c˜ao -h Apresenta os valores utilizando como unidade o kilobyte (K), o megabyte (M) e o gigabyte (G), o que for mais apropriado `a grandeza de cada valor. -k Apresenta os valores utilizando como unidade o kilobyte (K). Est´a ´e o op¸c˜ao padr˜ao. -m Apresenta os valores utilizando como unidade o megabyte (M). -s Apresenta apenas o valor total, omitindo subtotais dos subdiret´orios. Por exemplo, para obtermos a quantidade de dados contida sob o atual diret´orio de trabalho (.):
  • 52. ~/documentos$ du 4377 ./Linux 5231 . ~/documentos$ du -s 5231 . ~/documentos$ du -sh 5.1M . 5.6 Comandos de Busca 5.6.1 find Procura um arquivo dentro de toda uma hierarquia de diret´orios, imprimindo o caminho a partir do diret´orio atual se o arquivo for encontrado. Sintaxe: find <caminho> <op¸c~oes> Onde caminho indica o diret´orio a partir do qual deve ser iniciada a busca quando n˜ao epecificado, esta ser´a feita no diret´orio corrente. Op¸c˜oes Descri¸c˜ao -name <nome do arquivo> Procura atrav´es de um nome do arquivo -iname <nome do arquivo> Procura atrav´es de um nome de arquivo, sem diferenciar letras mai´usculas e min´usculas. -size <n> Procura arquivos atrav´es de seu tamanho, +n para arquivos mai- ores que n , -n para arquivos menores que n, e n para arquivos de tamanho n. O n pode ser expresso em kilobytes, megabytes e gigabytes atrav´es dos sulfixos k, m e g respectivamente. No caso do uso de metaracteres o nome do arquivo deve ser quotado (colocado entre aspas) para que seja obtido o resultado desejado, garantindo que a expans˜ao ser´a realizada pelo comando e n˜ao pela shell. Por exemplo, queremos procurar todos os arquivos jpg que possuem um tamanho maior que 50k no diret´orio corrente. ~$ find . -name "*.jpg" -size +50k ./oceans.jpg ./sistema_todo.jpg ~$ 5.6.2 which O comando which ´e usado para verificar em que diret´orio se encontra um determinado comando. Por´em, which s´o funciona para comandos cujo diret´orio est´a incluso na lista de diret´orios da vari´avel PATH. Sintaxe: which <nome do comando> Exemplos: ~$ which man /usr/bin/man ~$ which which /usr/bin/which 5.7 Exerc´ıcios 1. Descreva o procedimento necess´ario para listar todos os programas em execu¸c˜ao na m´aquina, e como seria poss´ıvel identificar a quem pertence cada um.
  • 53. 2. Suponha agora que vocˆe quer listar apenas os processos referentes ao usu´ario cujo username ´e joao. Qual seria o procedimento necess´ario? 3. Suponha que vocˆe tenha acionado um programa e, por alguma raz˜ao qualquer, este programa travou. Descreva que procedimento deveria ser tomado para finalizar o programa. 4. Existe um determinado arquivo chamado lista alunos em algum subdiret´orio de seu diret´orio pes- soal, mas vocˆe esqueceu onde ele se encontra. Como vocˆe faria para encontr´a-lo? 5. Um determinado diret´orio cont´em cinco arquivos chamados lista1, lista2, etc. Cada arquivo possui uma lista com nomes de pessoas que v˜ao se increver em um curso. Quais os comandos necess´arios para combinar todos os arquivos, ordenar alfabeticamente todos os nomes e gravar a lista ordenada em um arquivo chamado lista alfabetica ? 6. Suponha que vocˆe tem um diret´orio chamado bin, dentro do seu diret´orio pessoal, e cujo conte´udo ´e uma s´erie de pequenos aplicativos. O que vocˆe deve fazer para que os arquivos deste diret´orio possam ser executados sem que seja necess´ario especificar o seu caminho absoluto (i.e., ~/bin/prog)? 7. Usando o mesmo procedimento do exerc´ıcio anterior, al´em do diret´orio bin, foi especificado mais uma s´erie de diret´orios sob o seu diret´orio pessoal. Suponha que vocˆe esqueceu onde se encontra um programa chamado limpa. Descreva duas maneiras de encontrar a posi¸c˜ao exata deste programa. 8. Explique a diferen¸ca entre os aplicativos zcat e gunzip. Qual deles ´e mais gen´erico? 9. No seu diret´orio pessoal, existe um arquivo chamado relatorio duplicado em um diret´orio chamado documentos. Descreva o procedimento completo para saber qual deles ´e mais recente e se existe alguma diferen¸ca entre eles. 10. Em um diret´orio chamado trabalhos existem v´arios arquivos de v´arios tipos. Descreva o procedi- mento para: (a) criar um arquivo com a lista de todos os arquivos deste diret´orio, armazenando seu respectivo tipo; (b) criar um arquivo com a lista de todos os arquivos deste diret´orio, mas armazenando apenas aqueles iniciados por arq. 11. Crie um diret´orio chamado “juncao” e copie o arquivo .bashrc para dentro desse diret´orio. Em seguida, divida o arquivo .bashrc em varios arquivos de 400 bytes. 12. Junte novamente cada uma das pe¸cas do arquivo segmentado no exerc´ıcio anterior.
  • 55. Cap´ıtulo 6 Editor vi Um editor de texto ´e simplesmente um programa usado para editar arquivos que podem conter textos, como uma carta, programas em alguma linguagem de programa¸c˜ao ou um arquivo de configura¸c˜ao do sistema. A escolha de um editor de textos ´e basicamente uma quest˜ao pessoal. Apesar dos in´umeros editores de textos dispon´ıveis para sistemas Linux/Unix, o ´unico com presen¸ca garantida em todos ´e o vi – ”visual editor”. O vi n˜ao ´e o editor mais f´acil de ser usado e muito menos ´e auto-explicativo. Por isto, muitos preferem o emacs, um editor com mais recursos e facilidades que o vi. Entretanto, devido ao fato do emacs e todos os seus arquivos de suporte serem relativamente grandes, podemos encontrar situa¸c˜oes em que o seu uso n˜ao esteja dispon´ıvel em alguns sistemas. Por outro lado, o vi ´e pequeno, extremamente r´apido e poderoso, apesar de ser relativamente mais dif´ıcil de usar (at´e que se adquira o h´abito). Al´em disso, pelo fato de o vi ser t˜ao comum no mundo Linux/Unix, h´a necessidade de uma breve explica¸c˜ao neste cap´ıtulo. N˜ao discutiremos todas as suas caracter´ısticas mas sim aquelas necess´arias para uma breve introdu¸c˜ao. No cap´ıtulo seguinte veremos o emacs. 6.1 Conceitos A grande diferen¸ca entre o vi e os outros editores comumente encontrados nos sistemas Unix ´e que estes ´ultimos iniciam diretamente em modo de edi¸c˜ao. Comandos s˜ao acionados com o aux´ılio de teclas especiais como CTRL, ALT, DEL, BACKSPACE, teclas de fun¸c˜ao (F1...F12) ou ent˜ao com aux´ılio do mouse. No vi, comandos s˜ao feitos sem estes recursos. Por esta raz˜ao, precisamos informar ao vi quando queremos digitar a letra “a” e quando queremos executar o comando associado a essa letra, por exemplo. Por isto, durante o uso deste editor, estamos a todo instante em um dos seus trˆes modos de opera¸c˜ao. Estes modos s˜ao conhecidos como modo comando, modo de inser¸c˜ao e modo linha. Quando iniciamos o vi, estamos em modo comando. Este modo permite o uso de certos comandos para editar arquivos ou mudar para outros modos. Por exemplo, digitando “x” enquanto estivermos no modo comando podemos apagar o caracter sob o cursor. As teclas de direcionamento (←, →, ↑ e ↓) movem o cursor pelo arquivo que estamos editando. Geralmente, os comandos usados no modo comando possuem um ou dois caracteres. Podemos efetivamente inserir e editar textos no modo de inser¸c˜ao. Sa´ımos do modo comando e iniciamos este modo com o comando “i” (insert). Enquanto estivermos no modo de inser¸c˜ao estaremos inserindo textos no documento a partir da localiza¸c˜ao corrente do cursor. Para finalizar este modo e retornar ao modo comando, pressione a tecla ESC. Modo linha ´e um modo especial para certos comandos extendidos do vi. Enquanto digitamos estes comandos, eles aparecem na ´ultima linha da tela. Por exemplo, quando digitamos “:” no modo comando, estaremos indo para o modo linha e podemos usar comandos como “wq” (para salvar o arquivo e sair do vi) ou “q!” (para sair do vi sem salvar as altera¸c˜oes). O modo linha ´e geralmente usado para comandos que possuem mais de um caracter de extens˜ao. Neste modo podemos entrar com uma linha de comando e pressionar enter para execut´a-la. 49
  • 56. 6.2 In´ıcio do vi A melhor maneira de entender estes conceitos ´e realmente editando um texto. No exemplo seguinte estaremos mostrando apenas algumas linhas de texto, como se ele tivesse apenas seis linhas. A sintaxe do vi ´e: vi <nome do arquivo> Iniciaremos o vi digitando “vi test” e estaremos editando o arquivo test. Veremos algo como: ~ ~ ~ ~ ~ ~ "test" [New file] . A coluna de caracteres “~” indica que estamos no final do arquivo. 6.3 Inser¸c˜ao de texto Estamos agora no modo comando. Para inserir textos no arquivo precisamos passar para o modo de inser¸c˜ao pressionando “i” (inserir sob o cursor). Em seguida podemos digitar o texto, como no exemplo abaixo: Now is the time for all good men to come to the aid of the party. ~ ~ ~ ~ ~ Para finalizar o modo de inser¸c˜ao e retornar ao modo comando basta pressionar ESC. Enquanto estivermos no modo comando podemos usar as teclas de posicionamento para “caminhar” pelo texto. Neste exemplo, por termos apenas uma linha de texto as teclas de posicionameto para cima ou para baixo provavelmente causar˜ao um “beep” (som) do vi. Existem v´arias maneiras de inserir um texto, que n˜ao seja usando o comando “i”. Por exemplo, o comando “a” insere textos ap´os a posi¸c˜ao corrente do cursor, ao inv´es da posi¸c˜ao atual. Usaremos a tecla de posicionamento para esquerda para mover o cursor (“ ”) entre as palavras “good” e “men”. Now is the time for all good_men to come to the aid of the party. ~ ~ ~ ~ ~ Pressionando “a”, para iniciar o modo de inser¸c˜ao, digitamos “wo”, e ent˜ao pressionamos ESC para retornar ao modo comando. Assim, transformamos a palavra “men” em “women”. Now is the time for all good women to come to the aid of the party. ~ ~ ~ ~ ~
  • 57. Para come¸car inserindo textos na linha abaixo da linha corrente, usamos o comando “o”. Por exemplo, pressione “o” e digite outra linha de texto. Now is the time for all good women to come to the aid of the party. Afterwards, we’ll go out for pizza and beer. ~ ~ ~ ~ Lembre-se que a todo momento estamos em um dos trˆes modos de opera¸c˜ao: modo comando (no qual executamos comandos como “i”, “o” e “a”), modo de inser¸c˜ao (no qual inserimos texto, seguido de ESC para retornar ao modo comando) ou modo linha (no qual executamos comandos extendidos). 6.4 Apagando textos No modo comando, “x” apaga o caracter sob o cursor. Se pressionarmos “x” cinco vezes teremos: Now is the time for all good women to come to the aid of the party. Afterwards, we’ll go out for pizza and_ ~ ~ ~ ~ Pressionando “a”, podemos inserir algum texto e retornar ao modo comando pressionando ESC. Now is the time for all good women to come to the aid of the party. Afterwards, we’ll go out for pizza and soda_ ~ ~ ~ ~ Podemos apagar linhas inteiras usando o comando “dd” (isto ´e, pressionando a tecla “d” duas vezes). Se o cursor estiver na terceira linha e digitarmos “dd” teremos: Now is the time for all good women to come to the aid of the party. ~ ~ ~ ~ ~ Para apagarmos a palavra em que o cursor est´a posicionado usamos o comando “dw”. Posicionamos o cursor sobre a ´ultima palavra “the” e digitamos “dw”. Now is the time for all good women to come to the aid of party. ~ ~ ~ ~ ~ Temos ainda os comandos “d$” que apagar´a tudo a partir do cursor at´e o final da linha e “dG” que apagar´a tudo a partir do cursor at´e o final do arquivo.
  • 58. 6.5 Alterando textos Podemos substituir partes de textos usando o comando “R”. Posicionando o cursor na primeira letra de “women”, pressionando “R” e digitando a palavra “children” teremos: Now is the time for all good children to come to the aid of party. ~ ~ ~ ~ ~ Usar “R” para editar textos ´e como usar os comandos “i” e “a”. “R” sobrescreve textos ao inv´es de somente inser´ı-los. O comando “r” substitui um ´unico caracter sobre o cursor. Por exemplo, movendo o cursor para o come¸co da palavra “Now”, pressionando “r” seguido de “C”, teremos: Cow is the time for all good children to come to the aid of party. ~ ~ ~ ~ ~ O comando “~” altera as letras sobre o cursor de mai´usculas para min´usculas e vice-versa. Por exemplo, posicionando o cursor na letra “o” da palavra “Cow” acima e pressionando repetidamente “~” teremos: COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF PARTY. ~ ~ ~ ~ ~ 6.6 Comandos de movimenta¸c˜ao J´a sabemos como usar as teclas de posicionamento para “caminhar” pelo documento. Al´em disso, po- demos usar os comandos “h”, “j”, “k” e “l” para movimentar o cursor para esquerda, para baixo, para cima e para direita respectivamente. O comando “w” move o cursor para o come¸co da pr´oxima palavra e “b” move para o come¸co da palavra anterior. O comando “0” (zero) move o cursor para o come¸co da linha corrente e o comando “$” para o final da linha. Quando estamos editando arquivos muito grandes provavelmente queremos movimentar o cursor para frente e para tr´as uma p´agina de cada vez. Pressionando CTRL-F movemos o cursor uma p´agina para frente e CTRL-B move uma p´agina para tr´as. Para mover o cursor para o fim do arquivo usamos “G”. Podemos tamb´em, mover para um linha arbitr´aria; por exemplo o comando “10G” move o cursor para a linha 10 do arquivo. 6.7 Salvando arquivos e saindo do vi Quando digitamos o caracter “:”, o cursor se move para a ´ultima linha da tela; estamos, portanto, no modo linha.
  • 59. COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF PARTY. ~ ~ ~ ~ :_ No modo linha, podemos usar certos comandos como “q!” que sai do vi sem salvar o arquivo. O comando “wq” salva o arquivo e ent˜ao sai do vi. O comando “ZZ”, no modo comando, ´e equivalente a “wq” no modo linha. Lembre-se que devemos pressionar ENTER ap´os o comando no modo linha. Para salvar o arquivo sem sair do vi, usamos apenas “w”. 6.8 Editando outro arquivo Para editar outro arquivo usamos o comando “:e”. Por exemplo, para parar de editar o arquivo test e editar o arquivo foo, usamos este comando. COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF PARTY. ~ ~ ~ ~ :e foo_ Se usarmos :e sem salvar o arquivo antes, teremos uma mensagem de erro indicando que o vi n˜ao quer editar outro arquivo sem o primeiro seja salvo antes. Neste momento, podemos usar “:w” para salvar o arquivo para ent˜ao usar “:e” ou podemos usar o comando “:e!”. O ”!”faz com que o vi edite um novo arquivo sem que o primeiro seja salvo. COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF PARTY. ~ ~ ~ ~ :e! foo_ 6.9 Incluindo outros arquivos Se usarmos o comando “:r” podemos incluir o conte´udo de outros arquivos no arquivo corrente. Assim, “:r carta.txt” inserir´a o conte´udo do arquivo carta.txt na posi¸c˜ao atual do cursor no arquivo corrente. Outro comando muito ´util ´e “:split” que divide a tela atual com o arquivo aberto por este comando. Fazemos isso digitando “:split ¡nome do arquivo¿”. 6.10 Mudando de janela dentro do VI Para mudarmos de janelas usamos o comando “ctrl-w ↑” ou “ctrl-w ↓” que alterar˜ao o cursor para a janela superior a atual e inferior a atual, respectivamente.
  • 60. 6.11 Executando comandos shell Podemos tamb´em executar comandos de shell no vi. O comando “:r!” trabalha como o “:r” mas ao inv´es de ler o arquivo, ele insere a sa´ıda do comando dado na posi¸c˜ao corrente do cursor no buffer atual. Por exemplo, se usarmos do comando “:r! ls -F” teremos: COW IS THE TIME FOR ALL GOOD CHILDREN TO COME TO THE AID OF PARTY. letters/ misc/ papers/_ ~ Podemos tamb´em executar um comando no vi e retornar ao editor quando o comando estiver conclu´ıdo. Por exemplo, o comando “:! ls -F” ser´a executado e o resultado ser´a exibido mas n˜ao ser´a inserido no arquivo que est´a sendo editado. Se usarmos o comando “:shell” o vi inicializar´a uma instˆancia do shell, permitindo executar outros comandos enquanto o vi fica “pendurado”. Para retornar a edi¸c˜ao basta usar o comando exit. 6.12 Resumo dos principais comandos do vi Iniciando o vi vi <nome do arquivo> abre ou cria o arquivo especificado vi +18 <nome do arquivo> abre e posiciona o cursor na linha 18 vi +/’teste’ <nome do arquivo> abre o arquivo na primeira incidˆencia da palavra “teste” view <nome do arquivo> abre o arquivo somente para leitura Comandos de cursor h move para esquerda j move para baixo k move para cima l move para direita w move uma palavra para direita W move uma palavra para direita (al´em da pontua¸c˜ao) b move uma palavra para esquerda B move uma palavra para esquerda (al´em da pontu¸c˜ao) Enter move uma linha para baixo Backspace move um caracter `a esquerda Espa¸co move um caracter `a direita H move para o in´ıcio da tela M move para o meio da tela L move para o final da tela ctrl-f avan¸ca uma tela ctrl-d avan¸ca um tela ctrl-b retorna uma tela ctrl-u retorna uma tela G vai para ´ultima linha do arquivo 21G vai para linha 21 Inserindo caracteres e linhas a insere caracter `a direita do cursor A insere caracter `a direita do cursor e sinaliza fim de linha i insere caracter `a esquerda do cursor I insere caracter `a esquerda do cursor e sinaliza fim de linha o insere linha abaixo do cursor O insere linha acima do cursor
  • 61. Alterando texto cw altera palavra (ou parte da palavra `a esquerda do cursor) cc altera linha C altera parte da linha `a direita do cursor J junta a linha corrente com a linha abaixo xp muda o caracter que o cursor est´a posicionado com o caracter `a direita ~ altera letra (min´uscula/mai´uscula) u desfaz comando anterior U desfaz todas as altera¸c˜oes da linha :u desfaz o comando anterior da linha Apagando texto x apaga caracter dw apaga palavra (ou parte da palavra `a direita do cursor) dd apaga linha D apaga parte da linha `a direita do cursor 5,10d apaga linhas de 5 a 10 Copiando ou movendo texto yy ou Y marca linha a ser copiada p copia linha marcada abaixo da linha corrente P copia linha marcada acima da linha corrente dd apaga linha (ao inv´es de copiar) 1,2 co 3 copia linhas 1 e 2 colocando ap´os a linha 3 4,5 m 10 move linhas 4 e 5 colocando ap´os a linha 10 Visualizando numera¸c˜ao e procurando linhas set nu mostra linhas numeradas set nonu inibe a numera¸c˜ao de linhas Procurando e alterando /string/ procura a “string” ?string? procura a “string” no texto acima n procura pr´oxima ocorrˆencia da string : %s/string1/string2/ & substitui string1 por string2 %s/string1/string2/g & substitui string1 por string2 at´e o final o arquivo %s/string1/string2/c & substitui string1 por string2 mas perguntando a cada altera¸c~ao Limpando a tela ctrl-l limpa a tela Inserindo, salvando e cancelando arquivo r <nome do arquivo> insere arquivo depois do cursor 34 <nome do arquivo> insere arquivo ap´os linha 34 w salva as altera¸c˜oes (no buffer) w <nome do arquivo> salva o buffer no arquivo wq ou ZZ salva altera¸c˜oes e sai do vi q! sai do vi sem salvar altera¸c˜oes
  • 62. Atribuindo n´umeros a comandos Todo comando pode receber um n´umero, por exemplo: 3x apaga 3 caracteres 3dd apaga 3 linhas 3yy marca 3 linhas
  • 63. Cap´ıtulo 7 Emacs O GNU Emacs ´e uma das ferramentas mais utilizadas no mundo Linux/Unix. Este cap´ıtulo pretende dar uma breve introdu¸c˜ao ao uso do Emacs como um editor de texto, mas trata-se de uma ferramenta que pode ser utilizada para v´arios outros fins. Para inicializar o Emacs simplesmente digitamos emacs seguido do nome do arquivo que queremos editar. Se usarmos um nome de arquivo inexistente, o editor cria um novo arquivo com o nome digitado. 7.1 Buffers Quando o Emacs edita um arquivo, o conte´udo deste ´e copiado para um buffer. Podemos ent˜ao alterar este buffer com os comandos de edi¸c˜ao do Emacs, e quando terminarmos, podemos gravar no arquivo original o conte´udo do buffer. ´E importante compreender que as modifica¸c˜oes no buffer n˜ao alteram o arquivo original. Caso haja algum problema durante a edi¸c˜ao, podemos terminar a execu¸c˜ao do editor sem que o arquivo seja modificado. Entretanto, existe um pre¸co a ser pago por esta seguran¸ca. Se o sistema cair podemos perder todas as modifica¸c˜oes que j´a fizemos. O Emacs permite editar v´arios buffers simultaneamente e os conte´udos destes buffers podem ser exibidos na tela ao mesmo tempo. Normalmente, os buffers s˜ao criados a partir de uma c´opia de um arquivo. Entretanto, veremos que um buffer pode ser criado por outros m´etodos. Assim, nem sempre um buffer esta associado a um arquivo. 7.2 Layout da tela Este cap´ıtulo pressup˜oe que o Emacs est´a sendo usado em um terminal ou janela no X-Window. Neste contexto, a tela ´e toda a tela do teminal ou simplesmente uma janela no X-Window. O Emacs divide a janela em duas partes. A ´ultima linha da tela, que ´e utilizada para exibir mensagens e perguntas, ´e denominada linha de eco. Digitar sobre a linha de eco ´e como digitar comandos no sistema operacional. Veremos mais detalhes adiante. O resto da tela ´e preenchido com as janelas de texto do Emacs. Note que o Emacs tem sua pr´opria no¸c˜ao de janela a qual pode ser manipulada pelo editor de uma maneira um pouco diferente `a de um gerenciador de janelas. Quando o Emacs ´e inicializado pela primeira vez, existe somente uma janela e ela preenche a tela inteira. Janelas podem ser criadas, destru´ıdas e ter seu tamanho ajustado usando os comandos do editor. Cada janela de texto pode mostrar o buffer inteiro ou parcialmente. 7.3 Linha de modo A pen´ultima linha da janela (a linha normalmente em modo de v´ıdeo reverso) ´e a linha de modo (mode line) para a janela. Ela cont´em informa¸c˜oes sobre o que est´a sendo mostrado na janela. Linhas de modo separam as janelas uma das outras e das linhas de eco. Trˆes ´areas importantes podem ser mostradas na linha de modo: o indicador de mudan¸ca no conte´udo do buffer, o nome do buffer e o nome do arquivo. 57
  • 64. Uma janela est´a sempre mostrando os dados de um buffer. O nome do buffer que est´a na janela ´e mostrado na linha de modo, `a esquerda. Um buffer pode ter um arquivo associado a ele. Nesse caso, ´e o nome do arquivo que ´e mostrado na linha de modo. O Emacs sabe se um buffer foi modificado desde a ´ultima vez que foi escrito no seu respectivo arquivo. Ele informa isso ao usu´ario mostrando um “**” na linha de modo. Quando as modifica¸c˜oes s˜ao salvas (gravadas) no arquivo, o “**” se transforma em “--”, indicando que o conte´udo atual do buffer n˜ao sofreu nenhuma altera¸c˜ao e seus dados s˜ao os mesmos que os do arquivo. 7.4 Linha de eco A linha de eco tem dois prop´ositos: mostrar mensagens e fazer perguntas. Dois tipos de mensagens s˜ao exibidas na linha de eco. Mensagens apenas informativas, que n˜ao implicam na existˆencia de algo de errado, e mensagens de erro, que indicam que algo est´a impedindo que um comando seja executado. Estas podem ser acompanhadas por um beep sonoro. A linha de eco ´e normalmente apagada quando uma outra tecla ´e pressionada. Esta linha tamb´em pode ser usada para fazer e responder perguntas. Depois do prompt, podemos digitar qualquer caracter. A reposta ´e sempre terminada por ENTER. Antes de responder, pode-se tamb´em remover caracteres pessionando-se Ctrl-d. Pode-se tamb´em cancelar um comando digitando Ctrl-g. O processamento dos comandos ´e tal que todas as perguntas s˜ao feitas antes que aqueles com consequˆencias mais s´erias sejam executados. Assim, nunca se danifica nada ao abortar um comando. 7.5 Comandos Os comandos do Emacs s˜ao acionados, basicamente, atrav´es de combina¸c˜oes de teclas, geralmente in- cluindo as teclas Ctrl e Esc. Estes comandos s˜ao interpretados imediatamente (i.e. o editor n˜ao espera que seja pressionada a tecla ENTER). Terminar uma edi¸c˜ao A primeira coisa a aprender sobre qualquer programa interativo ´e como termin´a-lo. Quando terminarmos a edi¸c˜ao, precisamos finalizar o editor. O Emacs n˜ao grava automaticamente um arquivo quando ´e finalizado. Entretanto, ele emite um aviso para que isso n˜ao seja esquecido. Ctrl-x Ctrl-c ´e o comando b´asico para sair. Saindo do Emacs, o controle volta para o shell. Se houver algum buffer modificado que ainda n˜ao tenha sido gravado, o Emacs pede permiss˜ao para encerrar. Movimenta¸c˜ao do cursor Ctrl-a Move o cursor para o in´ıcio do par´agrafo. Ctrl-b Retrocede um caracter (back). Esc-b Retrocede uma palavra. Ctrl-e Move o cursor para o fim da do par´agrafo (end). Ctrl-f Avan¸ca um caracter (foward). Esc-f Avan¸ca uma palavra. Ctrl-n Move para a pr´oxima linha (next). Ctrl-p Move para a linha anterior (previous). Ctrl-v Move para a pr´oxima tela. Esc-v Move para a p´agina anterior. Esc-< Move para o come¸co do buffer. Esc-> Move para o fim do buffer. Esc-c Move o cursor para o fim da palavra, convertendo todos os caracteres da palavra em min´usculos exceto o primeiro que ´e convertido em mai´usculo (capitalize). Esc-l Move o cursor para o fim da palavra convertendo todos os caracteres em min´usculos (lower-case). Esc-u Similar ao Esc-l convertendo os caracteres em mai´usculos (upper-case).
  • 65. Atualmente, os teclados possuem teclas especiais que simplificam a edi¸c˜ao. As teclas das setas podem servir para movimentar o cursor. A de seta para esquerda funciona como o Ctrl-b, a de seta para direita como Ctrl-f, a de seta para cima como um Ctrl-p e a de seta para baixo como um Ctrl-n. Inser¸c˜ao ENTER Funciona como esperar´ıamos que funcionasse: insere um caracter de nova linha. Uma linha pode ser particionada movendo-se o cursor at´e o ponto desejado e inserindo um caracter de nova linha. Ctrl-m Idˆentico ao ENTER. Ctrl-o Cria uma linha em branco. Mais precisamente, o comando insere uma nova linha como o Ctrl-m e volta para cima como um Ctrl-b. Ctrl-q Caracteres que tem significado especial para o Emacs podem ser inseridos no buffer com este comando. O caracter que segue o Ctrl-q ´e simplesmente inserido no buffer, desprovido de qualquer significado. Remo¸c˜ao Existem duas classes de comandos que removem texto de um buffer. Os comandos de dele¸c˜ao removem o texto do buffer. Os comandos de “kill” removem o texto do buffer, mas salvam o texto num buffer especial chamado de kill buffer, possibilitando que o texto seja recuperado posteriormente. Os comandos de edi¸c˜ao limpam o kill buffer somente se o comando anterior n˜ao foi um kill. M´ultiplos kill, executados em seguida ir˜ao agregar texto ao este buffer. Ctrl-d Remove um caracter `a direita do cursor (delete). Del Remove um caracter `a esquerda do cursor. Ctrl-k Este ´e o comando b´asico de kill. Ele remove o texto a partir do ponto at´e o fim da linha. O texto ´e transferido para o kill buffer. Ctrl-w Remove toda a regi˜ao entre a marca e o cursor (wipe). O texto nela contido ´e trans- ferido para o kill buffer. Ctrl-y Insere o texto do kill buffer para o buffer corrente (yank). Note que o conte´udo do kill buffer n˜ao ´e destru´ıdo quando ele ´e copiado para o buffer corrente. Assim, o texto no kill buffer pode ser copiado repetidamente, obtendo-se m´ultiplas c´opias de um trecho do texto. Convers˜ao de letras Em adi¸c˜ao aos comandos de convers˜ao de letras em palavras, o Emacs possui comandos para a modifica¸c˜ao de letras em regi˜oes de texto. Esses comandos devem ser usados com cautela porque eles podem causar danos a (potencilamente) grandes ´areas do buffer. Ctrl-x Ctrl-l Converte para min´usculas todas as letras da regi˜ao marcada. Ctrl-s Ctrl-u Converte para mai´usculas todas as letras da regi˜ao marcada. Busca Os comandos de busca (search) percorrem o buffer, tanto para frente como para tr´as, procurando por um texto solicitado. Uma busca come¸ca t˜ao logo seja digitado o primeiro caracter na string de busca. Conforme digitamos, o Emacs procura, no texto, a sequˆencia digitada. A busca pode ser interrompida digitando-se Esc ou qualquer comando que n˜ao tenha significado no processo de procura. Caracteres mai´usculos e min´usculos n˜ao s˜ao diferenciandos.
  • 66. Ctrl-s Busca para frente a partir da posi¸c˜ao corrente at´e o final do buffer (search). Se cometermos um engano ao digitar a string de procura, podemos apagar caracteres com a tecla Del. A cada vez em que se pressiona esta tecla, o ´ultimo caracter da string de procura ´e cancelado. Pressionando Ctrl-s novamente fazemos com que o cursor seja movido para a pr´oxima ocorrˆencia da string no texto. Isso pode ser repetido v´arias vezes. Pode-se repetir a procura da ´ultima string digitando Ctrl-s Ctrl-s. Ctrl-r Realiza uma busca no sentido reverso (para tr´as), a partir da posi¸c˜ao corrente at´e o in´ıcio do buffer. Esc-% Realiza a substitui¸c˜ao de uma seq¨uˆencia de caracteres (string). Cada ocorrˆencia da string de busca ´e mostrada e o Emacs pergunta ao usu´ario se este deseja substituir a string ou n˜ao. Pressionamos a barra de espa¸cos para substituir, Del para n˜ao substituir e “!” para substituir todas as ocorrˆencias sem precisar confirmar cada uma delas. Pressionamos Esc ou Ctrl-g para cancelar o comando. Arquivos Ctrl-x s Salva (save) o conte´udo do buffer no arquivo a este associado. Ctrl-x Ctrl-f Cria um novo buffer, associando a ele um arquivo cujo nome deve ser digitado na linha de eco. Caso n˜ao exista nenhum arquivo com o nome informado, o Emacs cria um novo arquivo, vazio. Ctrl-x Ctrl-w Grava o conte´udo do buffer no arquivo cujo nome ´e informado na linha de eco. Este comando ´e semelhante `a op¸c˜ao Salvar como dispon´ıvel em outros editores de texto. Gerenciamento de buffer Os ´ıtens anteriores fazem referˆencia ao texto no buffer, dando a impress˜ao de que sempre trabalhamos com apenas um buffer. Na verdade, o Emacs permite trabalharmos com v´arios buffers simultaneamente. Cada buffer tem o seu pr´oprio nome, um arquivo (opcional) associado, e um bloco de texto. Possui tamb´em um indicador de mudan¸ca, que ´e um “**” quando o texto sofre alguma modifica¸c˜ao, e “--” quando o conte´udo do buffer ´e salvo no arquivo a ele associado. O Emacs sempre pedir´a confirma¸c˜ao antes de executar um comando que possa causar a perda do texto modificado. O combina¸c˜ao Ctrl-b ´e utilizada para alternarmos a edi¸c˜ao dos buffers abertos. Pressionando estas teclas e informando o nome do buffer (nome do arquivo) desejado, fazemos com que o Emacs altere o foco da edi¸c˜ao para o buffer especificado. Gerenciamento de janela O Emacs permite que haja m´ultiplas janelas na tela. Cada janela tem sua pr´opria linha de modo, sua pr´opria posi¸c˜ao de cursor e seu pr´oprio buffer. Ctrl-l Limpa a tela, e exp˜oe novamente todas as janelas. Isso ´e ´util se um erro encher de lixo a tela. A linha do cursor ´e posicionada no centro da janela. Ctrl-x 2 Comando b´asico para criar janelas. A janela corrente ´e particionada em duas. Cada janela ir´a mostrar o mesmo buffer e dever´a ter ao menos trˆes linhas pois caso contr´ario n˜ao haver´a espa¸co suficiente para duas linhas de texto e uma nova linha de modo. Ctrl-x 1 Comando b´asico para destruir janelas. Todas as janelas, menos a corrente, s˜ao ex- clu´ıdas da tela. A janela corrente preencher´a todo o espa¸co restante. Ctrl-x o Move o cursor, circularmente, para o pr´oxima janela (other). Ajuda O Emacs possui documenta¸c˜ao on-line. Digitamos Ctrl-h para acessar as informa¸c˜oes de ajuda. Existem trˆes op¸c˜oes de ajuda: Ctrl-h k Este comando, seguido por qualquer tecla, informa como funciona a tecla digitada. Ctrl-h b Imprime uma lista de teclas em outra janela. Ctrl-h t Mostra o tutorial on-line que descreve como utilizar o Emacs.
  • 67. Cap´ıtulo 8 Para saber mais Eventualmente, vocˆe ter´a d´uvidas sobre assuntos dos quais esta apostila n˜ao trata. Encontrar informa¸c˜oes sobre o Linux n˜ao ´e dif´ıcil, a menos que vocˆe n˜ao saiba onde e como procurar. Basta notar que o Linux foi criado e desenvolvido na Internet. Logo, quase a totalidade de sua documenta¸c˜ao foi feita para ser consultada on-line, pela Internet ou mesmo localmente. Mantendo isso em mente, suas buscas ter˜ao muito mais sucesso. N˜ao se limite `a documenta¸c˜ao impressa. Uma instala¸c˜ao padr˜ao do sistema Linux, geralmente, inclui toda a documenta¸c˜ao sob o diret´orio /usr/doc. Vamos, ent˜ao, analisar os tipos de documentos informativos relacionados ao Linux e onde encontr´a-los. 8.1 O Projeto de Documenta¸c˜ao do Linux Uma das maiores fontes de informa¸c˜ao do mundo Linux ´e o Linux Documentation Project. O LDP ´e respons´avel pelas p´aginas de manuais (man pages), um conjunto de livros sobre uma variedade de t´opicos e uma ampla cole¸c˜ao de documentos HOWTO que abrangem centenas de t´opicos, com diferentes graus de detalhismo. Os HOWTOs, em particular, est˜ao dispon´ıveis nos formatos impresso, hipertexto (HTML), e texto puro. A hierarquia de newsgroup Linux Usenet (comp.os.linux.*) tamb´em pode ser uma fonte muito ´util de informa¸c˜oes para pessoas familiarizadas com o Usenet. Se vocˆe deseja acompanhar o progresso do Linux, dˆe uma olhada em comp.os.linux.announce nas ´ultimas informa¸c˜oes da semana. Como a maioria dos programas que s˜ao executados no Linux vˆem dos projetos GNU (Gnu is Not Unix), BSD (Berkeley Software Distribution), e X (sistema de interface gr´afica), muito da documenta¸c˜ao est´a dividida, tamb´em, entre estes. Por´em, tudo est´a dispon´ıvel em p´aginas man (man pages). O LDP mant´em o site http://tldp.org/, que est´a espelhado (possui reprodu¸c˜oes) em centenas de outros sites ao redor do mundo. Isso proporciona, a praticamente todas as pessoas, facilidade e rapidez de acesso a esses documentos. A maior parte da documenta¸c˜ao impressa relativa ao LDP ´e disponibilizada por v´arias editoras, sob uma variedade de titulos. Linux Software Labs, Red Hat Software, e Yggdrasil s˜ao alguns dos maiores distribuidores destes livros. 8.1.1 HOWTOs e mini-HOWTOs A documenta¸c˜ao originada na Usenet freq¨uentemente ´e agrupada sob a forma de Frequently Asked Ques- tions, os FAQs. Estes documentos possuem um formato pergunta-e-reposta que ´e muito apropriado ao assunto espec´ıfico do qual tratam. Contudo, os FAQs n˜ao podem ser empregados em todos os tipos de documenta¸c˜ao. Assim, o LDP estabeleceu um formato padr˜ao para documenta¸c˜ao narrativa, os chama- dos documentos HOWTO. O nome vem do fato destes explicarem como (how to) fazer alguma coisa. Os HOWTOs est˜ao dispon´ıveis nos formatos texto e hipertexto (HTML), dentre outros. Existem tamb´em documentos extremamente simples, chamados mini-HOWTOs, que possuem apenas algumas poucas p´aginas e geralmente descrevem um determinado t´opico. Documentos HOWTO e mini-HOWTOs s˜ao encontrados, geralmente, sob o diret´orio /usr/doc/HOWTO. 61
  • 68. 8.1.2 Os livros LDP Um dos primeiros projetos do LDP foi o de produzir livros totalmente voltados para o Linux. Esses livros s˜ao destinados a usu´arios (Users’ Guide - Guia do Usu´ario), administradores de sistema (System Administrators’ Guide - Guia do Administrador de Sistemas, Network Administrators’ Guide - Guia do Administrador de Redes), al´em de um voltado a pragrama¸c˜ao do kernel (Kernel Hackers’ Guide). Todos podem ser encontrados na p´agina do LDP na Internet (em algumas distribui¸c˜oes, em /usr/doc/LDP). 8.1.3 As p´aginas de manual As p´aginas de manuais de referˆencia (man pages) podem ser acessadas com o comando “man”. Para ler a p´agina sobre o pr´oprio comando man, basta digitar a seguinte linha de comando: “man man”. As p´aginas man geralmente cont´em documenta¸c˜ao de referˆencia, n˜ao tutoriais, e s˜ao renomadas por serem t˜ao sucintas que s˜ao, as vezes, dificilmente compreensiveis. No entanto, quando vocˆe precisar de material de referˆencia, elas podem ser exatamente o que vocˆe precisa. Trˆes programas podem ser usados para acessar man pages. O programa man mostra p´aginas indi- viduais, e os comandos apropos e whatis procuram por uma palavra-chave no conjunto de man pages. apropos e whatis examinam a mesma base de dados; a diferen¸ca ´e que whatis mostra apenas as linhas que contˆem a palavra exata que vocˆe est´a procurando, e apropos mostra qualquer linha que cont´em a palavra procurada. Isto ´e, se vocˆe est´a procurando pela palavra “man”, apropos encontrar´a “manual” e “manipula¸c˜ao”, onde whatis procurar´a apenas por “man”, separada das outras palavras por espa¸cos em branco ou pontua¸c˜ao, como em “man.config”. Esperimente os comandos “whatis man” e “apropos man” para ver a diferen¸ca. Muitas das man pages em um sitema Linux s˜ao parte de um grande pacote montado pelo LPD. Em particular, as p´aginas da se¸c˜ao 2 (p´aginas para chamadas de sistema), se¸c˜ao 3 (para bibliotecas), se¸c˜ao 4 (para arquivos de dispositivos ou especiais) e a se¸c˜ao 5 (para formatos de arquivos) tˆem como principal origem a cole¸c˜ao de man pages do LDP e s˜ao geralmente as p´aginas mais uteis para programadores. Se vocˆe desejar especificar qual a se¸c˜ao a ser procurada, informe o n´umero da se¸c˜ao antes do nome da man page que vocˆe deseja ler. Por exemplo, “man man” mostra a p´agina para o comando “man”, a partir da se¸c˜ao 1; se vocˆe deseja ver a especifica¸c˜ao de como escrever man pages, vocˆe precisa especificar a se¸c˜ao 7 com o comando “man 7 man”. Quando vocˆe precisar ler man pages, lembre-se de que muitas chamadas de sistema e fun¸c˜oes de biblioteca usam o mesmo nome. Em muitos casos, vocˆe deseja obter informa¸c˜oes sobre fun¸c˜oes de biblioteca, n˜ao sobre chamadas de sistemas que essas fun¸c˜oes podem utilizar. Lembre-se de usar “man 3” mais o nome da fun¸c˜ao para obter a descri¸c˜ao de fun¸c˜oes de biblioteca, porque algumas fun¸c˜oes podem ter o mesmo nome que chamadas de sistema da se¸c˜ao 2. 8.2 Encontrando programas para o Linux Se vocˆe est´a com problemas para encontrar um programa do qual necessita, o Linux Software Map1 (LSM), ou Mapa de Software Linux, possui milhares de registros de pacotes de programas dispon´ıveis para Linux. Esta base de dados inclui nomes, descri¸c˜oes, n´umero de vers˜oes, e localiza¸c˜ao dos pacotes. aso vocˆe esteja precisando fazer o download da ´ultima vers˜ao de algum aplicativo espec´ıfico, expe- rimente o site Freshmeat (http://unix.freshmeat.net/). Ele possue uma grande cole¸c˜ao de programas constantemente atualizados, divididos em categorias. Para cada programa ´e atribu´ıda, ainda, uma nota. Este site tamb´em disponibiliza distribui¸c˜oes inteiras para download. 8.3 Bookmarks Al´em das fontes de documenta¸c˜ao j´a descritas, existem muitos outros sites interessantes e muito uteis, mantidos, muitas vezes, por alguns dos milhares de f˜as do Linux. Existem tamb´em as listas de discuss˜oes, al´em dos newsgroups que tamb´em podem ser grandes fontes de informa¸c˜ao. Abaixo est˜ao destacados alguns dos endere¸cos eletrˆonicos que podem ser uteis a vocˆe: 1http://www.boutell.com/lsm/
  • 69. http://freehelp.com.br/linux/ Esta ´e uma p´agina que cont´em uma manual bem pr´atico do linux, est´a dispon´ıvel em portuguˆes para consultas on-line. http://www.conectiva.com.br Site da empresa Conectiva, respons´avel pela primeira distribui¸c˜ao nacional do sistema operacional Linux. Nesta p´agina vocˆe pode encontrar as ´ultimas informa¸c˜oes sobre o Linux no Brasil, al´em de poder fazer o download do manual Linux da Conectiva (em portuguˆes) ou do pr´oprio Linux. http://linux-br.conectiva.com.br/ P´agina da lista de discuss˜ao linux-br onde vocˆe pode utilizar-se de um sistema de busca no hist´orico de perguntas da lista, muito ´util como fonte de referˆencia. socorro@inf.ufpr.br Este e-mail est´a a disposi¸c˜ao de todos os alunos do curso. Sempre que vocˆe encontrar algum problema ou tiver alguma d´uvida com rela¸c˜ao ao uso das m´aquinas dos laborat´orios, n˜ao tenha vergonha de us´a-lo. http://pet.inf.ufpr.br P´agina do PET-Inform´atica. Nela pode-se obter informa¸c˜oes sobre o grupo, cursos ofertados, al´em de uma p´agina de dicas e apoio aos usu´arios.
  • 71. Apˆendice A Montando um sistema de arquivos Antes de qualquer coisa ´e necess´ario entender que todos os arquivos acess´ıveis em um sistema Unix est˜ao organizados em uma grande ´arvore. A hierarquia de arquivos nesta ´arvore ´e iniciada pelo raiz, simbolizado como /. Estes arquivos podem estar distribu´ıdos por diversos dispositivos (discos r´ıgidos, disquetes, CD-ROM’s s˜ao os exemplos mais comuns). Montar um sistema de arquivos significa incluir o sistema de arquivos encontrado em algum dispositivo `a grande ´arvore de arquivos. A.1 mount O comando utilizado para montar um sistema de arquivos em um diret´orio qualquer ´e o mount. Sintaxe: mount [op¸c~oes] <dispositivo> <diret´orio> Op¸c˜ao Descri¸c˜ao -a Monta todos os sistemas de arquivos encontrados no arquivo /etc/fstab. -t Indica o tipo de sistema de arquivos a ser montado. O exemplo abaixo torna acess´ıvel o sistema de arquivo encontrado no dispositivo /dev/fd0 (normal- mente o disquete) no diret´orio /mnt/floppy. $ mount /dev/fd0 /mnt/floppy Abaixo um exemplo t´ıpico de montagem de uma parti¸c˜ao windows. $ mount -t vfat /dev/hda1 /mnt/win Observe que neste exemplo utilizou-se a op¸c˜ao -t para especificar o tipo de sistema de arquivos a ser montado (no caso vfat, que se refere ao sistema de arquivos FAT 32 do windows). O comando mount pode ser usado tamb´em para verificar os sistemas de arquivos atualmente montados como no exemplo abaixo: $ mount A.2 umount Usado para desmontar sistemas de arquivos. Sintaxe: umount [op¸c~oes] <dispositivo/diret´orio> Op¸c˜ao Descri¸c˜ao -a Desmonta todos os sistemas de arquivos. Para se desmontar todos os sistemas de arquivos montados: $ umount -a 65
  • 72. Para desmontar o sistema de arquivos encontrado no dispositivo /dev/hda1: $ umount /dev/hda1 Pode-se tamb´em indicar apenas o diret´orio no qual se tem um sistema de arquivos montado, como no exemplo abaixo: $ umount /mnt
  • 73. Apˆendice B X-Windows B.1 Introdu¸c˜ao Relembrando, um sistema Linux ´e composto por um n´ucleo (kernel) e aplica¸c˜oes. Podemos separar estas aplica¸c˜oes em utilit´arios do sistema (cp, ls, rm, etc) e aplicativos para usu´arios que podem utilizar ou n˜ao a interface gr´afica. Por exemplo, o vi e emacs foram projetados originalmente para utilizar interface em modo texto. J´a o aplicativo netscape foi projetado para utilizar apenas interface gr´afica. O sistema X-Window, ou simplesmente X, ´e um sistema para suporte a interfaces gr´aficas que trabalha de forma transparente sobre uma rede e ´e utilizado em diversas plataformas Unix. O X ´e distribu´ıdo livremente e produzido por um grupo chamado X Consortium. Contudo, existem tamb´em outras vers˜oes, comerciais. O X Window System ´e uma marca registrada de X Consortium Inc. A fun¸c˜ao b´asica do X ´e fornecer uma interface para os dispositivos de entrada e sa´ıda do computador, incluindo o monitor, o mouse, o teclado e a placa de v´ıdeo. ´E comum chamarmos o X de um servidor gr´afico, pois ele mesmo n˜ao fornece aplicativos. Os aplicativos se utilizam dos servi¸cos por ele providos, como controle do v´ıdeo, mouse e teclado. Existem in´umeros programas que utilizam o X como servidor de interface, incluindo os gerenciadores de janela, que constituem interfaces gr´aficas em que cada aplicativo ´e executado em um quadro, chamado de “janela”. Podemos identificar at´e aqui trˆes componentes necess´arios para uma aplica¸c˜ao gr´afica funcionar: Servidor X: Seu papel ´e permitir que o gerenciador de janelas acesse todos os recursos da m´aquina sem se preocupar com detalhes de controle de mouse, teclado e v´ıdeo. O mais admir´avel ´e que o aplicativo n˜ao precisa saber tamb´em em que ponto da rede ele se encontra, pois pode-se executar aplicativos em quaisquer pontos que o usu´ario tenha acesso e utiliz´a-lo no local (terminal gr´afico) em que encontra. Vamos explicar isto com mais detalhes logo a seguir. Utilizando-se dos servi¸cos disponibilizados pelo servidor X, os gerenciadores de janelas n˜ao precisam saber o modelo do mouse, monitor ou placa de video. Isso facilita muito o desenvolvimento desses gerenciadores. Gerenciador de janelas: Fornece a “aparˆencia” das janelas, entre outras fun¸c˜oes. ´E o gerenciador quem define o formato dos bot˜oes, a cor das bordas das janelas, o comportamento das janelas, como esconder, minimizar, maximizar. Controla tamb´em barras de rolagem e todos os detalhes que uma aplica¸c˜ao gr´afica pode precisar. Aplica¸c˜ao: A aplica¸c˜ao gr´afica tem somente o trabalho de utilizar os objetos prontos que o gerenciador de janelas fornece. ´E importante que todas as aplica¸c˜oes tenham uma aparˆencia semelhante, pois se cada aplica¸c˜ao utilizasse uma cor diferente ou bot˜oes com comportamentos diferentes, a interface seria muito confusa para o usu´ario. Os gerenciadores mais comuns s˜ao o Window Maker, Gnome e KDE .Ambos os gerenciadores est˜ao dispon´ıveis para Linux e podem ser trocados apenas clicando-se o mouse em uma op¸c˜ao de gerenciador de janelas. Note que n˜ao estamos falando em trocar configura¸c˜oes do gerenciador, mas trocar o pr´oprio gerenciador de janelas. ´E semelhante a trocar a interface gr´afica do Microsoft Windows pela do OS/2 com apenas um clique de mouse e sem fechar o aplicativo que vocˆe estava utilizando! Outros detalhes 67
  • 74. tamb´em podem mudar, principalmente quanto `a aparˆencia da ´area de trabalho, pois quem define isto ´e tamb´em o gerenciador de janelas. Mas o funcionamento da aplica¸c˜ao continua o mesmo. B.2 O servidor X-Window Um grande diferencial do X ´e a possibilidade de utiliza¸c˜ao sobre uma rede local, possibilitando que uma aplica¸c˜ao gr´afica seja executada em qualquer ponto da rede. O servidor X pode estar executando na m´aquina local (porque ´e ele quem controla a m´aquina local), o gerenciador de janelas pode estar executando em uma segunda m´aquina na rede e o aplicativo em uma terceira m´aquina. Como isto ´e poss´ıvel? O que torna isto poss´ıvel ´e a caracter´ıstica de servidor do X. Podemos dizer que ele utiliza uma arqui- tetura cliente-servidor, mas somente no sentido de processamento gr´afico e n˜ao no sentido da aplica¸c˜ao, pois qualquer aplica¸c˜ao pode ser executada sobre o X. O X ´e capaz de responder a servi¸cos simples, como desenhar uma linha, um ponto colorido, mover uma regi˜ao de mem´oria, simular diversas “telas” virtuais, entre outros servi¸cos. As aplica¸c˜oes gr´aficas fazem estes tipos de chamadas ao X e ´e ele quem executa efetivamente o desenho de tais linhas e pontos, funcionando como um servidor gr´afico. Como estas chamadas podem ser feitas de qualquer lugar da rede, qualquer aplica¸c˜ao pode mostrar a sua tela em um servidor que lhe esteja atendendo. Como o sistema X sempre se preocupou em utilizar a rede, existem diversas otimiza¸c˜oes para que ela seja bem utilizada. O servidor mant´em informa¸c˜oes (o contexto) sobre um cliente para que n˜ao seja necess´ario que este se identifique a cada chamada, simplificando o formato das chamadas. O X procura tamb´em n˜ao perder as informa¸c˜oes atuais da aplica¸c˜ao, como a sua ´area de desenho, pois cada vez que uma janela ´e movida seria necess´ario redesenh´a-la totalmente. Este “desenho” da aplica¸c˜ao fica armazenado localmente at´e que ela mesma envie uma mensagem para redesenhar a sua ´area de desenho. In´umeras outras otimiza¸c˜oes permitem que as aplica¸c˜oes utilizem bem a rede, sem sobrecarga do sistema como um todo. ´E comum encontrarmos em universidades terminais gr´aficos cuja ´unica fun¸c˜ao ´e executar um servidor X. Todas as demais aplica¸c˜oes s˜ao executadas em outras m´aquinas da rede, ficando o terminal gr´afico respons´avel apenas por mostrar as telas dessas aplica¸c˜oes. Assim, o Linux e o servidor X possibilitam, por exemplo, que aproveitemos um velho PC 486 como terminal gr´afico, cujas aplica¸c˜oes podem ser executadas em um outro computador, com melhor performance (um Pentium, por exemplo). Tendo um bom monitor de v´ıdeo, um bom teclado, um bom mouse e uma rede bem configurada, praticamente n˜ao se nota que se est´a usando (em pleno ano 2000) um simples PC 486. Com outros sistemas operacionais, este 486 seria certamente inutilizado. Este reaproveitamento de equipamento ´e mais um dos motivos que vˆem fazendo com que, cada vez mais, empresas passem a adotar o Linux como sistema operacional. B.3 Iniciando o X A maneira padr˜ao para iniciar o X ´e atrav´es do comando startx. Tamb´em ´e poss´ıvel utilizar um login gr´afico, que dispensa ao usu´ario a inicializa¸c˜ao manual do servidor gr´afico. O comando startx abre um ambiente gr´afico – o X propriamente dito – e, em seuida, um gerenciador de janelas ´e iniciado. A partir da´ı, o gerenciador de janelas ´e o respons´avel pelos comandos e os aplicativos que o usu´ario executar. Podemos alterar a resolu¸c˜ao da tela atrav´es das seguintes combina¸c˜oes de teclas: Ctrl+Alt+“+” : aumenta a resolu¸c˜ao. Ctrl+Alt+“–” : diminui a resolu¸c˜ao. ´E possivel tamb´em utilizar o console de modo texto e a interface gr´afica simultaneamente. Para isso, usamos combina¸c˜oes que utilizam as teclas de fun¸c˜ao F1, F2, . . . , F12. Pressionando Ctrl+Alt+Fn, onde Fn ´e uma das teclas de fun¸c˜ao, podemos visualizar os diferentes teminais do sistema. Geralmente, existe apenas um terminal gr´afico e v´arios terminais texto. Podemos utilizar quantos desses terminais desejarmos, bastando realizar o login em cada um deles e alternar o seu uso com Ctrl+Alt+Fn.
  • 75. ´Indice Remissivo ajuda, 61 alias, 30 arquivos ocultos, 18, 28 arquivos, cria¸c˜ao, 17 arquivos, manipula¸c˜ao, 9 background, 42 bash logout, 34 bash profile, 34 bashrc, 30, 34 bg, 42 busca de arquivos, 46 cat, 17, 20, 34 cd, 12 chmod, 21 compacta¸c˜ao, 43 compara¸c˜ao de arquivos, strings, 39 cp, 18 df, 45 diff, 39 diret´orios, manipula¸c˜ao, 10 du, 45 echo, 30 emacs, 57, 58 Entradas e sa´ıdas, 34 export, 31 fg, 42 file, 19 filtros, 36, 39 find, 46 finger, 7 foreground, 42 gerenciadores de janelas, 67 grep, 39 groups, 7 gunzip, 43 gzip, 43 head, 20 hostname, 7 impress˜ao, 40 jobs, processos, 41 kill, 42 links, ln, 23 lpq, lpr, 40 ls, 11, 18, 20 m´ascaras de permissoes, 23 man, 39 metacaracteres, *, ?, 27 mkdir, 13 more, 20, 37 mount, 65 mv, 19 ordena¸c˜ao de arquivos, sort, 36 Pastas: bin, 14 dev, 14 etc, 14, 15 home, 14 lib, 14 mnt, 14 proc, 15, 17 raiz, 14 sbin, 15 tmp, 15 usr, 15, 16 var, 15, 16 PATH, 31 pipes, , 37 processos, jobs, 41 ps, 42 pwd, 11 redirecionamentos, <, >, <<, >>, 36 renomear, 19 rm, 19 rmdir, 14 senha, mudan¸ca, 8 Servidor x, 67 sintaxe, 11 sort, 35 source, 34 split, 45 tail, 20 69
  • 76. tar, 44 teclas de edi¸c˜ao, comando, 28 umask, 23 umount, 65 unalias, 30 vari´aveis de ambiente, 30 vari´aveis de prompt, 31, 33 vi, 49, 54 visualiza¸c˜ao de arquivos, 20 which, 46 who, 8 whoami, 7 Xterm, 67 xwindows, 67 zcat, 43