ATUALIZADO COM AS NOVIDADES DO BASH 4.0 APRENDA A PROGRAMAR O SHELl DO LINUI E DO UNIX
PROGRAMAO AWK
Contm todos os exercidos do livro resolvidos e
alguns scrpts teis
GUIA COMPLETO DE EXPRESSES REGUlARES NO BASH E NO OPENOFFIClORG ESCREVA CGis COM SHELL SCRIPT
Copyright 2010 por Brasport Livros e Multimdia Uda. Todos os direitos reservados. Nenhuma parte deste livro podera ser reproduzida, sob qualquer meio, especialmente em fotocpia (xerox), sem a permisso, por escrito, da Editora.
1 edio: 2000 2 edio: 2001 3 edio: 2003 Reimpresso: 2003 4 edio: 2004 s edio: 2005
Editor: Sergio Martins de Oliveira Diretora Editorial: Rosa Maria Oliveira de Queiroz
Reimpresso: 2005 6" edio 2006 Reimpresso: 2006 7 edio: 2008 Reimpresso 2009 a edio: 2010
Assistente de Produo: Marina dos Anjos Martins de Oliveira Reviso: Patrcia Sotello Soares Editorao Eletrnica: Abreu's System Capa: Use Design Tcnica e muita ateno foram empregadas na produo deste livro. Porm, erros de digitao e/ou impresso podem ocorrer. Qualquer dvida, inclusive de conceito, solicitamos enviar mensagem para [email protected]; para que nossa equipe, juntamente com o autor, possa esdare
-IC
**
B~ - -
*
,.,
ramaao
8ll edio
Julio Cezar Neves
Sumrio
Parte I
Ca tulo 1. Come ando deva arinho ....................................................... 3 Iniciando uma sesso Linux ................ ..................................................... .. .. ..... 3 Encerrando uma sesso Linux - exit, logout ......... .. ........ ............. ........... .. ....... 4
asswd - Alterando a senha .. .. .. ...................... ..... ....... ..................... ..... .. 4 Comandos ............ .................... ..................... .. ...... . , .......... ................ ... .. .. 5
Obtendo ajuda .... .. .... . . ............... ........... ..... .. . ........ ........... ... 6 help - Ajuda . .......... .............. ... . .................... ....... ........ . ........ 6 man pages - Manual de Referncia ......... ... .............. ..... .. . . . . .. 7 apropos - Informaes sobre um tpico ....... ...... . .. ................ .......... .. 9 whatis - Descrio de comandos ................ ............... ........... .... ......... 10
Ca tu lo 2. Man i ulando ar uivos e di retrios ...................... ............... 11 Sistema de arquivos do Unix .......................... ................ ....... ................... ....... 11 Operaes com o sistema de arquivos .................. .. ... .......... ................ .. ........ 12 Caminhos de diretrios (paths) ................................... ........ ................. .. ........ 13
pwd - Informa nome do diretrio corrente ...... ... ..... .. ... ................ .......... 15 cd- Navegando entre diretrios ................ ............. .. ... .......................... 15 ls -lista arquivos .................. .......................... .. .. ................................ .. 16 cp - Cpia de arquivos e diretrios .. ..... ...... .. .. ... ..... .. ... .............. .. .. ........ 18 mv - Move arquivos e diretrios ................... .. ... ..... .. ............................. 19 In- Estabelece ligaes entre arquivos ........ .. ... ..... ................... ............ 20 mkdir - Cria um diretrio ............................... .. ... ..... .. ........... ........ .. ........ 22 rmdir - Remove diretrio .......... ....................... ... ....................... .. ... ........ 22 rm - Deleta arquivos e diretrios .................. ... ....... ............................. 23 file - Indicando tipo de arquivo ..................... ....... .............. . ......... .. 24
Matenal com dlreilos aLIora1s
XXXII Programao Shell Linux
grep - Pesquisa arquivos por contedo ............. .......................... .......... 24 find - Procurando ar uivo or caractersticas ................................... ..... 25 basename - Devolve o nome de um ar uivo ... .. .................................... 32 djrname Devolve o nome do diretrio 32
C a cat- Exibe o contedo de um arquivo .................. .. ............................... 34 wc- Conta caracteres, palavras e/ou linhas .. ........ .. ................. .. .. ........ 36 sort - Classifica dados 38 bead - Mostra incio dos dados 41 tai l - Mostra final dos dados 4 1
Captulo 4. Segurana de Acesso ........................................................... 43 Posse de Arquivos ...... ........ ............... .......................... .. ... ..................... .......... 43
chown - Trocando dono do arquivo ...... .......... .......... ................. ............ 44 ch r -Trocando o ru o do ar uivo .................................................... 45
Tipos de Acesso a Arquivos .............. ..... ................ ......................................... 45 Classes de Acesso a Arquivos ............ ................... ......................................... 46
chmod - Ajustando permisses de arquivos ............. ............................. 47
Captulo 5. Comandos para Informaes sobre Usurios .......................... 50 who- Usurios ativos ...................... ..................... .. ................ ............... 50 id - Identificadores do usurio ...................................... .. ....................... 51 finger - Detalha informaes sobre usurios .. ........ ........................ .... ... 52 chfn - Altera dados do fin e r ..................................... ............................ 53 groups - Informa grupos dos usurios ............... ..... .. ................... .......... 54
Captulo 6. Pra no Perder o Compromisso ........................................ .. 55 date - Mostra e acerta data/hora .................. ..... ..................... ............ ... 55 .cal - Exibe o calendrio 57
C a tulo 7. Beca eando ........................................................................... 59
compress - Para compactar dados .............. ............ ........................ .. ... 61 uncompress - Descompactando arquivos ........................... .................. 62 zcat - Visualizando dados compactados .......................................... ..... 63 gzip - Compactado r livre ...................................... .. ..... ..................... .. ... 63 gunzip - Descompaclador livre ..... .................. ............................. .......... 65
Captulo 8. Controle de Execuo ............................. ............... .............. 66 ps - Lista de processos ........... ................................................. ............. 68 kill - Enviando sinal a processos .... ........................ ..... ....................... ... 69
Matenal com direitos aLIora1s
Sumrio XXXIII
Execuo em Background .............................................................................. 70 'obs - Lista recessos sus ensos e em back round ................... .......... 71 b - Manda recessos ara back round ...... ... ....................... ............... 71 fg - Trazendo processos para foreground .............. .. ........... .......... ........ 72
Ca tulo 9. Executando Tarefas A endadas ................ ........... ............. .. 73 Programando tarefas com crontab .. ...................................... .................. ... ..... 73 O comando at ............................................................................................... ... 76 O comando batch ....................... .. .................................. .... ............................. 78
Parte 11
Leiame.txt ... ..................................... ...................................................... .. .. 81
Ca tulo O. O Bsico do Bsico .................................. u .... . . . . . . . . ..... . . . . ..... 84 Viso geral do sistema operacional UNIX .............. .. ........ .......................... ..... 84 Quem no movido a gasolina, precisa de Snell? .. ........ .. ................... .. ........ 85 Por que Shell? ...... ... ........................... ... ....................... .. ..... ... ................ . .. ... 88 Tarefas do Sbell 88
Exame da linha de comandos recebida , ........................................ ........ 89 Resoluo de redirecionamentos ....... : .......... .. ............................ ... ... .. ... 90 Substituio de variveis ........................................ .. ........................ ..... 90 Substituio de meta caracteres ....... .................. .. ... .. ................ .. ...... .. ... 90 Passa linha de comando para o kernel... .......... ............................. ... ..... 90
Principais Shells ......................... ......... ............................................................ 91 Bourne Shell.., .. ,,, ,, ..... , .. ,, .. , ......... ,, , ........ ,, .... .......... ,, .................. , .... , 91 Bourne-Again Shell ............ ... ... ..................... ................................. ..... ... 91 Korn Shell 91 C Shell. ........ ............................................. ............ .................................. 92
Sem comentrios .. .. ............ ...... ....... .... ,, , .. , , , , ., ,,, ,, ..... ......... , ,, .., 93 .
Captulo 1. Recordar Viver ......... ........................................................... 94 Usando aspas, apstrofos e barra invertida .................................................... 94 Crase e parnteses resolvendo crise entre parentes .................... .................. 95 Direcionando os caracteres de redirecionamento,, ... ... , .. ..... .. .. , ... .. .... , 98 Exerccios 101
Matenal com direitos aLIora1s
XXXIV Programao Shell Linux
Ca tulo 2. Comandos ue- no so do Planeta .................................. 103 O ed d+ 103 O comando sed ........................................... ........... .. ................................ 108
A opo -n ...... ........................ ....................... ......... .............. ........ ... 11 7 A opo -i ....................... .............................................. ........................ 118
A familia de comandos grep .............. ... ................................. ........................ 121 A opo -c (count ou contar) ....... ....................... ... ....... ............. ........... 124 A opo -1 ...... ... .. ................... .. ........................ .... ...... ................ .......... 1.25 A opo -v ................. ............. ............... .................... ........................ ... 126 A opo -f (file) .... ............................................ ............. ........................ 126 A opo -o (only matching) .... ............... ....................... ... ..................... 128
Os comandos para cortar e colar ... ............................... ........ .................. ...... 130 Cortando cadeias de caracteres - cut ............... ... .. .. ........................... 130 Colando cadeias de caracteres - paste .......... .......... ................. ......... . 133 A opo -d (delimitador) ..... .... ....................... ....... ...................... . 134 A opo - s .................................. ....... .................................................. 134 Perfumarias teis ................... .............................................................. 135
O tr traduz. transcreve ou transforma cadeias de caracteres? ........ ............. 136 A o o - s ............................. .......... ................... ................................. 141 A opo -d .................................................... .......... ..... ................... ..... 142 A opo -c ..................... ............................... .. ..... ... ............................. 143
Exprimindo o expr de forma expressa ................................................ .. ... ...... 144 Execuo de operaes aritmticas .......... ............................. . .... .... 144
bc - A c a lcll I adora 145 O interpretador aritmtico do Shell ................................................................ 147 O uniq nico .... ............................. .... .................................................. ....... . 153
A o o -d ........................ ............... ....................... ............................. 154 Mais redirecionamento sob o Bash 155 Exerccio 156
Captulo 3. Viemos aqui para falar ou para programar? ........ ............. 157 Executando um programa (sem ser na cadeira eltrica) ........................... ... 157 Usando variveis ........ ..... .................. ... .................... ........ ..... ........... ....... ...... 158
Para criar variveis ............... ... ..................... ... .. ..................... .. ..... ...... 158 Para exibir o contedo das variveis 159
Passando e recebendo parmetros .. .................................... ................ ..... ... 160 O comando que passa parmetros .................................. ................... .. .... .... 163 Desta vez vamos. 168
Programa para procurar pessoas no arquivo de telefones .. ............... . 169 Programa para inserir pessoas no arquivo de telefones ...... ........ ........ 170
Matenal com direitos aLIora1s
Sumrio XXXV
Programa para remover pessoas do arquivo de telefones ........ .. .... .... 172 Exerccios 173
Ca tulo 4. Liberdade condicionalll ...................................................... 174 O bom e velho i f ................................... .......................... .. .. ........................... 175 Testando o test . .. . . . . . . . . . . 178
O test de roupa nova ........... ........ ......................................... ............. ... 185 Se ai um disser ue eu disse, eu ne o ... .......................................... 186 No confunda and com The End ..................... ..... ............ ... ............. ... 187 ar ou ou disse o co afnico 188
Disfarando de if .. ... ... .. ..................... .. ...... ............. .. ..... ... .. ... ............ ..... .. .. . 189 && (andou lgico) ....... ........ .................................................... ..... .. .. . 189 li (QI ou ou lgico) .... ........ ...... .. .... ...... .. ..... .. . .. .. .. ..... ....... .... .. 190 Operadores aritmticos para testar ....................... ..... ....................... ... 191 E tome de test . . ... . .. . .. .. . . . ... . .. 192
O caso em que o case asa melhor .. .. ........................... .. .. ........................ .. . 195 Exerccios ......... ........ ................. . .. ................ .. ... .. . ......... ........ .. ... . ... 201
Ca tulo 5. De Lu a no Loo ..................................................... ............ 202 O forr do for ................... .................... ...... .. ... ........... .................................... 203 Perguntaram ao mineiro: o que while? while while, uai! ............ ............. 212 O until no leva um- mas til. .. ..... ... ..................... ....... ... ............. ..... ........ 214 Continue danando o break .............. .. ... ................... ..... .. ..... .................. ...... 218 Exerccio ............. .......................... ..... ..................... ... .. ..... .. ...................... ..... 220
Ca tulo 6. A rendendo a ler ........... ............ .......................................... 221 Que posio voc prefere? ............................... ............. ............. ............. .. .. . 221 Afinal como que se l? .............. ................................. .............. ............. .. .. . 228
Leitura dinmica 237 Leitura sob o Bash .. ................... .......... .................. ... .. ..................... ....... ... ... 239
Opo -p ............................. .......................... .. .......... ........................... 239 Opo -t ......... ........ ........ ..... ............... .. ...... ...... .. .. ..... ..................... ...... 239 Opo -n ...... ....................... ....................... ... .. ............................. .. ...... 240 Opo -s .. ....... ..... ................... .... ... ... ............. .. ... .. ........................ .. ... .. . 241 Opo -a .................................................... ... ....... ................... .... .. ..... . 241
Outra forma de ler e gravar em arquivos .................... ................................. . 241 J sei ler. Ser que sei escrever? .. ........................... ................................... . 243 Exerccios ................................ ....................... ........... .. .................................. 246
Matenal com dlreilos aLIora1s
XXXVI Programao Shell Linux
Captulo 7. Vrias variveis ............. ........................... .............. .......... ... 248 Exportar o que importa ........................................ ............ ...................... ..... 249 . e pronto ................................. .......... .......................... .... ... ........................ 255 Principais variveis do sistema ......... .......................... ... .... ........................ .. . 257 Parmetros 263
Construes com parmetros e variveis .......... .................................. 264 Expanso de chaves { ... }' ............... .... ................... ..... ............................... ... 27 4 Ganhando o jogo com mais curingas ............................................................ 276
Um ou co de mani ula o de vetores ................... .............................. 282 Exerccios .............. .................. .......... ....................... ... ............................. ..... 290
Captulo 8. Sacos de gatos .. .................................................................. 291 A primeira faz tchan, a segunda faz tchun, e tchan, tchan, tchan ... .............. 291 wait a minute Mr. Postman .............. ............................... ......................... ...... 296 Para evitar trapalhadas use o trap ..................................... .................... .. ..... 297 Funes ........... ... ............. ................... ................................. .......................... 301
Substituio de processos ........................................ ... ........................ 309 Mergulhando fundo no nautilus ................................................................. .... 317
Instalando scripts do gerenciador de arquivos ... ............. ............... ...... 317 Escrevendo scripts do gerenciador de arquivos ............................... ... 318 Ex em lo.s de se ri ts ................... ..................................................... ..... 320
script tambm um comando ............................... ..... ............................. ..... 326 Fatiando o es ...... .. ............ .. ... .. .......... .. ......... ..... ................... ..... .. .. ........ ... 328 Em busca do erro perdido ................. ........................................................... . 331 Mandando no terminal. ............................. ........................ .. ........................... 333 Macetes, macetes & macetes ......... ....................... ........ ............................... 338
Exe~ici os 340
A ndice 1. awk: Comando ou Lin em? .............. ......................... 341 O Be-a-b do awk ... ............................. ....... .......................... ....................... 342
Uso do awk , , 343 Campos ............... ..................... ..................... ... ............ ................... ..... 343 Listando .......... ............................... .................................................. ..... 344
Formando padres .... ........................ .......................... ... ............................... 346 Expresses relacionais ................................................ .............. .......... 346 Expresses regulares .............. ............................................................ 348
Matenal com dlreilos aLIora1s
Sumrio XXXVII
Padres BEGIN e END ........ , .. , .. ,,,,,, ... . , ........ ,,,,, , . .... 351 O uso de variveis ......................................................................................... 352 Faz de conta .. ...................................... .. .. .............. ....... ... .. ... , .... ................... 355
Operadores ......... ................... .. ... .. .................. ...... .. .. .............. ..... ..... ... 356 Funes matemticas ......... .. ..... .......................... ... .. ........... .......... ... .. . 357
Pr cadeia . , .. , .. ,. ,, . , , .......... , , , ,,, , ... , , ., ,, ....... , , .... , , ., ,, .. ...... , , , . 357 Instrues de controle de fluxo ....... .............................................................. 361
O comando if ....................................................................................... 362 O comandowhile ......... .... .. .... ............... . ... .. ...... .. . ......... ............... 363 for midvel. ..... ...................... ..... .... ................ ... ....... ............................ . 364 break e outros bric-a-bracs .............. ....................... .. ........................... 365
Valores de vetores ........................... .. ... .................. .. ... ..... ................ ............. 365 print e printf parece mas no ..... .... ... ... .... .. ................. .. .. ............. ... ... ... .... . 368
A sada com prnt ............................................... ... .. .. ........................... 368 Formatando a sada com printf .. ........................ ..................... .. ... ..... ... 369 Como redirecionar a sada com rintf? ................................................ 370
O awk no contexto do Shell .......... , .. , , .................. , ...... , .. , ..................... , .. 3 72 Recebendo parmetros ........................................................................ 373 Em cooperao com o Shel/ . ......................... ....... ................ ....... 373
A ndice 2. Ex resses re u lares ....................................................... 377 Um pouco de teoria ............ ............. ..... .................. ....................... ........ ... .. ... 378
Conceitos bsicos . .. .. ......... . .... .. ..... . .......... .. . . .......... . 378 Histria .......... .... ...... ............... .. ...... .. .. ........... ... .............................. . 379
Ento vamos meter as mos na massa ........................................................ 380 ncoras ................................................................................................ 381 Representantes ........................ ....................... ..... ... .. ................... ... .. .. . 383 Quantificadores .......................... ... .................. ...... ............ ................... 384 Fingindo ser lista ...................... ... .. ............................................... ..... .. . 390 Outros Z9
Expresses Regulares (no BrOffice.org) ..................... .......................... .. ...... 408 Onde usar Expresses Regulares no BrOffice.org ................... ... ........ 409 Diferenas na lgica de uso ... ...................................................... ........ 410 Diferenas de sintaxe ........ .. ... .. .......... .............. .. .......... ........................ 412
A nd ice 3. CGI em Shell Scri t .................... ....................................... 420 Configurao ................................ ... .... ... .. .............. .. ... ... .. .. ...................... .. .. . 420
Algumas consideraes importantes .................... ............... ............ .... 422 Diverso ............. .. ........................... .. ............................ ... .. ........... ................ 422
IniCiando 422 Mtodo GET ...................... ............................. ... ........................ .......... 426
Matenal com direitos aLIora1s
XXXVIII Programao Shell Linux
Mtodo POST .......................... ....................... ... ....... ........................ ... 427 U load .... ..... .. .. .................. ....... ... .. ............... ... ...... ....... .. ..... ................. 429 CheckBox 431 Radio Buttons ............................ .... ..... ... ........ .. ..... ... ............................. 432 Contador de acesso genrico ..... ..................... ..... .. .. .............. ..... .. ...... 433 SSI - Server Side lncludes ......... ............................... ..... ........ ............. 434 Contador ........ ............................. .. ... ......................... ........................... 434
Segurana ... ............... .. ..................... ........ ....................... .. ...................... ..... 436 Introduo e Configurao .. ... .... ...................... .. ............................... ... 436
LAN 4 4 Livro de assinaturas .......................... ... ..................... .. ....... ........................... 445
A ndice 4. Dia lo ................................................................................. 450 Por que este doumento existe .. ................... .. ... ... .. .. ........... ..... ... ..... ... 450 Objetivo e Escopo Deste Documento ........... .. ... .................................. 451 ltimas Palavras Antes de Iniciar. . . . . . . . 452
Introdu o ......................................... ..... ................ .......... ... .......................... 452 O ue o Dialo ..................................................... ..................... ... ..... 452 Breve Histri co do Di'alog ................... ........... ............ ........... ........ ........ 453 Seu Primeiro Comando com o Dialog .................................. ............. ... 453 Listagem dos 15 Tipos de Caixas ...................... ... .. ............................. 454 Exemplos dos Tipos de Caixa ............................ ....... ............... ..... ..... 455
Como o Dialog Funciona ................. ................................... ................... .. ...... 460 Parmetros Obrigatrios da Linha de Comando .................. ........ .. ...... 461 Como reconhecer respostas SIM ou NO ....... ..... ............................... 462 Como Obter o Texto Que o Usurio Digitou .. .................................... .. . 464 Como Obter o Item nico Escolhido de um Menu ou Radiolist ..... ..... . 466 Como Obter os Itens Mltiplos Escolhidos de um Checklist.. ...... ........ 4 70 E se o Usurio Apertar o Boto CANCELAR? ...... .. .. ........................... 472 E se o Usurio Apertar a Tecla ESC? ........................ .. ........................ 473 E se o Usurio Apertar o boto HELP? .. .. .... .. .. .. ..... ........... ... ............ ... 473 Como Tratar Todos os Botes e Teclas de Uma Vez? ................. .. ...... 4 7 4
Mergulhando de Cabea no Dialog ................... ............. .. ... ..... ............. .. ... ... 474 Exemplo de Menu Amarrado (em Loop) ....... ....................................... 474 Exemplo de Telas Encadeadas (Navegao Sem Volta) ..... ................ 476 Exemplo de Telas com Navegao Completa (Ida e Volta) ................. 477 Exemplo de Pedido de Confirmao (Uma Caixa Sobre Outra) .. ........ 480 Exemplo de Posicionamento de Caixas (No Centralizado) ............... 481 Exemplo de Vrias Caixas na Mesma Tela (Multicaixas!) ........... ........ 482 Exemplo de Menu com Itens Dinmicos (Definidos em Execuo) .. ... 484 Exemplo de Cpia de Arquivos com Barra de Progresso (Gauge) ...... 486 Configurando as Cores das Caixas .............................. ............. .......... 489
Matenal com direitos aLIora1s
Sumrio XXXIX
Lista das Opes de Linha de Comando .................. .......................... .. ........ 492 Opes para definir os textos da caixa .............. ............................ ...... 492 Opes para fazer ajustes no texto da caixa .. .......................... ...... ..... 492 Opes para fazer ajustes na caixa ...................... ............................... 493 Opes relativas aos dados informados pelo usurio ............ .. ...... .... . 494 Outras 49 Opes que devem ser usadas sozinhas na linha de comando .......... 495
Os Clones: Xdialog, Kdialog, gdialog ................ ...... .. .. ........ .......... .. . 495 Whiptail ...... ....... ............. ...... .. ... ....... ............. ....................................... 496 Xdialog ...... .............................................................. ............................. 496
............. ........................ ... ... ......................... ..... ..................... ... 497 ............ ........................................ ........................................... ... 498
Zenity 39 Udpm 09 pythondialog .... .. ............................... ... .......... ..... ..... ... ..... .................. ... 499
Onde Obter Mais Informaes .................. ..................... ....................... ........ 499
A
Usand o wget com proxy ........ ..................... ...... ....... .................... ...... 506 Arquivos de configurao ..... ...... ........................... ..... .. ........... ....... ...... 507
Brincando pela rede com o netcat... ............................ ........ .................... ...... 51 3 Coisas do bem .... ............................. .................. .. ..... ........... ........ ... ..... 514 Coisas do mal ........................ ........ ............... ....... ................................ 517 Resumo .......... ... ................ ............... ................ .. ........ .. ..... ................... 519
Apndice 6. Significado das Opes mais Frequentes no Shell. ...... 520
A ndice 7. Resoluo dos Pro ramas ........ ............... ............ ............ 522
lndice Remissivo .............................. ...................................................... 535
Matenal com direitos aLIora1s
Material com direitos autorais
Parte I
Matenal orn d1re1tos at,tora1s
Material com direitos autorais
1 f ~~ l Captulo 1 .
.
.
.
Iniciando uma sesso Linux Toda sesso no Linux comea com uma solicitao de um nome de login. Aps o usurio informar o seu login, uma senha solicitada. Por motivos bvios, a senha digitada no aparece na tela. Um detalhe a ser observado que o Linux faz distino entre letras maisculas e minsculas. Senhas que diferem em pelo menos um caractere mais-culo/minsculo so consideradas diferentes.
Sempre que um usurio digita seu nome de login e se-nha corretamente, um Shelf invocado e a partir dele o usurio passa a dar comandos e interagir com o sistema: Con e c tiv a Linux 7 . 0 Kernel 2 . 2 . 19- l Scl l ogin : d 3 2 7760 Passv,ord : La s t. login: Non May 2 7 11 : 3 6 : 55 f.rom lxr jd090 $
O superusurio, conhecido como root, tambm o res-ponsvel por cadastrar os usurios, dando para cada um o nome de login correspondente. A senha deixada em branco, e o sistema solicita a mudana de senha na primei-ra vez em que o usurio se ''logar". O superusurio pode tambm definir Shells especficos para cada usurio.
3 Material com direitos autorais
4 Programao Shell Linux
Encerrando uma sesso Linux - exit, logout Como em todo sistema multiusurio, assim que terminar seu trabalho cada usurio deve encerrar sua sesso. Dois comandos realizam esta tarefa: exit e logou t . O comando l o gou t encerra de uma vez a sesso do usurio, j o comando exi t encerra somente o Shell corrente. aconselhvel sempre utilizar o comando exit em vez de l ogout , pois pode haver uma situao em que o usurio tenha invocado um She/1 a partir de outro. Exemplos: $ exit
ou
$ logout
Para l ogout , pode-se usar tambm a combinao de teclas d , mas esse recurso nem sempre est habilitado. $ 'd
passwd - Alterando a senha Sintaxe: passwd [ usuario)
O comando passwd perm ite a um usurio mudar sua prpria senha, ou ao superusurio mudar a senha de qualquer usurio. A lguns sistemas pe-dem a senha antiga antes de solicitarem a nova. Algumas implementaes do Unix criticam de forma severa a nova senha, quer seja impondo limites mnimos de tamanho ou combinaes de letras maisculas, minsculas e nmeros. Esses aspectos de segurana visam evitar que usurios no au-torizados descubram senhas dos usurios do sistema. Exemplo $ passwd Changi ng passvTo rd for use r jneves . Changing passv1ord f o x j neves (currenc) UN IX pass>To rd :
Material com direitos autorais
Comeando devagarinho 5
Ne\o~ password : BAD PASSWORD: it is based on a dict i onary v1ord Ne\..r pass\\rord :
BAD PASSWORD: it is based on a dict i onary v1o rd New pa ss\to r d : BAD PASSWORD: it is based on a dict i onary wo rd pa SS\vd : Aut:hentication token manipulation e r ror
No exemplo anterior, tentei alterar por trs vezes a minha senha para j u lianaOO , os algoritmos de comparao do passwd inferiram que, em virtude do meu nome ser julio, a senha que estava propondo era muito bvia e a alterao no se processou. $ passwd Changi ng passv1ord for usex j ne ves. Changing pass\tlord f o r jneves (current) UNI X passv1ord : Netv pass;vo rd : Retyp e new passvrord: passtvd : all authenticat:i on tokens updated successfully .
Agora sim, a senha foi alterada.
Comandos Em linha de comando, o Linux oferece uma grande variedade de coman-
dos a serem usados. Aps pressionar o os comandos informados so examinados pelo She/1 e aps so passados para o Linux, que inicia a ao apropriada ou exibe uma mensagem de erro.
De um modo geral os comandos do Unux tm a seguinte forma: $ comando ( - opes ... ] (a rgument os ... J
Exemplos: $ who $ who -H $ who am ~
S o comando Comando e opo Comando e argumentos
Os comandos do Shell, nessa parte do livro, referem-se todos ao Bour-ne-Again Shell (bash).
Material com direitos autorais
6 Programao Shell Linux
Obtendo ajuda O Linux oferece diversas formas de ajuda aos seus usurios:
.J Comandos para pedir Ajuda he l p Mostra informaes gerais sobre os built-ins do Shell mam Mais do Linux
apropos Mostra sobre um Obtm uma breve de~;cn
Comeando devagarinho 7
man pages - Manual de Referncia Sintaxe: man [ - aP] [seo] t pi co
A documentao padro do Linux, chamada de man pages , contm aju-da para todos os comandos padro do Unix. Para que o sistema tambm contenha man pages de utilitrios e aplicaes no padro, estes devem encarregar-se de inclu-las automaticamente durante sua instalao.
Sempre digo que o man o comando mais importante, pois a nica "pessoa" que conhece todos os comandos com as respectivas opes.
O Manual de Referncia do Unix dividido em oito sees:
Subdivises das man-pages
1. Comandos de usurios Comandos que podem ser executados a partir de um Shell
2. Chamadas de sistema Funes que tm de ser executadas pelo kernel
3. Bibliotecas de funes A maioria das funes da biblioteca libc 4. Formatos de arquivos Drivers e hardware
especiais
5. Arquivos de configurao Formatos de arquivos e convenes
6. Jogos e demonstraes bis
7. Pacotes de macro e Sistemas de arquivos, protocolos de rede, cdigos convenes ASCII e outros
8. Comandos de administra0 Comandos que muitas vezes do sistema apenas o root pode executar.
O comando man apresenta todos os tpicos do manual Linux, de uma forma semelhante ao manual impresso. Entretanto, man o utilitrio de documentao padro e est presente em qualquer Unix, alm de seus comandos serem os mesmos em qualquer sistema.
Matenal orn d1re1tos at,tora1s
8 Programao Shell Linux
armetro Funo
-a
-p
seo
tpico
Encontra todas as pginas que coincidam com o padro Indica um programa paginador alternativo Indica uma das oito sees do manual a procurar Indica qual tpico procurar. O tpico deve ser exa-tamente o nome de comando, chamada de siste-ma, etc
Ao encontrar o tpico solicitado, o programa aceita comandos direta-mente do teclado. Os principais so:
Comando Ao h Mostra a ajuda do man q Sai doman --~ -------------------------------~ [ N)e Avana uma linha, ou N linhas, quando especificado
Exemplos: $ man l ls LS (1} NOME
[N)y Volta uma linha, ou N linhas, quando especificado f ------------~------~~--~---------Avana uma tela b Volta uma tela
/texto Procura por um texto no texto apresentado pelo man
ls, di r, vdir - list a o contedo do diret rio S INOPS E
ls [opes ] (arqui vo ... ] di r [arquivo ... ) vdi r [arquivo .. . )
$ man passwd PASSWD (5} NOME
Format os de Arqui vo
pas svtd - a rquivo d e senhas DESCRI O
LS ( 1)
PASSIID ( 5}
Passwd um a rquivo t e xto , que contm a lista d e contas do s i ste -ma, fornecendo para cada cont a qual quer inf ormao t i l como i dentificao numr i c a d o usur io . ..
Matenal orn d1re1tos attora1s
Comeando devagarinho 9
apropos- Informaes sobre um tpico Sintaxe: ap r opos tpico
Uma facilidade bastante interessante existente em sistemas Unix/Linux o comando a p ropos . Este comando consulta um banco de dados consis-tindo da descrio do comando. bastante til em situaes em que se de-seja executar determinada tarefa e no se conhece o nome do comando.
Por exemplo, caso eu no me lembrasse qual era o compilador C insta-lado no meu sistema, eu poderia digitar: $ apropos comp ilar cccp, cpp {1} - Th e GNU C-Compat i b l e Cornpiler Pr.epr.ocessor . g ++ (1 ) - GNU p rojec t C++ Compiler gcc , g++ ( 1 ) - GNU p roject c and C++ Compile r (v 2 . 7 )
Uma vez de posse dessa informao eu digitaria ento $ man gcc
para obter informaes especficas sobre o compilador gcc. Observe que os sublinhados no exemplo foram meus, para mostrar que
o comando apropos procurou a palavra (no caso compHer) em todo o ban-co e no somente no rol das instrues.
Todavia, este banco de dados no criado automaticamente. O adminis-trador de sistemas precisa criar este banco de dados atravs do comando c a tma n . Esse comando ir varrer todos os diretrios especificados na vari-vel de ambiente MANPATH e ir construir um arquivo chamado wha t i s , onde ir colocar as descries dos programas. Caso no exista esse arquivo, ao se 1nvocar o a propos uma mensagem parecida com esta ser exibida:
$ aprop os compilar apropos : fi l e /us r/ local/manh~hatis not found
Create t he Hha. t is database us i ng t he catma n - ;.v conunand .
Material com direitos autorais
10 Programao Shell Linux
Para construir esse banco de dados, emitir o comando: $ ca tman -w
Uma vez criado o banco de dados, o comando apropos (ou man - k) po-der ento ser utilizado. Exemplos:
. . No intuito de mostrar a diferena entre este comando mo (whatis) , os exemplos dos dois sero iguais.
(apr opos) e O prOXI-
$ apropos chmod chmod chmod fchmoct [c hmod] $ apropos ifconfig ifconfig
( 1 ) (2) (2) -
( 8) -
change fil e ac.:cess change per mi ss i ons change per miss i ons
configu re a networ k
whatis - Descrio de comandos Sintaxe: what i s tpi co
pexmissions o f a fil e o f a fi l e
int erface
O comando whatis obtm uma breve descrio de um comando do sistema.
Exemplos: $ whati s chmod chmod chmod $ whati s ifconfi g ifconfig $ whati s cornp i ler
(1 ) (2)
change file access perrnissions change pe r missions o f a file
(8) - configure a netV~o.t:k int e.rface
compiler : nothing apl(ropx iate
Material com direitos autorais
? :~ ~~ j Captulo 2 I \ : f , I . :
: dtretortos
.
.
.
Sistema de arquivos do Unix No sistema operacional Unix/Linux, costuma-se dizer que "tudo" arquivo. Isto se deve ao fato de o sistema opera-cional tratar de modo semelhante tanto arquivos comuns como dispositivos de sistema.
O sistema de arquivos do Unix/Linux hierrquico. A base desta rvore um diretrio chamado diretrio raiz, representado por 1 (o caractere barra). Enquanto outros sistemas operacionais tratam individualmente discos e parties, o Unix/Linux considera todos os dispositivos, discos, arquivos e diretrios como um todo, alocando-os numa nica rvore do sistema de arquivos.
Nos sistemas Linux/Unix cada diretrio da rvore ar-mazena arquivos segundo sua funo, seguindo (mais ou menos) o padro apresentado na pgina seguinte.
Os arquivos no possuem tamanho previamente deter-minado. Quanto estrutura interna dos arquivos, o Unix! Linux no faz nenhuma restrio. Um arquivo pode conter qualquer sequncia de bytes, proporcionando grande fle-xibilidade ao sistema.
Os nomes de arquivos podem ter quantidades mxi-mas de caracteres diferentes para sistemas operacionais diferentes. Nos antigos Unix tradicionais ( System V), o
11 Material com direitos autorais
12 Programao Shell Linux
lim ite era de 14 caracteres. Nos modernos Unix baseados no BSD, o limite 256 caracteres.
J Diretrio Tipos de Arquivos /bin Utilitrios principais do Unix /etc Programas e arquivos administrativos /lib Bibliotecas de funes, programas e dados /tmp Arquivos temporrios
/home/jneves Arquivos do usurio jneves /usr/bin Utilitrios /usr/sbin Utilitrios usados somente pelo "root"
/usr/include Arquivos de cabealho (por exemplo, da linguagem C) /usr/lib Bibliotecas de funes
/usr/spool reas de spool (por exemplo, de mail e impressora)
/dev Arquivos especiais de dispositivo
No Unix/Unux no existe o conceito de extenses para nomes de arqui-vo. Podemos at us-las para faci litar a compreenso dos tipos de arquivos, mas no so de modo algum obrigatrias. Um arquivo chamado apostila.txt ser visto pelo sistema como apostila . t x t e no como apostila extenso t xt . Isto especialmente til quando usamos algo que poderamos cha-mar de "mltiplas extenses", ou seja, podemos nomear um arquivo como aposti l a . t ar . gz .
Operaes com o sistema de arquivos Tanto em algumas verses de Unix baseadas em PCs quanto no Linux, possvel ter vrios She//s em uso. Cada She/1 pode ter um diretrio corrente de forma independente dos outros, porque diretrio corrente aquele em que voc est posicionado num dado momento.
Cada usurio possui tambm um diretrio prprio para armazenar seus arquivos. Este diretrio chamado de diretrio home do usurio e geral-mente tem o mesmo nome do login name do mesmo. Os diretrios home dos usurios peduarcto e xanctao costumam ser, respectivamente: / home/ pedua r do e / home/xandao .
Matenal orn d1re1tos attora1s
Manipulando arquivos e diretrios 13
Normalmente, logo aps o seu login, o seu diretrio corrente fica sendo seu prprio diretrio home, isto , quando voc se "Ioga" posicionado no seu diretrio home, portanto neste momento o seu diretrio corrente o home.
Caminhos de diretrios (paths) Um caminho de diretrios especifica uma sequncia de diretrios a percor-rer para chegar a algum ponto na rvore de diretrios. Para que se possa caminhar entre eles, cada vez que se cria um diretrio no Unix/Linux, so criadas referncias para este (que funcionam como apelidos), que so: "." e " .. " . O nico diretrio que no possui estas referncias o diretrio raiz 1 " 1" l O ". " referenda o diretrio corrente, enquanto o " .. " faz referncia a seu diretrio pai na rvore de diretrios.
Na especificao de caminhos, o delimitador o caractere " / ". Por exemplo, o caminho do diretrio home do usurio peduardo / home/pedu-ardo . Uma especificao de diretrios deste tipo chamada de caminho absoluto, pois no importa qual seja o diretrio corrente, /home/pedua r C!o sempre leva ao diretrio home do usurio p ectua r do .
Por outro lado, especificaes de diretrio podem ser do tipo caminho re-lativo, onde a referncia a um diretrio feita a partir do diretrio corrente.
r -- .
I .
'
--
I etc
xandao
rvore de diretrios
I
home
peduardo ] neve s
. -
usr
- - - - , .
I .
'
---.., .
I .
'
Matenal orn d1re1tos at1tora1s
14 Programao Shell Linux
Por exemplo, baseando-se na rvore de diretrios /home , se o diretrio atual fosse / home /pectuarcto , poderamos fazer referncia ao diretrio home do usurio xandao , utilizando o caminho relativo .. /xandao . O caminho ab-soluto para o mesmo diretrio seria: / nome /xandao . Repare que o caminho absoluto sempre comea por uma barra (I l , isto porque o diretrio "1" o raiz e da que comeam todos os endereamentos absolutos. O relativo jamais comea por uma " ; " , j que seu endereamento feito em relao ao diretrio corrente.
A primeira coisa que sempre vem em mente no uso de um sistema ope-racional como lidar com os arquivos dentro dele ... Nesta seo eu vou mostrar alguns comandos bsicos para trabalhar com os arquivos.
L1 Comandos para manipulao de arquivos e diretrios pwd Informa o nome do diretrio corrente
cd Navegando entre diretrios ls Listar arquivos
cp Cpia de arquivos e diretrios
mv Move arquivos e diretrios
ln Estabelece ligaes entre arquivos mkdir Cria um diretrio rmdir Remove um diretrio vazio
rm Apaga arquivos e diretrios
file Indicando tipo de arquivo
grep Procura arquivos por contedo
find Localiza arquivo por suas caractersticas
basename Devolve o nome de um arquivo recebendo o caminho com-pleto
dirname Devolve o nome do diretrio recebendo o caminho completo
Matenal orn d1re1tos at,tora1s
Manipulando arquivos e diretrios 15
pwd - Informa nome do diretrio corrente Sintaxe: pwd
Os prompts default do Linux so:
- # - Para root; - $ - Para todos os outros usurios.
Isso pode- e deve- ser alterado, se modificarmos a varivel PS1, para refletir o nosso diretrio corrente. Caso isso no tenha sido feito, para sa-bermos o nome do diretrio corrente usamos esta instruo. Exemplos: $ pwd /usr/local/bin
cd - Navegando entre diretrios Sintaxe. cd [nome - do- di retrio)
Esse comando mudar o diretrio atual de onde o usurio est. Pode-mos tambm fazer algumas simplificaes no n ome- do- d ire trio no Linux para facilitar.
As simplificaes que citei so: _j
(ponto) . (dois pontos)
- (til) 1 (barra) - (hffen)
--~
Significado Diretrio atual
Diretrio anterior Diretrio home do usurio
Diretrio Raiz
ltimo diretrio
Matenal orn d1re1tos attora1s
16 Programao Shell Linux
Por exemplo, se eu quero ir para o meu diretrio home, fao o seguinte: $ pwd / us..: / l oc a l / b i n $ cd -$ pwd / home/ jneves
Ou seja, eu estava no diretrio /usr/local/bin, e com um simples cd para o diretrio - , fui para o meu diretrio h o me / home/ jnev es . O coman-do pwd foi utilizado para mostrar o caminho completo do diretrio corrente (no confunda home com corrente: o primeiro o diretrio para o qual voc enviado logo aps o logn, o segundo onde voc est agora) .
Uma outra forma de usar o til (- > a seguinte: $ pwd /home / jneve s $ cd -jul iana $ pwd / home/juliana $ cd -/ home / jneves
No exemplo acima, eu estava no diretrio / home/ jneves e desejava ir para o diretrio home da Juliana; para isso eu fiz - julian a (que se l home da Juliana). Em seguida usei o hfen (l-se cd menos) para voltar ao ltimo diretrio em que eu estive.
ls - Lista arquivos Sintaxe: ls [opes ] [arquivo/diretrio]
Esse comando serve para listar os arquivos do diretrio especificado. O corrente o default, isto , se o comando for executado sem argumen-tos, mostrar todos os arquivos existentes no diretrio atual. Entenda suas opes:
Material com direitos autorais
- 1
-a
- r
- h
-R
Manipulando arquivos e diretrios 17
Significados Lista os arquivos em formato detalhado. De ali (todos). Lista todos os arquivos, inclusive os corne-ados por ponto ( . > .
--'--
Na ordem alfabtica reversa. Combinado com - 1 imprime o tamanho de forma mais leoi vel exemplo: 1K 234M 2G). Lista tambm os subdiretrios encontrados
Exemplo de uma listagem detalhada: $ l s - 1 t o t al 204 - r l.v- r - - r - - 1 j neves ) neves 1609 No v 8 2002 calculadora . sh - r\v- r -- r -- 1 jneves j neves 11 Se p 1 19 : 41 ca t dn;xr- xr- x 2 j neves j neves 4096 Feb 14 2003 cgi - .rt-rxr- xr - x 1 jneves j neves 302 sep 4 2002 core s . sh - r l.vxnrxrwx 1 j neves j neves 178 Sep 3 2002 cripta . sed
Podemos tambm usar no ls os curingas ou wildcards, que nada mais so do que caracteres que substituem outros e que no devem ser confun-didos, de forma alguma, com expresses regulares, que constam de um apndice neste livro.
Exemplo: se eu quero listar todos os arquivos que tm a extenso . s h , fao o seguinte: $ l s * .sh Verificas i ntax .. sh ednum. s h hton . sh octais l . sh s pinl . s h cores . sh fat iacmd . sh lstsource . sh oc t ais2 . sh testa - da t as . sh dat a . s h finds tr . s h l stta mex t . s h pad . sh tstspi n . s h diasem .sh ge t opt st . s h maimin . sh rot i nas . sh velha . sh
O curinga asterisco {*> representa qualquer coisa e ligado a. sh lis-ta qualquer coisa term inada em . s h . Existem vrios outros curingas, vamos ver o ponto de interrogao (?J. que substitui um e somente um caractere: $ ls ??? ?. sh data . s h d t on . sh grep . s h h ton. sh ntod . s h n toh . s h s pin .sh
Matenal orn d1re1tos attora1s
18 Programao Shell Linux
Dessa forma, cada ponto de "perguntao" ( ? 1 substituiu um caractere, ocasionando a listagem de todos os arquivos com quatro caracteres e ter-minados por . sh .
Se quisssemos listar uma faixa determinada de opes, usaramos col-chetes. Veja como: $ l s [os]*.sh octa is l . sh octais2 . s h sin t ax . sh . ' spJ.n. sr1 spin l . s h
Neste exemplo listamos todos os arquivos comeados por o ou s , se-guidos por qualquer coisa ( * > e terminados por . sh .
Para finalizar veja os dois exemplos a seguir: $ ls [!os] *. sh VerificaSintax . sh dton . sh g r aph . sh ma i mi n . s h t es t a-datas .sh cores.sh ednum . s h grep .sh n t od . s h tstspi n . sh da t a . sh fat iacmd . s h hton . sh ntoh . s h velha . sh d i asem. sh d i v.sh
findstr. s h l stsou r ce . sh pad . sh
$ ls [A- Z] * . sh Veri ficaS i ntax . .sh
ge t opt s t. sh lsctamext .sh .ro t i nas . sh
No primeiro caso, o ponto de "espantao" ( ! J serviu para negar o gru-po, assim listamos todos os arquivos que no comeam por o ou por s . No segundo, usamos a faixa A- z para listar todos que comeam por letra maiscula. Se nosso desejo fosse listar arquivos comeados por qualquer letra poderamos ter feito: $ ls [A-Za-z] , 3*
cp-Cpia de arquivos e diretrios Sintaxe: cp [opes ]
O comando cp copia arquivos e diretrios. Como opes dele, pode-mos ver1:
1. Essas opes so comuns ao Unix e ao Linux. mas o segundo tem inmeras outras, dentre as quais destaco a opo - f, que fora a substituio no caso de j existir o arquivo-de-destino.
Material com direitos autorais
Manipulando arquivos e diretrios 19
LJ Opes Significados -i Modo interativo - v ,Mostra o que est sendo copiado -r Copia recursivamente (diretrios e subdiretrios)
Exemplos: No tenho certeza se j existe um backup do meu arquivo tel e f ones .
Caso haja, para pedir confirmao eu fao: $ cp -i telefones tel efo nes.bak cp : overwrite ' telefones . bak'?
Como o arquivo telefones . bak. j existia, antes de sobrescrev-lo, pedida a sua confirmao. Responda y para sim ou n para no.
Agora eu vou copiar recursivamente todo o meu diretrio home (recursi-vamente significa com toda a rvore de subdiretrios abaixo dele) para o diretrio julio. Para tal eu fao o seguinte: $ cp - r ~jneves j ulio O- significa home, no esquea
mv - Move arquivos e diretrios Sintaxe: mv [opes ]
Este comando normalmente usado para renomear arquivos, mas nos exemplos a seguir veremos que ele tambm, por vezes, copia o arquivo para e em seguida remove .
Suas opes so semelhantes s do comando cp. Exemplos:
Vamos renomear o arquivo script . sh para scri pt . velho : $ l s - li script.sh 165751 - rw- r -- r -- 1 j neves sup 120 Dec 8 12 : 52 script . sh $ mv s cript.sh script . velho $ l s - l i script.velho 165751 - rvT- r -- r -- 1 jneves sup 120 Dec 8 12 : 52 scri pt . velho
Matenal orn d1re1tos at,tora1s
20 Programao Shell Linux
Neste exemplo, primeiramente listamos o arquivo scrpt . s h e, com a ajuda da opo -i do comando 1s , pudemos ver que seu nocte (pense em endereo de disco) era 1 65751 , como aps o uso do comando mv seu .i. node permaneceu o mesmo, podemos afirmar que o que houve foi uma simples mudana de nome, sem afetar a localizao dos dados.
Vamos ver um outro exemplo, neste caso eu quero mover o arquivo arq que est no meu diretrio para o diretrio fs2 que est em outro file system: $ l s - li a r q 165886 - rv1xr- xr- x 1 jneves sup 153 Nov 11 18 :17 arq $ mv a r q / f s2 $ l s - li / f s2/ arq
20 - rvlxr - xr- x 1 jneves sup 153 Nov 11 1 8 : 1 7 /fs2/ arq
Repare na sequncia de comandos que, pelo tamanho dos arquivos, seus dados no se alteraram, porm como seus i noctes mudaram (no ori-ginal era 165 886 e depois passou para 2 0 ), podemos afirmar que o arquivo a r q original foi copiado para /fs2 e depois removido. Isso se deve ao fato de cada file system possuir e administrar a sua prpria tabela de i nodes. Suponha agora que eu j soubesse da existncia de um arquivo scri p t . velho e quisesse fazer a mesma coisa. J sabendo que seria feita a per-gunta se eu desejaria sobrescrever s c ript . vel ho, e para no ter queres-ponder a esta pergunta, eu fao: $ mv - f script . sh script .vel ho
ln - Estabelece ligaes entre arquivos Sintaxe: l n [ - s ] < l igao>
Este comando usado para criar ligaes (links). Existem dois tipos de ligaes:
Hard Link: neste caso, o arquivo ligao tem o mesmo i nocte do a r q uivo- ori g e m, isto , os dois compartilham os dados;
Material com direitos autorais
Manipulando arquivos e diretrios 21
Link Simblico: neste caso, o arquivo ligao tem inode diferen-te do arquivo-origem, e seu contedo somente o caminho do arquivo-origem.
Exemplos: Suponha que eu tenho um arquivo com o sinttico da folha de pagamen-
to e esse arquivo pertence ao grupo folh a , que tem todos os direitos sobre ele. Se eu quisesse que o pessoal do grupo contabil tivesse somente direito de leitura destes dados, cr iaria um hard fink e alteraria suas perm is-ses e grupo. Veja s como eu estabeleo este link: $ l n sinteticof s inte ticoc $ l s - li s i n t etico? 165676 - rw- r - - r -- 2 j neves sup 120 Dec 8 11 : 5 1 sinteti coc 165676 - rw- r - - r - - 2 ) neves sup 1 20 Dec 8 11 : 51 s i nteti cof
Eu j tinha o arquivo s inteticof (que ser do grupo fo lha} e liguei a ele o sinteticoc (que ser do grupo contabi l), com a opo - i do comando ls. Podemos notar que o i node de ambos 165 676, o que significa que a base de dados comum, ou seja, um arquivo que possui dois nomes.
Para distinguir, vamos agora repetir a mesma operao, porm criando um link simblico usando a opo - s do comando ln : $ ln - sf s i nteticof sinteticoc $ ls - li sint e tico? 165745 l rvlxDxrviX 1 j neves sup 1 0 Dec 8 12 : 09 s inteticoc- >s i ntet icof 165676 - rv1- r - - r - - 1 jneves sup 12 O De c 8 11: 51 s i n t eticof
Repare nesse caso, que o l s do sinteti c o c comea com um 1 (sig-nificando que um arquivo de fink) e que ao seu final tem uma setinha apontando para sin teti cof que o arquivo ao qual est ligado. Repare ainda que os i nodes so diferentes ( s inteticof continua com 16567 6 , ao passo que s i nteti coc passou para 165745) e as permisses tambm (as permisses sero dadas pelo sin t eticof) . O mais interessante que o tamanho do sintet icoc l O; isso causado pelo fato de seu contedo ser somente o caminho/nome do arquivo ao qual est ligado (neste caso sintet icof tem 1 O letras e por estar no mesmo diretrio no necessrio o caminho).
Material com direitos autorais
22 Programao Shell Linux
mkdir - Cria um diretrio Sintaxe: mkdi r
Deve-se observar que esse comando usa todas as simplificaes do comando cd . Exemplo: $ mkdir curs o
Criar um diretrio curso abaixo do diretrio corrente. $ mkdi r . . /cur so
Criar um diretrio curso "pendurado" no diretrio acima do corrente, isto , criar um diretrio "ao lado" do corrente. $ mkdir -j neves/curso
Criar um diretrio curso sob o diretrio home do usurio jneves .
rmdir - Remove diretrio Sintaxe. rmdir
Remove um diretrio somente se ele estiver sem contedo. Esse co-mando, assim como o anterior, tambm utiliza as convenes de endere-amento relativo como vimos no comando cd . Exemplo: $ r mdir - / dirtst
Esse comando remover o diretrio ctirtst do meu horne (por causa do til) se ele estiver sem contedo.
Material com direitos autorais
Manipulando arquivos e diretrios 23
rm - Deleta arquivos e diretrios Sintaxe: rm [opes]
Opes Significados
- f Ignora arquivos inexistentes e no pede confirmao antes de remover
-I Sempre pede confirmao antes de remover
- r Remove o(s) diretrio(s) especificado(s) e seu(s) conte-do(s), recursivamente
Esse comando apaga arquivos ou diretrios. Exemplos: $ rm arql a r q2 a r q3
Neste exemplo, removi os arquivos arql , arq2 e arq3 . Um mtodo mais "cabea!" (argh!) e menos braal para fazer o mesmo efeito seria: $ rm arq [l - 3 ]
Outro exemplo: $ rm phpdi r rm : remove directory 'phpdir ' ? y rm: cannot remove di rectory ' phpdir ' : Is a directory $ rm - rf phpdr
No exemplo seguinte, tentei remover um diretrio com o comando rm. Parecia que tudo iria correr normalmente, mas na reta final ele se "arrepen-deu" e deu a mensagem de erro. Claro! Para remover diretrio temos que usar rmdir, certo? Nem sempre! O rmdir s serve para remover diretrios vazios, isto , sem arquivos ou subdiretrios no seu interior. Para remover diretrios com dados, usamos o comando r m com a opo -r, o que foi feito em seguida, com sucesso (a opo -f foi usada conjuntamente para eu no ter que confirmar um a um a remoo de um monte de arquivos).
Matenal orn d1re1tos attora1s
24 Programao Shell Linux
file - Indicando tipo de arquivo Sintaxe: file
Esse comando retornao tipo do arquivo a rquivo conforme determ ina-dos padres do sistema operacional. Exemplos: $ fi l e numtodc.sh numtodc.sh : Bourne- Again s bell scr1p
_j Opes
- c
-i
- 1
-v
-n
Exemplos:
Manipulando arquivos e diretrios 25
Significados Somente a quantidade de linhas que casarem com uma expresso regular; No diferencia maisculas e minsculas na procura; No mostra a linha encontrada, somente o nome arquivo; Inverte a procura, mostrando somente as linhas que no casaram com a expresso especificada. Esta opo parece meio maluca, mas no : muito til para excluir
de um dado Precede cada linha com seu nmero relativo dentro de arquivo.
$ grep lixo dica . s h \~hile read l i xo quinte r essa $ g rep jul io /etc/p asswd $ grep - i jul io / etc/ passwd jneves : x: 54002 : 1032 :Ju l io C. Neves,DISB . O, {821) 7070 : /home/jneves : /bin/bash
No primeiro g rep julio nada foi localizado, no segundo (com a opo - i ) foi encontrado um registro com :!ulio .
O comando g r ep bastante complexo (no duro no um comando, mas sim uma famlia de comandos) e ser estudado de forma mais aprofundada na parte de programao.
find - Procurando arquivo por caractersticas Sintaxe: find [c a minho ... ] expr esso [a o]
O comando finct procura arquivos pelo nome ou outras caractersticas. Parmetros
c aminho Caminhos de diretrio a partir do qual ir procurar pelos .
arqu1vos;
Matenal orn d1re1tos attora1s
26 Programao Shell Linux
expresso
ao
Define quais critrios de pesquisa. Pode ser uma combina-o entre vrios tipos de procura; Define que ao executar com os arquivos que atender aos critrios de pesquisa definidos por expresso .
Os principais critrios de pesquisa definidos por expr esso so:
- name nome
-user usurio
-group grupo
-type c
.J Valores de c b
c
d
p
f
1
s
- size n ( bckw)
Procura arquivos que tenham o nome especificado. Aqui podem ser usados metacaracteres ou caracteres curin-gas, porm estes caracteres devero estar entre as-pas, apstrofos ou imediatamente precedidos por uma contrabarra (por enquanto fico devendo esta explica-o porque isso ser exaustivamente ensinado quando comearmos a programar); Procura arquivos que tenham usuri o como dono; Procura arquivos que tenham grupo como grupo dono; Procura por arquivos que tenham o tipo c, correspon-dente letra do tipo do arquivo. Os tipos aceitos esto na tabela a seguir:
Tipo de arquivo procurado
Arquivo especial acessado a bloco
Arquivo especial acessado a caractere
Diretrio
Named pipe (FIFO) Arquivo normal
Link simblico
Socket
Procura por arquivos que usam mais ( +n) de n unidades de espao ou a menos (-n) de n unidades de espao.
Matenal orn d1re1tos at,tora1s
Manipulando arquivos e diretrios 2 7
_j Unidade Valor b Bloco de 512 bytes (valor defau/Q c Caracteres k Kilobytes (1 024 bytes) w Palavras (2 bytes)
- a time d Procura por arquivos que foram acessados h mais ( +d) de d dias ou a menos ( -d) de d dias;
- ctime d Procura por arquivos cujo status mudou h mais (+ct) de ct dias ou a menos ( - d) de d dias;
- mtime d Procura por arquivos cujos dados foram modificados h mais ( +d) de d dias ou a menos ( -d) de d dias.
Para usar mais de um critrio de pesquisa, faa: expresso, expr esso, ou expresso, -a expresso~ para atender aos cri-trios especificados por expresso, ~ exp resso~ ; expresso1 - o expresso2 para atender aos critrios especificados por expresso1 OU expresso, .
As principais aes definidas para ao so - p rin t
- exec cmd I} \ ;
Essa opo faz com que os arquivos encontrados sejam exibidos na tela. Essa a opo default no Linux. Nos outros sabores Unix que conheo, se ne-nhuma ao for especificada, ocorrer um erro; Executa o comando cmd . O escopo de comando considerado encerrado quando um ponto e vrgu-la (;) encontrado. A cadeia 1 1 substituda pelo nome de cada arquivo que satisfaz ao critrio de pesquisa e a linha assim formada executada. As-sim como foi dito para a opo - name, o ponto e vrgula (;)deve ser precedido por uma contrabarra, ou deve estar entre aspas ou apstrofos;
Matenal orn d1re1tos attora1s
28 Programao Shell Linux
- ok cmd ( l \ ;
- pxintf f o rma t o
Exemplos:
O mesmo que o anterior, porm pergunta se pode executar a instruo cmd sobre cada arquivo que atende ao critrio de pesquisa; Permite que se escolha os campos que sero lista-dos e formata a sada de acordo com o especificado em f orma to .
Para listar na tela ( - print) todos os arquivos, a partir do diretrio corren-te, term inados por . sh , faa: $ ftnd . - name \ *.sh . /undel e t e . sh . /ntod . s h . / dtn . s h . /gra p h . sh . / tst.s h /cotaf s . sh . /tsts h/data . s h . / t s t sh/ velha . sh . /tstsh/charascii . s h
Ao no especificada -print defavn
} estes quatro primeiros arquivos foram encontrados no diretrio corrente .
l Estes quatro foram encontrados no diretrio tstsh, sob o diretrio corrente Preciso abrir espao em um determinado file system com muita urgn-
cia, ento vou remover arquivos com mais de um megabyte, cujo lt imo acesso foi h mais de 60 dias. Para isso, vou para este file system e fao: $ find . -type f - size + l OOOOOOc - atime +60 - e xec rrn {) \ ;
Repare que no exemplo acima usei trs critrios de pesquisa, a saber:
- type f : Todos os arquivos regulares (normais) - s i ze + lOOOOOO c : Tamanho maior do que 1000000 de caracteres (+looooooc) - atime +60 : ltimo acesso h mais de 60 (+60) dias.
Repare ainda que entre esses trs critrios foi usado o conectar g , isto , arquivos regulares g maiores que 1 MByte ~ sem acesso h mais de 60 dias. Para listar todos os arquivos do disco terminados por . s h ou . txt, faria: $ f ind I - name \*.sh - o -name \ *. txt - pri nt
Material com direitos autorais
Manipulando arquivos e diretrios 29
Neste exemplo, devemos realar, alm das contrabarras (\ ) antes dos asteriscos 1 *) , o uso do - o para uma ou outra extenso e que o diretrio inicial era o raiz 11 l : assim sendo, esta pesquisa deu-se no disco inteiro (o que frequentemente bastante demorado).
Com o prin tf possvel formatar a sada do comando find e especi-ficar os dados desejados. A formatao do p rint f muito semelhante do mesmo comando na linguagem C e interpreta caracteres de formata-o precedidos por um smbolo de percentual ( % l . Vejamos seus efeitos sobre a formatao:
Caract~e~re~~~~~~------------------------------%f %F == I== %g
Indica a qual tipo de file system o arquivo pertence Grupo ao qual o arquivo pertence
%G
%h %i
%m
%p %s %u %U
Grupo ao qual o arquivo pertence (GID- Numrico) Caminho completo do arquivo (tudo menos o nome) Nmero do inode do arquivo (em decimal) Permisso do arquivo (em octal) Nome do arquivo Tamanho do arquivo Nome de usurio (username) do dono do arquivo Nmero do usurio (UID) do dono do arquivo
Tambm possvel formatar datas e horas obedecendo s tabelas a segu1r:
/ Caractere %a
%c %t
Significado Data do ltimo acesso Data de Data de alterao
Matenal orn d1re1tos at,tora1s
30 Programao Shell Linux
Os trs caracteres anteriores produzem uma data semelhante do co-mando date .
Veja um exemplo: $ find . - mune ".b*" -printf ' %t %p\n' Mon Nov 29 11 : 18 : 51 2004 . / . bash_logout Tue Nov 1 09 : 44 : 1 6 2005 . I . bash__profile Tue Nov 1 09 : 45 : 28 2005 . / . bashrc Fri Dec 23 20 : 32:31 2005 . / . bash_his t ory
Nesse exemplo, o %p foi o responsvel por colocar os nomes dos arqui-vos. Caso fosse omitido, somente as datas seriam listadas.
Observe ainda que ao final foi colocado um \n . Sem ele no haveria salto de linha e a listagem anterior seria uma grande tripa.
Essas datas tambm podem ser formatadas, para isso basta passar as letras da tabela anterior para maisculas ( %A, %c e %Tl e usar um dos formatadores das duas tabelas a seguir:
Significado H Hora (00 .. 23)
l== I Hora (01 .. 12) k Hora (0 .. 23) 1 Hora 1..1 M Minuto (00 .. 59) p AMor PM r Horrio de 12 horas (hh:mm:ss) seguido de AMou PM s Segundos (00 ... 61) T Horrio de 24-horas (hh:mm:ss) z Fuso horrio (na Cidade Maravilhosa BRST)
Matenal com direitos aLIora1s
Manipulando arquivos e diretrios 31
a Dia da semana abreviado A Dia da semana por extenso (Domingo ... Sbado} b Nome do ms abreviado B Dia do ms por extenso (Janeiro ... Dezembro) c Data e hora Dec 23 15:21 :41 d Dia do ms (01..31) o Data no formato mm/dd/aa h Idntico a b j Dia doano m Ms (01...12} u
w
w
X
y y
Semana sequencial do ano. Domingo como 1Q dia da semana
Dia sequencial da semana (0 .. 6) Semana sequencial do ano. Segunda-feira como 1 Q dia da semana
Representao da data no formato do pas (definido por $LC_ALL) Ano com 2 Ano com 4
Para melhorar a situao, vejamos uns exemplos; porm, vejamos pri-meiro quais so os arquivos do diretrio corrente que comeam por . b : $ ls - la .b* -r\v------- 1 d27 6707 ssup 21419 De c 26 17 : 35 . bash_history -r\.f-r--r-- 1 d276707 ssup 24 Nov 29 2004 . bash _logout - .nv-r--r-- 1 d27 6707 ssup 194 No v 1 09 : 44 . bash_profile -r\>J-r--r-- 1 d276707 ssup 1 42 No v 1 09 : 45 . bashrc
Para listar esses arquivos em ordem de tamanho, podemos fazer: $ find . -name ".b*" - print f ' %s\t%p\n ' I sor t - n 24 . / . bash_ logout 142 194 21 4 19
./. bashrc
. I . bash_ p.rofile
. / . bash_ history
No exemplo que acabamos de ver, o \t foi substitudo por um na sada de forma a tornar a listagem mais legvel. Para listar os mesmos arquivos classificados por data e hora da ltima alterao:
Matenal orn d1re1tos attora1s
32 Programao Shell Linux
$ find . - name " .b" - p rintf ' %T:t - %'l'm-%Td %TH : %TM: %TS %p \ n' I sort 2 0 04 - 1 1- 2 9 11 : 18 : 5 1 . / . bash_1ogout 2005- 11- 0109 : 44 :1 6 . / . b a s h _ p.rofile 2 005 - 11- 0 1 09 : 45 : 2 8 . / .bashrc 2005- 12 - 26 17 : 35 : 13 . / .ba s h _history
basename- Devolve o nome de um arquivo Sintaxe: basename caminho
Esse comando devolve o nome de um arquivo dado um caminho (abso-luto ou relativo). Exemplo: $ basename / etc/passwd pass\vd
dirname - Devolve o nome do diretrio Sintaxe: di.rname caminho
Esse comando devolve o nome do diretrio dado ao caminho. Exemplos: $ dirname / etc/passwd /etc $ cd $ dirnarne t e l efones
Devolveu o caminho absolllfo Fui para o meu dret1io home
Devolveu o caminho relativo
Como vimos nesses exemplos, este comando crocodilo, s vezes de-volve o caminho absoluto e outras o cam inho relativo, dependendo do que melhor para ele. Na parte referente programao neste livro, veremos que trabalhando com esse comando e com o p1-1d em conjunto, iremos con-tornar esse inconveniente.
Material com direitos autorais
!Captulo 3 :Mais Manipulao . .
.
.
j Isso mais parece uma Pharmcia, de tanta manipulao ... Mas prefervel deixar esses comandos em um captulo
independente, porque os que veremos agora se distin-guem um pouco dos outros, pois esses leem da entra-da padro (stdin = teclado) e escrevem na sada padro (stdout = monitor de vdeo). O seu propsito geralmente o de modificar a sada de outros, por isso, geralmente so utilizados em combinao com mais comandos, seja atravs de redirecionamentos, seja atravs de pipes (que aprenderemos na parte referente programao).
Esses comandos (tambm chamados de filtros) so: Comandos de filtragem
cat Exibe contedo de arquivos ==
wc
sort
head
tail
Conta caracteres, palavras e/ou linhas de arquivos Ordena o contedo de arquivos Exibe o incio dos arquivos Exibe o final dos arquivos
Nessa tabela, onde est escrito arquivo, deve-se en-tender entrada principal (stdin) ou arquivo, e a sada, caso no seja redirecionada, ser sempre a tela.
33 Matenal orn d1re1tos at,tora1s
34 Programao Shell Linux
cat- Exibe o contedo de um arquivo Sintaxe: cat [ - opes] [ nome_axquivo . . . )
Onde: nome arquivo nome de arquivo cujo contedo vai ser exibido (ou redire-
cionado). Se vrios nome_arq u i vo forem especificados, eles sero lidos um a um e apresentados na sada pa-dro (stdout) . Se nenhum argumento for dado, ou se o argumento " - " for utilizado, o comando c at l caracte-res da entrada padro (stdin). Quando a entrada padro o teclado (que o default), o texto precisa ser term ina-do com um CTRL+D (que gera um caractere EOF).
Significados -v Mostra os caracteres sem representao na tela - e Mostra os LINE_FEEO (ENTER) -t Mostra as -n
Exemplos: $ cat telefones Co Grippi Cl audia f.1arcia
Enio Cardoso Juliana Duarte Luiz Car l os Ney Garr afas Ney Gexhaxdt Paul a Duarte
(021) 555- 1234 (021) 555-2112 (023)232-3423 (024) 622 - 2876 (0 21) 767- 2124 (021) 988- 3398 (024) 543- 4321 (011) 4 49- 0219
$ cat > t e xtol . txt Is t o um tes t e do cat . "D $ cat t extol. txt
L do teclado e grava em texto. txt
ctrl+d para encerrar digitao Moslrao contedo de texfo.txt
Matenal orn d1re1tos attora1s
Isto um t este do ca t . $ cat > texto2. txt Hai .s um teste do cat
$ cat t e xto2 . txt Hais um teste do cat $ cat t extol . t x t t exto2.txt > texto3.txt $ cat t e x t o3 . t x t Isto um teste do cat Hais um t es t e do cat
Mais Manipulao 35
ctrt+d
Um uso muito interessante deste comando mostrar caracteres que normalmente no apareceriam no term inal de vdeo. Para tal devemos us-lo em conjunto com as opes - vet . Veja s: $ cat -ve t t elefones Ciro Grippi~ I (02 1 ) 555- 1234 $ Cl audi a 11arcia~I (02 1 )555-2112$ Enio Cardoso'I(023)232 - 3 423$ Juliana Duarte~I(024 )622-2876$ Luiz Carlos ' I (021) 767- 2124$ Ney Garrafas 'I(02 1 )988-3398$ Ne y Gerhardt ' I (024 ) 543- 4321$ Paul a Dua r te'I(O l l ) 4 49 -0219$
Repare que entre o nome e os parnteses do DDD, apareceu o smbolo AI e no final de cada registro apareceu um cifro
36 Programao Shell Linux
U, o que foi que houve? Eu usei a opo - n para numerar as linhas, a 13 tudo bem, mas a 23 deu zebra ! Que foi que houve? $ cat texto4 . txt Isto e um t.e s te do cat Na is um ;:este do ca t
Aparentemente tudo normal, n? Ento veja s: $ cat -vet texto4.txt I sto e um tes t e do ca t $ Nais um t es t e do cat At1Nais um teste do cat
Repare que a ltima linha apresentou-se dobrada, com um AM no meio. Como isso representa um CARRIAGE- RETURN, o texto era escrito duas ve-zes, uma em cima da outra, j que a funo deste caractere de controle voltar a escrita ao incio da linha sem saltar para a linha seguinte, e tudo parecia normal.
Ento vamos voltar ao arquivo correto (texto3 . t xtl e mostrar o uso da opo - n , mas ateno' Esta opo s vlida no Linux. $ cat - n texto3.txt
1 Is t o e um teste do cat 2 Mais um tes t e do cat
wc - Conta caracteres, palavras e/ou linhas Sintaxe: wc [ - l wc ] [a rquivo .. . J
Conta caracteres, palavras e/ou linhas dos dados da entrada padro e apresenta o resultado na sada padro. Parmetros:
a rquivo : arquivo de entrada cujas palavras, linhas ou caracteres se-ro contados e exibidos na sada padro. Se este parme-tro for omitido, wc l da entrada padro;
Material com direitos autorais
Mais Manipulao 37
As opes so:
~ Opes~~~~~--------------------~ -1 conta as linhas; - w conta as palavras;
Exemplos: $ wc - 1 texto.txt
26 texto .txt $ wc texto . txt
2346 282 26
Neste lt imo exemplo, como no foi especificado nenhum parmentro, o t-1c listou a quantidade de caracteres, palavras e linhas respectivamente.
Na lista Sheii-Script do Yahoo, um cara perguntou: Gente, estou fazendo um script e me deparei com um problema as-Sim: $ num terminal=l23456789 $ echo $n um_ terminal I wc -c 10
Mas como assim, se a cadeia s tem 9 caracteres e ele sempre conta um a mais. Por que isso acontece?
E outro colega da lista respondeu: Isso aconteceu, porque o wc contou o \n que o echo adiciona ao final da cadeia. Para o clculo certo use a opo - n do comando e cho, que no insere o \n.
Nisso, um outro entrou na discusso e disse: Ainda sobre o tema, veja um exemplo onde isso falha $ TESTE= $ echo $TESTE I wc - c 3 $ echo -n $TESTE WC -c 2 $ echo -n $TESTE WC - m 1
Matenal orn d1re1tos at,tora1s
38 Programao Shell Linux
Como foi visto, o - m conta o nmero de caracteres, j o - c conta o nmero de bytes. Claro que temos que remover o \ n tambm, como os outros colegas haviam falado.
Mais ainda: na verdade caracteres em UTF-8 podem usar de 1 a 4 bytes. Um para os primeiros 127 (ASC 11 ), 2 para latim (acentuados), 3 para carac-teres em outros idiomas (como japons, chins, hebraico, etc.) e 4 bytes para caracteres que ainda no foram definidos, mas que futuramente sero colocados na tabela Unicode.
Engraado que a forma $ WC - C
Mais Manipulao 39
Ordena os dados de entrada, escrevendo-os na sada. Parmetros: a rq
-c sep
- m
- n
- r
Exemplos:
arquivo de entrada a ordenar, que ser exibido na sada pa-dro. Se arq for omitido, os dados a classificar sero recebi-dos da entrada padro; considera para ordenao a partir do campo n, , posio m, , sendo a 1 a posio zero; considera para ordenao at o campo n~ , posio m1 , sendo a 1 a posio zero; utiliza sep como caractere para as posies especificadas em +nl e - n1; intercala dois arquivos j ordenados, escrevendo a intercala-o na sada padro; classificao numrica; inverte a ordem da classificao, de ascendente para descen-dente.
Se o separador no for especificado, o default ser branco e , porm para efeito de contagem, faro parte do cam-po, assim a posio O ser o prprio delimitador.
$ sort +0. 1 telefones Paul a Duar te Ney Garrafas Ney Gerhardt Ci ro Gr i ppi Claud i a Narci a enio Cardoso Luiz Carlos Ju l inna Duar te
(O ll ) 4 49-0219 (021 )988-3398 (024 ) 543 - 4 32 1 (02 1 ) 555-1234 (02 1 ) 555- 2 112 ( 023) 232 - 3 4 23 ( 021 ) 767- 2 124 ( 024 ) 622 - 2876
No exemplo anterior, o arquivo foi classificado pelo 2 2 caractere ( + O. 1 ) do primeiro campo (+ O. 1) . $ sort +1 .1 t e l e f ones Enio Car doso (023) 232-3423 Luiz Carlos ( 02 1 ) 7 67 - 2 12 4
Material com direitos autorais
40 Programao Shell Linux
Paul a Duar t e (011 ) 449-0219 Ju l i ana Duarte (02 4)622- 2376 Ney Garrafas (021 )988 - 3398 Ney Gerhardt (024 )543-4321 Ciro Grippi (02 1)555-1234 Cl audi a Marc i a (02 1)555 - 21 12
Eu quis fazer o mesmo que fiz no exemplo anterior para o 2!! campo, mas no deu certo. O que foi que houve? Como eu disse na dica, o separador (no caso o espao em branco entre os dois nomes) conta. Ento vamos fazer da forma correta: $ sort +1.2 tel e fones Cl audia Marcia Enio C
Mais Manipulao 41
Repare que o primeiro sort resultou em uma ordem correta (primeiro tudo que comea por um, seguido do que comea por dois e finalmente o que principia por cinco), mas numericamente o resultado era uma grande besteira. Usando a opo - n, obtivemos o que queramos.
head - Mostra incio dos dados Sintaxe: h e ad l - nmero] ( - c n ] [arquivo]
Mostra na sada padro uma quantidade de linhas de texto do incio dos dados que recebe como entrada. Parmetros: a rquivo
- nume r o
- c , --bytes=tamanho
arquivo de entrada do qual ser exibida uma determinada quantidade de linhas de texto de seu incio. Se arquivo for omitido, head l da entrada padro; mostra as nume ro primeiras linhas de arquivo. Se o parmetro numero no for especificado , head mostra as 1 O primeiras linhas de arquivo; mostra os primeiros tamanho caracteres (bytes ). O parmetro t amanho pode vir sucedido de um multiplicador: b ( 512 bytes ), k ( 1 Kilobyte ), m (1 Megabyte);
- n, - 1, -- lines =numero mostra as numer:o primeiras linhas. Idntica opo -numero .
tail - Mostra final dos dados Sintaxe: tai l 1+ 1- nmero] 1- cn.f l (arquivo]
Mostra na sada padro uma quantidade de linhas de texto do final dos dados que recebe como entrada.
Material com direitos autorais
42 Programao Shell Linux
Parmetros: arquivo
+ nume r o
- numero
-c, --bytes=t amanho
arquivo de entrada do qual ser exibida uma de-terminada quantidade de linhas de texto de seu fina l. Se arquivo for omitido, tail l da entrada padro; mostra arquivo a partir da linha numero at o fim. Se o parmetro numer o no for especificado, tai l mostra as 1 O ltimas linhas de arquivo; mostra as numero ltimas linhas de arquivo. Se o parmetro nume r o no for especificado, t a il mostra as 1 O ltimas linhas de arquivo; mostra os ltimos t amanho caracteres (bytes). O parmetro tamanho pode vir sucedido de um multip licador: b (512 bytes), k (1 Ki lobyte), m (1 Megabyte);
- n, - 1, -- lines=numero mostra as numero ltimas linhas. Idntica opo - nume r o .
- f Exibe na tela as linhas do arquivo medida que ele cresce.
Exemplos: $ tail - n 5 /etc/ srnb . conf p a th = / xp to public = n o wr i table = yes valid ssup= d 327 7 O psantos printabl e = no $ tail - cSO /etc/samba val i d s s up= d327760 psant os
pr int able = no
Material com direitos autorais
!Captulo 4 . .
~ Segurana de Acesso . .
.
! A segurana de acesso a arquivos e diretrios provi- da por meio de um esquema de posse de arquivos e de
permisses de acesso a eles. Cada arquivo possui um usurio dono do arquivo, bem como um grupo dono. Os conceitos de usurio e grupo sero vistos mais frente. As sees seguintes discutem os aspectos de proteo e acesso a arqu1vos. Uma vez que as posses de arquivos esto definidas, o prximo passo proteger os arquivos de acessos no de-sejados. A proteo em um arquivo no Unix/Linux mui-tas vezes referida como o modo do arquivo.
Posse de Arquivos ..J Comandos para alterar a posse de arquivos
Troca o dono do arquivo Troca o grupo do arquivo
Um arquivo no Unix/Linux possui um usurio dono e um grupo dono do arquivo. Apesar de usualmente o usurio dono de um arquivo pertencer ao grupo dono do mesmo arquivo, isso no obrigatrio. Um arquivo pode ter um usurio dono que no tenha nenhuma ligao com seu grupo dono.
43 Matenal com direitos aLIora1s
44 Programao Shell Linux
Assim , as permisses de acesso para grupo em um arquivo no se aplicam ao grupo ao qual pertence o usurio dono do arquivo, e sim aos usurios que pertencem ao grupo dono do arquivo. A flexibilidade nesse esquema se d devido ao fato de que um usurio pode per-tencer a vrios grupos. Dessa forma, pode-se atribuir direitos para um usurio acessar determinado conjunto de arquivos apenas acrescentando-o ao grupo
' dono do conjunto de arquivos. E claro que as restries de acesso dependero das permisses para grupo definidas para cada arquivo em questo. Operaes administrativas, como a adio de um usurio a um grupo, so-mente podem ser feitas pelo superusurio, ou por outros usurios que te-nham acesso ao arquivo de configurao de grupos. Operaes de mudan-a de dono de arquivo ou dono de grupo tambm s podem ser executadas pelo superusurio (comando c hmm) . Em algumas verses do Unix (System V), o usurio dono de um arquivo pode mudar seu usurio e grupo donos.
chown - Trocando dono do arquivo Sintaxe: chown [ - f ) [ - R) dono arquivo
Parmetros: a rquivo
dono
- f
- R
Exemplos:
arquivo a mudar de dono; nome do novo dono do arquivo. Este usurio deve pertencer ao mesmo grupo do atual dono; no reporta erros caso ocorram, como por exemplo o usurio no pertencer ao grupo; executa o comando recursivamente, apl icando-se a todos os subdiretrios.
O arquivo dica .s h me pertence, veja s: $ ls -1 dica . sh - rHxr-- r -- 1 jneves ssup 260 Mar 12 2002 dica . s h
Material com direitos autorais
Segurana de Acesso 45
ento para mudar a sua propriedade para o usurio s ilvina , eu fao: $ chown silvina dica.sh
~ l s -1 dica.sh - nr,u--.r-- 1 s i l v i n a ssup 260 Mar 12 2002 d i ca . s h
chgrp- Trocando o grupo do arquivo Sintaxe: chgrp [- f) [ -R) g r upo a~quivo
Um usurio pode, entretanto, mudar o grupo de um arquivo, desde que ele seja o usurio dono do arquivo e pertena ao novo grupo do arquivo. O comando que faz essa mudana o chg tp .
O comando chgrp tem formato idntico ao c hown, mas somente o supe-rusurio pode execut-lo na maioria dos sistemas. Exemplo:
~ chgrp prod d i ca.sh ~ l s - l dica . s h - _nvx r --r -- 1 sil vi na p rod 260 Mar 12 2002 d i ca . s h
Tipos de Acesso a Arquivos O Unix/Linux suporta trs tipos de acesso a arquivos e diretrios: leitura, escrita e execuo, designados, respectivamente, pelas letras r (read), w (write), x (execute).
O uso dos tipos de acesso bastante simples. Se a inteno deixar o arquivo somente disponvel para leitura, o acesso r resolve a questo. O acesso w permite ao usurio apagar ou modificar o arquivo. Entretan-to, para modificar o arquivo, a permisso de leitura tambm deve estar habilitada, caso contrrio o usurio no conseguir ler o arquivo para que possa ser modificado. Se o arquivo for um programa executvel ou um She/1 script, a permisso x deve estar ligada para que o usurio con-siga execut-lo. Se o arquivo for um Shelf script, a permisso de leitura deve tambm estar habilitada, pois o Shell precisa ler o arquivo para poder executar suas instrues. Para programas executveis basta a permisso de execuo.
Material com direitos autorais
46 Programao Shell Linux
Para ver as permisses de um arquivo ou diretrio, basta utilizar o co-mando 1s com a opo -1 (long listing), que mostra todos os detalhes dos arqu1vos.
Vale observar que para remover um arquivo em um determinado diret-rio, basta que se tenha permisso de escrita w naquele diretrio, mesmo que o referido arquivo no possua permisso de escrita.
Se acontecer de um determinado arquivo no possuir permisso de es-crita mas seu diretr io correspondente sim, o que o Unix faz perguntar ao usurio se deseja remover o arquivo, mesmo que este no tenha permis-so de escrita.
O exemplo a seguir supe o arquivo protegido sem perm isso de escri-ta, em seu diretrio pai arquivos com permisso de escrita para o usurio j neves (euzinho). $ ls - 1 total 80 drt-r"rwxr-x 2 j neves ssup 4096 Sep 17 12 : 17 apostilas - r-t...rxr -- r -- 1 jneves ssup 260 Mar 12 2002 d ica . sh - 1:\vxr--r - - l j neves ssup 1 9246 Mar 12 2002 di cas . sh - r\v-rw- r-- 1 Jneves ssup 66 Sep 26 16 : 20 ex: r o - r\-s- rw-r-- 1 jneves ssup 31 Sep 26 1 6 : 29 l egados
- r\
Segurana de Acesso 4 7
Quando usamos o comando l s - 1, obtemos a listagem dos arquivos com todos os seus detalhes. A primeira informao corresponde ao que chama-mos de modo do arquivo, composto de 1 O caracteres. Veja s: $ 1 s - 1 dica.sh rwxr-r 1 jneves ssup 260 Mar 12 2002 d i c a . sh
O primeiro caractere do modo do arquivo apenas indica seu tipo (se um arquivo regu lar, se um diretrio, se um link, .. . ). Os nove ca-racteres seguintes constituem trs grupos de trs caracteres. Em cada grupo, o primeiro caractere representa a permisso de leitura r , o segundo a de escrita vi e o terceiro a de execuo x . Se a permisso estiver desligada, um hfen - apresentado, seno o caractere corres-pondente aparece. $ 1 s -1 dica . sh rWX.t:--r 1 j neves ssup 260 Mar 12 2002 d ica . sh
chmod - Ajustando permisses de arquivos Sintaxe: chmod st.ring - de- acesso ! , . . . ] a r qu i vo .. .
Para ajustar permisses em arquivos e diretrios (que um arquivo que contm uma lista de arquivos), utilizamos o comando chmod.
Material com direitos autorais
48 Programao Shell Linux
Parmetros: s t ring- de- acesso as strings de acesso definem que permisses sero
dadas aos arquivos especificados no argumento ar-quivo do comando chmod .
a rquivo os nomes dos arquivos CUJaS permisses sero mudadas.
Exemplos: $ 1 s - 1 teste ---------- 1 jneves ssup 2 3 Apr 21 07 : 31 teste $ chrood u+w teste Dando permisso de escrita ao dono (u) $ 1s -1 teste __ ,, _______ 1 d327760
$ chmod a+w teste $ ls - 1 t es t e
ssup 23 Apr 2 1 07 : 3 1 tes t e Dando permisso de escrita a todos (a)
--t.r--w--;.r- 1 d 327760 ssup 23 .Z\p.r 2 1 0 7 : 3 1 tes t e $ chrood g +x, uo+r-w t es t e Grupo executa, dono e outros leem mas no gravam $ 1s -1 t es t e - r ---IJx r -- 1 d32 7760 ssup 23 Apr 21 07 : 31 te .ste $ chrood u =r wx t e ste Dono l, grava e executa $ 1s -1 teste - n.rx - wx r -- 1 ct327760 ssup 23 Apr 21 07 : 31 teste
Nesses exemplos, vimos algumas coisas interessantes:
Quando direitos so precedidos por ou sinal de mais ( + ) ou de menos
Segurana de Acesso 49
As permisses de acesso podem tambm ser especificadas numeri-camente com o comando c hmoct, em vez de usar uma string-de-acesso (modo simblico) como parmetro. Para calcular o modo absoluto de um arquivo, basta substituir os 9 caracteres correspondentes s permisses, por 9 bits (dgitos O ou 1 ), que agrupados trs a trs e convertidos para decimal compem um modo de acesso de trs dgitos. Exemplo de uma converso:
Dono Grupo Outros Strings de Acesso rwx r - x r --Con