livro programação em shell 8 edição julio cézar nevez

551

Click here to load reader

Upload: everton-lopes

Post on 18-Jul-2015

1.048 views

Category:

Technology


64 download

TRANSCRIPT

  • 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