34
ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADO FACULDADE PARAIBANA DE PROCESSAMENTO DE DADOS CURSO SUPERIOR DE TECNOLOGIA EM PROCESSAMENTO DE DADOS Introdução ao UNIX Júlio César Ramalho leite

Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

Embed Size (px)

Citation preview

Page 1: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASSOCIAÇÃO PARAIBANA DE ENSINO RENOVADOFACULDADE PARAIBANA DE PROCESSAMENTO DE DADOSCURSO SUPERIOR DE TECNOLOGIA EM PROCESSAMENTO DE DADOS

Introdução ao UNIX

Júlio César Ramalho leite

Page 2: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

1 - Sistemas Operacionais

Nos primeiros computadores,a programaçãoera realizadaem linguagemde máquinaetodososacessosaosrecursosdo sistemaeramfeitosatravésderotinasescritas,peloprópriousuário(programador),em linguagemde máquina.Destaforma, a utilizaçãodos computadoresera umatarefa bastantecomplexa,já que o usuário precisavaconhecerprofundamenteo hardwareparadesenvolver suas próprias rotinas de acesso aos recursos do sistema.

Para facilitar a utilização dos computadores e padronizar as rotinas de acesso aos recursos dosistema, foram desenvolvidos os sistemas operacionais SO’s.

Sistema Operacional é um programa que gerencia todos os recursosdisponíveisno computadore ofereceuma interface amigável,atravésda qualosusuáriospodemutilizar estesrecursossemter conhecimentodosdetalhesdehardware.

Inicialmente, os próprios fabricantesdesenvolviamo sistemaoperacionalpara as suas

máquinase o doavaaoscompradores.Com o passardo tempo,a indústriapercebeuquea áreadesistemasoperacionaispoderiaoriginarum grandemercadoe passoua nãomaisdoar,e sim, vendereste tipo de software.

Como surgimentodossistemasoperacionais,oscomputadoresficarammaisfáceisdeseremutilizadospor pessoaissemconhecimentosprofundosde computação.Sãoinúmerasasfunçõesdeum sistemaoperacional.Entretanto,podemosagrupá-lasem duasclassesquerepresentamde umaforma geral o papel desempenhado por um sistema operacional em um computador:

1) Servir de interface entre o usuário e o computador. Destaforma,o usuáriointerageapenascom o sistemaoperacional,queseencarregadeacionaro hardwareparaatenderàssolicitaçõesdosusuários.ComoosSO’spossuemumalinguagemmaisfácil do queade máquina, a utilização dos computadores tornou-se bem mais simples.

2) Otimizar a utilização dos recursos disponíveis no computador. O sistema

operacionaldeveutilizar técnicase mecanismosparatirar o maiorproveitodosrecursosdisponíveisno sistema.Um exemploclarodistoé permitir queo usuáriorealizemaisdeumatarefaaomesmotempo(ex. acessara Internet,imprimir um documentoe formatarum disco) ou que o computador possa ser utilizado por vários usuários ao mesmo tempo.

2 – Histórico do UNIX

No início dos anos 60, os sistemasoperacionaisda época utilizavam o conceito deprocessamentobatch, isto é, váriastarefasdeváriosusuárioseramagrupadase só entãosubmetidaspara processamento seqüencial. O grande desafio nesta área, era desenvolver um sistema operacionalque permitisse que vários usuários utilizassem o computadorao mesmo tempo de formacompartilhada,isto é, processamentode tempocompartilhado(time-sharing). Isto solucionariaosproblema de baixo desempenho e baixa utilização de recursos, existentes no processamento batch.

Introdução ao UNIX 2

Page 3: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

As empresasMIT, Bell Labs e a GeneralEletrics se uniram paradesenvolvero sistemaoperacionalMULTICS (MULT iplexed InformationandComputingServices).O MULTICS seriaum sistemaoperacionalmultiusuárioe de tempocompartilhado,quevenceriaos desafiosdaquelaépoca.Entretanto,talvez pela sua própria grandiosidade,o projeto do MULTICS não deu certo,embora muitos resultados tenham sido conseguidos.

Em 1969, Ken Thompson, pesquisadorda Bell Labs, resolveudesenvolverum sistemaoperacionalque seria uma simplificação do MULTICS, para uma máquinaPDP-7. ThompsonchamouestesistemaoperacionaldeUNICS (UNiplexedInformationandComputingServices)quedepois de UNIX .

A primeiraversãodo UNIX foi escritana linguagemassemblerdo PDP-7.Comos avançostecnológicos,novos computadoresforam sendofabricados.Assim, Thompsone Dennis Ritchieresolveramreescrevero sistemaoperacionalcom o assemblerdos computadoresmais modernos(DPD-11/20,PDP-11/45.etc). Nesta fase, surgiu a seguintequestão:o UNIX vai ter que serreescrito no assemblerdasmáquina que forem surgindo? Isto seriaum grandeproblema,já queo assemblereraumalinguagembastantedifícil e o UNIX eraum softwaredegrandecomplexidade.A soluçãodesteproblemaeradesenvolvero UNIX usandoumalinguagemdealto nível, maisfácilque o assembler.Como naquelaépocanão existia nenhumalinguagemcom tal poder, DennisRitchie criou a linguagem C. Em 1972, Thompsone Dennis Ritchie reescreveramo UNIXutilizandoa linguagemC. Apenasos aspectosestritamentedependentesdo hardwareforamescritosem assembler.

Destaforma, parao UNIX executarem uma nova máquina(arquitetura),serianecessárioapenasescrever,em assemblerdestamáquina, osaspectosdependentesdo hardwaree desenvolverum compiladorda linguagemC paraa novaarquitetura.Parafacilitar aindamaisa portabilidadedoUNIX, mais tarde foi desenvolvidoum compilador portável para a linguagemC (portable Ccompiler). Com isto, apenasuma pequenaparte do compilador, o núcleo, precisaria serdesenvolvida para nova arquitetura, já que o restante poderia ser gerada a partir do núcleo.

Apesarde ter criado e desenvolvidoo sistemaoperacionalUNIX, a Bell Labs não podiacomercializá-lonaépocadevidoàsleis anti-monopólioquevigoravamnosEUA. Assim,em1974,aBell Labsresolveuliberaro UNIX, inclusiveoscódigosfontes,paraasuniversidadelicenciarem.Agrande maioria das universidadesutilizava computadoresPDP-11, desta forma não haviadificuldadesdeusaro UNIX comosistemaoperacional.Comisto,o UNIX passoua sera plataformapadrãono meioacadêmico.Isto contribuiumuito parao desenvolvimentodo UNIX, umavezqueasuniversidadestinham possedo seucódigo fonte e passarama realizarváriaspesquisascientíficaspara o seu aperfeiçoamento.

Em meadosdadécadade80,o UNIX deixoudeserum sistemaoperacionalapenasdo meioacadêmicoe começou a ser utilizado em outras áreas. Várias empresase universidadesaperfeiçoaramo UNIX original e lançaramsuasprópriasversõesdo sistemaoperacional.Haviaumacerta tendência do UNIX perder suas característicasfundamentais,já que cada versão eradesenvolvidaindependentementedasoutras.Paraevitar que isto acontecesse,o IEEE (Institute ofElectrical and ElectronicsEngineers)reuniuváriaspessoasdo meio acadêmico,da indústriae dogovernoe criou o comitê POSIX ( PortableOperatingSystemUNIX) que desenvolveuo padrãoIEEE 1003. Estepadrãoespecificatodasascaracterísticasqueum sistemaoperacionaldevepossuirpara pertencer ao padrão UNIX.

Emborao UNIX tenhasetornadoum produtocomercial,aindapodemosencontraralgumasversões de domínio público, inclusive o código fonte. As mais conhecidassão: FreeBSD

Introdução ao UNIX 3

Page 4: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

desenvolvidopelauniversidadede Berkeley;e linux desenvolvidoinicialmentepor Linus Torvaldsna década de 90.

Atualmente,o termoUNIX é maisusadoparadesignara família de sistemasoperacionaisque seguemo padrãoUNIX (POSIX), e não referenciaro UNIX criado inicialmentepor KenThompson.No decorrerdo tempo,surgiramváriossistemasoperacionaisUNIX, cadaum com seupróprio nome suas próprias características. Alguns dos mais conhecidos são:

• BSD: Universidade de Berkeley• System V: AT&T• LINUX : Domínio público• SCO UNIX: Santa Cruz Operation• AIX : IBM• HP-UX: HP• Solaris: Sun Microsystems

3 – Características do UNIX

O sistemaoperacionalUNIX, por ter predominadoinicialmenteno ambienteacadêmico,ondepesquisasnaáreade SO sãorealizadasconstantemente,introduziugrandepartedosconceitosmais sofisticadospresentesatualmentena maioria dos sistemasoperacionais.Apresentamos,aseguir, algumas das principais características do UNIX.

⇒ Multiusuár io: Permite que vários usuários acessemo sistema concorrentementeecompartilhem os diversos recursos.

⇒ Multitarefa: Permitequeváriastarefas(processos)deváriosusuáriossejamexecutadasdeforma concorrente.

⇒ Time-shar ing: Compartilhao tempodo processadorentreos diversosusuáriosconectadosao sistema,de maneiraque cada usuário tenha a impressãode que o processadorestádedicado exclusivamente a ele.

⇒ Portável: Podeserfacilmentetransportadoparaváriasarquiteturas.Estacaracterísticaestádiretamenteligada ao fato do UNIX ser desenvolvidoem uma linguagemde alto nível(linguagem C).

⇒ Memória Vir tual: O UNIX utiliza área em disco como memória principal, paraproporcionara ilusão de uma memória RAM maior do que a real. Desta forma, maisprocessospodemseralocadosna memóriaprincipal e programasmuito grandespodemserexecutados.

⇒ Sistema de Arquivos Hierárquico: O espaçoem disco é organizadoem arquivos ediretórios. Adota-se uma estrutura de árvore de múltiplos níveis.

⇒ Sistema de Arquivos Montável: A áreaem discoé particionadaem sistemasde arquivos(file systems).Cada file systempode ser montado(anexado)à estruturahierárquicade

Introdução ao UNIX 4

Page 5: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

diretórios.Isto permitequecertosfile systemssejamdisponibilizadosapenasemmomentosapropriados.

4 – Arquitetura do UNIX

Ossistemasoperacionaissãosoftwaresde naturezanãoseqüencial,isto é, nãoseguemumalógicade execuçãodo tipo início, meio e fim. Isto aconteceporqueos sistemasoperacionaislidamcom eventosassíncronosque podemocorrera qualquerinstante,tais como: uma falta de página,umasolicitaçãode E/S, interrupções,etc. Estacaracterísticatornamaisdifícil a tarefade projetarum sistema operacional.

A arquiteturade um sistemaoperacionalé a forma como o seucódigo estáorganizadoecomoos seusdiversoscomponentesestãointer-relacionados.Existembasicamentetrêsarquiteturasdesistemasoperacionais,sãoelas:monolítica,emcamadase cliente/servidor.O UNIX possuiumaarquitetura em camadas, veja figura a seguir. Este tipo de arquitetura tem as vantagens:

♦ Separa as diversas funções do sistema operacional♦ Facilita atualizações♦ Oferece uma maior segurança para o sistema operacional

⇒ Kernel: é o núcleo do sistemaoperacional,sua principal função é gerenciardiretamenteosrecursosdo sistemae oferecerserviçosbásicosparaasosusuáriosdo sistemae suasaplicações,comotambéma outroscomponentesdo própriosistemaoperacional.Algumastarefasrealizadaspelo kernel são: gerenciamentode processos,gerenciamentode memória, tratamentodeinterrupções, gerenciamento de entrada/saída.

⇒ SHELL : tambémconhecidocomointerpretadordecomandos,o shellatuacomointerfaceentreo kernele os usuáriose suasaplicações.O shelldeveinterpretaros comandossolicitadospelosusuáriose transformá-losem solicitaçõesmais simples,de maneiratal que o kernel possaexecutá-lasmais rapidamente.No UNIX, o administrador(root) especificaum shell paracada

Introdução ao UNIX 5

Page 6: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

usuáriocadastradono sistema.Osshellsmaisconhecidossão:BorneShell (sh), C Shell (csh) eKorne Shell (ksh).

⇒ Comandos: constituema portadeentradado sistemaoperacional.Osusuáriosinteragemcomosistemaatravésda execuçãode comandos.Os utilitários, tais como: editores de texto ecompiladores, também fazem parte desta camada.

5 – Arquivos no UNIX

Parao UNIX, um arquivo é uma seqüênciade bytes ligadoslogicamente.Os nomesdosarquivospodemter até 256 caracteres,sempredevemoslembrarque o UNIX faz distinçãoentreletrasmaiúsculase minúsculas,assimosarquivosprova_so.doce Prova_so.docsãodistintosparaoUNIX. Existem basicamente três tipos de arquivos:

⇒ Ordinários : são arquivos que contêm dados na forma de textos, programas, figuras, vídeo, etc.

⇒ Diretór ios: sãoarquivosquecontêmreferênciasparaoutrosarquivosordináriosou diretórios.Estetipo dearquivoé o responsávelpelaimplementaçãodaestruturahierárquicado sistemadearquivosdo UNIX. Vejaquea hierarquiapossuiváriosníveis,isto é,cadadiretóriopodepossuirvários subdiretórios, e assim por diante.

⇒ Especiais: o conceito de arquivo é tão fundamentalpara o UNIX, que ele trata todos osdispositivosfísicos do sistemacomo sendoarquivos.Paracadadispositivoexisteum arquivoespecialassociadoa ele.O UNIX classificaosarquivosespeciaisdeacordocomosdispositivosa elesassociados,destaforma,podemosterosarquivosespeciaisdo tipo bloco,querepresentamdispositivosde bloco,e os arquivosespeciaisdo tipo caracter,querepresentamdispositivosdecaracteres.

Comovimos, o UNIX adotauma estruturahierárquicaparaseusistemade arquivos.A figuraabaixoapresentaumaárvoredediretóriosresumidade um sistemaUNIX, os nomesdosdiretóriospodem mudar dependendo do fabricante.

Diretório Descrição do conteúdo/ Diretório raiz (root) do sistema de arquivos

/bin /sbin arquivos executáveis freqüentemente usados (comandos)/etc arquivos referentes à administração do sistema/dev arquivos especiais para dispositivos de E/S/tmp arquivos temporários/lib bibliotecas do UNIX (C, assembler...)

/usr /u /home diretório HOME dos usuários do sistema

Introdução ao UNIX 6

Page 7: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

No UNIX, um determinadoarquivoou diretório podeserreferenciadoatravésdo caminho(path) absolutoou relativo. No casoda utilizaçãoda forma absoluta,devemosespecificartodo ocominho, a partir da raiz (/) até o arquivo ou diretório que queremosreferenciar.Já na formarelativa, podemosespecificaro caminhoa partir do diretório corrente.Parafacilitar ainda mais,podemos usar as seguintes abreviações:

. : para representar o diretório corrente;

.. : para representar o diretório pai do diretório corrente.

Veja a seguiralgunsexemplosde comoreferenciarum arquivoou diretório no UNIX, paraisto tome como base a árvore de diretórios apresentada acima.

Exemplo1: Parareferenciaro diretório redesqueestánaáreado usuáriojuliol (veja figuraacima), podemos usar:

Caminho absoluto: /usr/juliol/redes, esta forma, por ser absoluta, pode ser usadaindependente de qual seja o diretório corrente.

Caminhos relativo: a forma relativa depende do diretório corrente, assim temos:Se o diretório corrente for o / podemos usar: usr/juliol/redes ou ./usr/juliol/redesSe o diretório corrente for o /bin podemos usar: ../usr/juliol/redesSe o diretório corrente for o /usr/joaob podemos usar: ../juliol/redes

Exemplo2: Para referenciaro arquivo tcpip.cfg que estáno diretório redes na áreadousuário juliol (veja figura acima), podemos usar:

Caminho absoluto: /usr/juliol/redes/tcpip.cfg, estaforma,por serabsoluta,podeserusadaindependente de qual seja o diretório corrente.

Caminhos relativo: a forma relativa depende do diretório corrente, assim temos:Se o diretório corrente for o / podemos usar: usr/juliol/redes/tcpip.cfg Se o diretório corrente for o /usr podemos usar: ./juliol/redes/tcpip.cfg

Introdução ao UNIX 7

Page 8: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Se o diretório corrente for o /usr/juliol/SO podemos usar: ../redes/tcpip.cfg

6 – Comandos básicos do UNIX

O UNIX possuium númeromuito grandede comandos,vamosapresentarapenasaquelesmais utilizados no dia a dia dos usuários de ambientes UNIX.

man [comando]Manual on-line dos comandos do UNIX

clearLimpa a tela de vídeo

passwd [usuário]Altera a senha do usuário

ls [-alR] [arquvos|diretórios]Lista arquivose diretórios.Senenhumarquivoou diretório for especificado,o conteúdodo

diretório corrente será apresentado.Opções:

-a : mostra todos os arquivos, inclusive os ocultos (que começam com um ponto “.”)-l : Lista arquivos no formato longo, inclui tipo, permissões, posse e tamanho-R : Lista o conteúdo de todos os subdiretórios de forma recursiva

Uso de curingas no UNIX* : Substitui qualquer conjunto de caracteres? : Substitui apenas um caractere[] : Substitui uma lista de caracteres

Exemplos: ( o $ é o sinal de prompt)$lsFile.new file1 file5fig file2 finfilea file3 fitfile.new file4 fun

$ls fi?fig fin fit

$ls f??fig fin fit fun

$ls *.newFile.new file.new

$ls fi[gn]fig fin

$ls file[1-4]file1 file2 file3 file4

Introdução ao UNIX 8

Page 9: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

$ls f?[!t]fig fin fun$ls /usr/julioasper dataprev diversos$ls –a /usr/juliol /* lista todos os arquivos e diretórios. .profile .vtlrc dataprev

.. .sh_history asper diversos$ls –la /usr/julioldrwxr-xr-x 2 juliol admin 512 Aug 9 15:13 .drwxr-xr-x 37 juliol admin 1024 Sep 14 16:44 ..-rw-r--r-- 1 juliol admin 1025 Dec 3 1998 .profile-rw------- 1 juliol admin 1586 Sep 20 09:58 .sh_history-rw-r--r-- 1 juliol admin 100 Feb 3 1998 .vtlrc-rwxr-xr-x 1 juliol users 137 Jul 8 16:24 asper-rwxr-xr-x 1 juliol users 137 Jul 28 1998 dataprev-rwxr-xr-x 1 juliol users 137 Jul 28 1998 diversos

alias apelido=comandoCria um apelido para um determinado comandoExemplo:$alias cls=clear$cls /* este comando vai limpar a tela de vídeo$lsprovas aulas exerciciostrabalhos notas bibliografia$alias dir=ls /cria o apelido dir para o comando ls$dirprovas aulas exerciciostrabalhos notas bibliografia

file arquivosDetermina e exibe o tipo de arquivosExemplos:$file finfin: ASCII text$file dadosdados: Directory$file notasnotas: empty

more arquivosApresenta o conteúdo de um arquivo texto de forma paginada

cat [arquivos]Concatenaarquivos e apresentao resultadona saída padrão.Se nenhum arquivo for

especificado, a entrada padrão será gravada na saída padrão

Exemplos:$cat agendaJoao 222-1122Marcia 221-1009

Introdução ao UNIX 9

Page 10: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Maria 235-0011$cat > notas >Joao 9,0>Marcia 8,0>Claudia 8,7>Ana 9,2>Crtl-C$cat notasJoao 9,0Marcia 8,0Claudia 8,7Ana 9,2

pwdExibe o diretório corrente

cd [diretório]Muda o diretório corrente.Se não for especificadonenhumdiretório, o diretório corrente

passa a ser o diretório HOME do usuário.Exemplos:$pwd/home/root$cd /usr/bin$pwd/usr/bin$cd ../local$pwd/usr/local$cd$pwd/home/root

mkdir diretóriosCria diretóriosExemplos:$mkdir pascal$mkdir /home/julio/java$mkdir programas dados

cp [opções] origem destinoCopia arquivos e diretótriosOpções:

-b : Cria cópias de backups dos arquivos antes que os originais sejam sobrescritos-i : Exibe um prompt antes de sobrescrever arquivos de destino existentes-R : Copia diretórios recursivamente-f : Força a remoção dos de arquivos de destino existentes

Exemplos:$lsprograma aula1 aula2 aula3lista1 lista2 lista3 prova1prova2 prova3

Introdução ao UNIX 10

Page 11: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

$cp ../turma982/aula1 .$lsprograma aula1 aula1~ aula2aula3 lista1 lista2 lista3prova1 prova2 prova3$cp -i ../turma982/aula1 .cp: overwrite ‘./aula1’ ? y$

mv origem destinoMove e renomeia arquivos e diretórios

Exemplos:$mv agenad agenda /* renomeia o arquivo$mv agenda /tmp /* move o arquivo agenda para o diretório /tmp

rm [opções] [arquivos | diretórios]Exclui arquivos e diretóriosOpções:

-i : Pede confirmação da remoção ao usuário-f : Não pede confirmação antes da remoção-r, -R : Remove recursivamente o conteúdo de diretórios

Exemplos:$rm aula1$rm -i aula2rm: remove ‘aula2’ ? y$

rmdir diretórioRemove diretórios vaziosOBS: Para remover diretórios não vazios, utilize o comando rm –r

Exemplos:$lsturmas lixo$rmdir turmasrmdir: turmas: Directory not empty$rmdir lixo$lsturmas$rm –r turmas$ls$

wc [-clw] [arquivos]Conta o número de caracteres, linhas e palavras de documentos e exibe na telaOpções:

-c : Exibe o número de caracteres dos arquivos-l : Exibe o número de linhas dos arquivos-w : Exibe o número de palavras dos arquivos

Exemplos:$cat agenda

Introdução ao UNIX 11

Page 12: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Joao 222-1122Marcia 221-1009Maria 235-0011Ana 987-0087Lis 224-2074$wc –l agenda5 $wc –w10

head [-n] [arquivos]Apresentaas 10 primeiraslinhas dos arquivosespecificados.O usuáriopode especificar

quantas linhas ele deseja.Exemplos: (considere o arquivo agenda do exemplo anterior)$head -1 agendaJoao 222-1122$head -2 agendaJoao 222-1122Marcia 221-1009

tail [-n] [arquivos]Apresentaas 10 últimas linhas dos arquivos especificados.O usuário pode especificar

quantas linhas ele deseja.Exemplos:$tail -1 agenda Lis 224-2074$tail -2 agenda Ana 987-0087Lis 224-2074

7 – Redirecionamento de entrada e saída

Antesdecomeçarmosa apresentaros comandosdo UNIX, é necessárioentendermoscomofuncionaa entradae saídadoscomandose comopodemosalterá-las,ou seja,redirecioná-las.Cadacomando ou programa executado no UNIX possui três arquivos associados a ele:

�Entrada padrão ( 0 ): geralmente é o teclado

�Saída padrão ( 1 ): geralmente é o vídeo

�Saída padrão de erro ( 2 ): geralmente é o vídeo.

A forma mais comum de redirecionamento de E/S é através da utilização de pipe ( | ). O pipeserveparaencadearcomandos,de tal forma que a saídado primeiro é usadacomo a entradadosegundo,a saídado segundoé usadacomoentradado terceiro,e assimpor diante.Veja o exemploaseguir com os comandos ls e more.

�ls: lista o conteúdo do diretório corrente

�more: exibe o conteúdo de um arquivo uma página por vez.

Introdução ao UNIX 12

Page 13: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Comando � ls | more

Ação � Lista o conteúdo do diretório corrente exibindo uma página por vez.

Nesteexemplo,estamosusandodois redirecionamentos,o primeiro é a saídapadrãodocomandols, quedeixoudesero vídeoparasera entradado comandomore;e o segundoé a entradapadrãodo comandomore,quedeixoudesero arquivopassadocomoparâmetroparasera saídadocomando ls.

Pararedirecionara saídade um comandodevemosusar os símbolos> ou >>. Veja osexemplosa seguir com o comandosort, que serveparaordenaro conteúdodo arquivo passadocomo parâmetro.

Sintaxe: sort arquivo

Comando � sort medias_981

Ação � Ordena o arquivo medias_981 e exibe o resultado no vídeo (saída padrão)

Comando � sort medias_981 > medias_981_ord

Ação�Ordenao arquivomedias_981e colocao resultadono arquivomedias_981_ord.Caso

o arquivo medias_981_ordexista, ele seu conteúdoseráperdido. Nestecasohouve umredirecionamentoda saídapadrão,que deixou de ser o vídeo e passoua ser o arquivomedias_981_ord

Comando � sort medias_981 >> medias_geral

Ação�Ordenao arquivomedias_981e anexao resultadoaoarquivomedias_geral.Casoo

arquivo medias_geralnão exista, ele será criado. Neste caso também houve umredirecionamentoda saídapadrão,que deixou de ser o vídeo e passoua ser o arquivomedias_geral.

Pararedirecionara entradade um comandodevemosusaro símbolo< . Veja o exemploaseguir com o comandomail, que servepara enviar uma mensagemeletrônicapara os usuáriospassados como parâmetros.

Sintaxe: mail usuarios

Comando � mail juliol

Ação�

O sistemavai ler a entradapadrão,quenestecasoé o teclado,atéquesejadigitadauma seqüênciade finalização (Ctrl-C). E vai enviar uma mensagempara o usuário juliol,contendo as informações digitadas pelo usuário.

Comando � mail juliol < medias_981_ord

Ação�

O sistemavai enviaro conteúdodo arquivomedias_981_ordcomoumamensagemeletrônicapara o usuário juliol. Veja que nestecaso houve o redirecionamentoda entradapadrão,que deixou de ser o tecladoparaser o arquivo medias_981_ord.A marcade fim dearquivo serve como seqüência de finilização.

Em algumassituaçõesé necessárioredirecionara saídapadrãodeerrosparaquemensagensde erro não apareçamno vídeo, nestescasos,devemosusar: 2>. O exemploa seguir ilustra oredirecionamentoda saídapadrãode errosdo comandorm , que servepararemoverarquivosdodisco.

Comando � rm *.bkp

Introdução ao UNIX 13

Page 14: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Ação�

O sistemaremoverátodos os arquivos terminadoscom .bkp. Caso não existanenhum arquivo, será exibida no vídeo uma mensagem de erro.

Comando � rm *.bkp 2> /tmp/log_erro

Ação�

O sistemaremoverátodos os arquivos terminadoscom .bkp. Caso não existanenhumarquivo, uma mensagemde erro serágravadano arquivo /tmp/log_erro.Veja que asaída padrão de erros foi redirecionada,deixando de ser o vídeo para ser o arquivo/tmp/log_erro.

O UNIX possuio arquivo /dev/null que funcionacomo um buraconegro,isto é, todasasinformaçõesgravadasnelesãodestruídasautomaticamente.Destaforma, quandoas saídasde umcomandonãonosinteressam,podemosredirecioná-lasparao arquivo/dev/null,paraevitara criaçãode arquivos temporários ou a sua exibição no vídeo. Veja o exemplo a seguir:

$ls xyzls: xyz: No such file or directory$ls xyz 2>/dev/null

CUIDADO!!! Quando você digita um comando,antes que ele seja executadopelo kernel, o shell

(interpretadorde comandos)vai analizá-loe resolvertodososredirecionamentose asutilizaçõesdecuringas. Veja o exemplo a seguir:

$cat agendaJoao 222-1122Ana 221-1009Maria 235-0011$sort agendaAna 221-1009Joao 222-1122Maria 235-0011$sort agenda > agenda$cat agenda$

O comandosort agenda > agenda, que a princípio serviria para ordenaro conteúdodoarquivoagendae gravaro conteúdoordenadono próprioarquivoagenda,narealidadevai destruirasinformaçõesgravadasno arquivoagenda.Isto ocorrepor queantesdo kernelexecutaro comandodeordenação,o shell vai resolvero redirecionamentoda saída,ou seja,vai tornar o arquivo agendavazio. Assim, quando o kernel for executar a ordenação, o arquivo agenda estará vazio.

8 – Permissões de arquivos e diretórios

O UNIX implementa boa parte de sua segurança através do controle de permissões de acessoa arquivose diretórios.Paraver as permissõesde um determinadoarquivo ou diretório, devemosutilizar o comando ls com a opção –l (forma longa). Vejamos alguns exemplos:

$ls -l /home/juliototal 4-rw-rw-r-- 1 julio suport 85 Sep 18 13:36 agenda-rw-rw-r-- 1 julio suport 10 Sep 18 13:37 agenda2-rw-rw-r-- 1 julio suport 34 Sep 18 13:27 aula1

Introdução ao UNIX 14

Page 15: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

drwxrwxr-x 2 julio suport 1024 Sep 18 13:31 curso-rw-rw-r-- 1 julio suport 70 Sep 18 12:55 dadosdrwxrwxr-x 2 julio suport 1024 Sep 11 10:19 java-rw-rw-r-- 1 julio suport 30 Sep 18 12:54 readme

1 – Permissões de acesso 5 – Tamanho2 – Número de ligações 6 – Data e hora da última atualização3 – Dono 7 – Nome4 – Grupo ao qual pertence

No UNIX existem três tipos básicos de permissões:

�Leitura (r ): quandoaplicadaa um arquivo,permitea leitura do seuconteúdo(ex: morearquivo).Jáquandoaplicadaa um diretório, indica o poderde listar seuconteúdo,ou seja,seus arquivos e subdiretório (ex: ls diretório).

�Gravação (w): quandoaplicadaa um arquivo, permite a alteraçãodo seu conteúdo.Seaplicadaa um diretório, permitea criaçãoou remoçãode arquivose subdiretóriono seuinterior.

�Execução (x): quandoaplicadaa um arquivo,permitea suaexecução,casosejaum arquivoexecutável. Se aplicada a um diretório, permite o acesso a ele (ex: cd diretório).

Estas permissões são aplicadas a três classes de usuários do sistema:

u – Usuário dono do arquivo ou diretóriog – Usuários pertencentes ao grupo do arquivo ou diretórioo – Demais usuário do sistema

A permissãode acessoé formadapor 10 (dez) caracteres,veja figura abaixo.O tipo doarquivo podeser: (-) arquivo ordinário; (d) diretório; (c) arquivo especialreferentea umdispositivotipo caractere;(b) arquivo especialreferentea um dispositivotipo bloco; e (l)link ou atalhoparaoutroarquivo.Paracadaclassedeusuários(u, g e o) sãodestinadostrêscaracteres,queindicama permissãode leitura,gravaçãoe execução,respectivamente.Casoalguma permissão seja negada, na sua posição aparecerá um hífen (-).

Introdução ao UNIX 15

761 2 3 4 5

Page 16: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Outra maneirade representaras permissõesde um determinadoarquivo ou diretório é autilização do formato numérico.Nesteformato, as permissõessãorepresentadaspor trêsalgarismosoctais,ou seja,podemvariar de 0 a 7. Sendoo primeiro paraindicar os direitosdo dono,o segundodo grupoe o terceirodosoutrosusuários.Paracadatipo depermissãoéassociadoum valor (r = 4, w = 2, x = 1). O algarismoreferenteaosdireitosde umaclasse(dono,grupoououtros)é a somadasrespectivaspermissõesdaclasse.Porexemplo,seumaclasse possui as permissões r – x, então no formato numérico sua permissão seria 5 (r = 4 + x= 1).

Vejamos alguns exemplos de permissões:

1) – r w – r – – r – – Formato Numérico: 6 4 4 Tipo: arquivo ordinário Dono: Leitura e gravação Grupo: Leitura Outros: Leitura

2) – r – x – – x r – – Formato Numérico: 5 1 4 Tipo: arquivo ordinário Dono: Leitura e execução Grupo: Execução Outros: Leitura

3) d r w x – – – – – – Formato Numérico: 7 0 0 Tipo: Diretório Dono: Leitura, gravação e execução Grupo: Nenhuma permissão Outros: Nenhuma permissão

4) – – w – – – x r – – Formato Numérico: 2 1 4 Tipo: arquivo ordinário Dono: Gravação Grupo: Execução Outros: Leitura

O diagramaabaixomostracomo o UNIX checaas permissõesantesde um acessoa umarquivo ou diretório.

8.1 – Comandos para alteração das permissões de arquivos

O UNIX possui vários comandosque alteram as permissõesde arquivos e diretórios.Listamos abaixo os mais importantes e freqüentemente utilizados.

chmod [ugoa][+ - =][rwx] [arquivos]

Introdução ao UNIX 16

Page 17: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Alteraaspermissõesdosarquivosespecificados.Apenaso donodo arquivoe o superusuário(root) podem alterar suas permissões.

Exemplos: (logado como usuário juliol)

$ls – l permissoes-rw-r--r-- 1 juliol admin 100 Feb 3 1998 permissoes$chmod u-w permissoes /* retira (-) a permissão de escrita (w) do dono (u) $ls – l permissoes-r--r--r-- 1 juliol admin 100 Feb 3 1998 permissoes$chmod g+x permissoes /* inclui (+) a permissão de execução (x) ao grupo (g) $ls – l permissoes-r--r-xr-- 1 juliol admin 100 Feb 3 1998 permissoes$chmod u+wx,g-rx,o+x permissoes $ls – l permissoes-rwx---r-x 1 juliol admin 100 Feb 3 1998 permissoes$chmod g=o permissoes$ls – l permissoes-rwxr-xr-x 1 juliol admin 100 Feb 3 1998 permissoes$chmod 700 permissoes$ls – l permissoes-rwx------ 1 juliol admin 100 Feb 3 1998 permissoes$chmod 641 permissoes$ls – l permissoes-r-xr----x 1 juliol admin 100 Feb 3 1998 permissoes$chmod 644 permissoes$ls – l permissoes-rw-r--r-- 1 juliol admin 100 Feb 3 1998 permissoes

chgrp grupo arquivosAltera o grupo dos arquivosespecificados.Apenaso dono do arquivo e o superusuário

(root) podemrealizarestatarefa,sendoqueo donodo arquivosópodealterarparaumgrupoaoqualpertença.

Exemplos: (logado como usuário juliol)$ls – l permissoes-rw-r--r-- 1 juliol admin 100 Feb 3 1998 permissoes$chgrp suporte permissoeschgrp: you are not a member of group ‘suporte’: Operation not permitted$chgrp redes permissoes$ls – l permissoes-rw-r--r-- 1 juliol redes 100 Feb 3 1998 permissoes

chown novo-dono arquivosAltera o usuáriodono dos arquivosespecificados.Em alguns sistemasUNIX apenaso

superusuário(root) poderealizarestaoperação.Entretanto,existemsistemasUNIX quepermitem,além do root, o dono do arquivo.

Exemplos: (logado como usuário root) $ls – l permissoes-rw-r--r-- 1 juliol admin 100 Feb 3 1998 permissoes$chown joaob permissoes

Introdução ao UNIX 17

Page 18: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

$ls – l permissoes-rw-r--r-- 1 joaob redes 100 Feb 3 1998 permissoes

9 – Editando textos com o vi

O vi (Visual Editor) é um dosmaisconhecidose utilizadosprogramasparaediçãode textosASCII em ambientesUNIX. Emboranãopossuaumainterfaceamigável,o grandeatrativodo vi éque ele é nativo do UNIX, ou seja, em todo ambiente UNIX você o encontrará.

O vi possui três modos de operação:

�Comandos: toda sessãode edição começa nessemodo de operação.Nele, podemoscaminhar pelo texto e utilizar os comandos do vi para manipulação de textos.�Inserção: somente neste modo podemos alterar o texto.

�Última linha: algunscomandosde ediçãodevemserdigitadosna última linha da tela. Ocaractere: é usadoparaindicaraoeditorquevamosusarum comandodelinha.Semprequeo : é digitado, ele aparece no início da última linha da tela

A figura a seguirilustra os trêsmodosde operaçãodo vi, bemcomoaspossíveismudançasdeestados que podem ocorrer.

Comandos de movimentaçãoh, j , k, l : Move o cursor para: esquerda, baixo, cima, direita^ : Vai para o início da linha$ : Vai para o fim da linha b : Retorna uma palavraw : Avança uma palavraCtrl-f : Avança uma telaCtrl-b : Retorna uma telaCtrl-d : Avança 1/2 telaCtrl-u : Retorna 1/2 tela

Comandos de inserçãoi : Insere a partir da posição atual do cursorI : Insere no começo da linha

Introdução ao UNIX 18

Page 19: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

a : Insere depois da posição atual do cursorA : Insere no final da linhao : Insere uma linha abaixo da linha atualO : Insere uma linha acima da linha atualr : Substitui o caractere sob o cursos (apenas 1)R : Substitui vários caracteres a partir da posição do cursorS : Substitui a linha atualC : Substitui até o fim da linha atualx : Remove o caractere sob o cursordd : Remove a linha atualyy : Copia a linha atual para o buffer (área de transferência)p : Recupera o buffer após a linha atualu : Desfaz a última operação

Comandos da última linha para copiar, mover e remover linhasn : Posiciona o cursor no início da linha n $ : Posiciona o cursor no início da última linha do textox,y t z : Copia as linhas de x até y após da linha z x,y m z : Move as linhas de x até y após da linha z x,y d : Remove as linhas de x até y

Comandos da última linha para salvar alterações e sair do viw : Salva o arquivo sendo editadowq ou x : Salva o arquivo sendo editado e encerra a sessão do viq! : Encerra a sessão do vi sem salvar o arquivo sendo editadow arquivo : Salva o arquivo sendo editado com outro nome

Comandos da última linha para pesquisa e substituição de strings/texto : Pesquisa no arquivo pela string texton : Repete a última pesquisa realizadag/p1/s//p2/ : Substitui em cada linha a primeira ocorrência da string p1 pela string p2g/p1/s//p2/g : Substitui em todo o arquivo todas as ocorrências da string p1 pela string p2g/p1/s//p2/gc : Substitui em todo o arquivo todas as ocorrências da string p1 pela string p2,

pedindo confirmação antes de cada substituição

Existem várias formas de ativar o editor vi:

$vi /* Ativa o vi para edição de um arquivo em branco$vi arquivo /* Ativa o vi para edição do arquivo especificado$vi +n arquivo /* Ativa o vi para edição do arquivo especificado e posiciona na linha n $vi +/string arquivo /* Ativa o vi para ediçãodo arquivo especificadoe posicionana

primeira ocorrência da string

10 – Programação Shell – Shell Script

Introdução ao UNIX 19

Page 20: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Comovimos anteriormente,o SHELL , ou interpretadorde comandos,servede interfaceentreosusuáriose o sistemaoperacional.Destaforma,quandoqueremosqueo sistemaoperacionalfaça alguma tarefa, por exemplo, listar o conteúdode um diretório, devemossolicitar isto aoSHELL, no caso,atravésdo comandols. Outra funçãoimportantedo SHELL é o tratamentodoscomandos,ele deve resolver todos os redirecionamentosde E/S e todos os caracterescuringasusados, antes de passar os comandos para o sistema operacional executar.

Scriptssãoarquivostexto(ASCII) formadospor comandosdeum determinadoSHELL, suaprincipal função é a automação de tarefas. Programação Shell nada mais é do que o desenvolvimentodescriptsshell.Em ambientesUNIX, os Shellspossuemumalinguagemdeprogramaçãopoderosa,isto permite a criação de scripts avançadosque podem ser utilizados na automaçãode tarefascomplexas.

10.1 – O uso de Aspas, Apóstrofos, Barra invertida e Crase

Podemosindicar ao shell a forma de interpretaçãodos caracteresespeciaisem cadacomando.Isto é feito atravésdo uso das aspas,apóstrofos,barra invertida e crase.Vejamosautilidade de cada um destes sinais:

�Aspas duplas: quandocolocamosum caractereespecialentreaspas,indicamosparao shellignorá-lo,ou seja,tratá-locomoum caracterenormal.Isto é válido paratodosos caracteresespeciais, exceto o cifrão ($), uma crase (`) ou uma barra invertida (\).�Apóstrofos: o usodeapóstrofosfaz comqueo shell ignoreTODOSoscaracteresespeciais,sem nenhuma exceção. �Bar ra inver tida: o shell ignoraráo caractereque seguea barra invertida (apenasumcaractere).Se colocadano final da linha, o shell interpretaráa barrainvertida como umasolicitação de continuação do comando na próxima linha. �Crase: ascrasessãousadasparaavisarmosaoshellqueo queestáentreelasé um comandoe para darmos prioridade em sua execução.

Exemplos:

$ lsprogramas docs provas$ echo Isto eh um asterisco = * /* interpreta o asterisco e retorna os nomes dos arquivosIsto eh um asterisco = programas docsprovas$ echo “Isto eh um asterisco = *” /* não interpreta o asterisco como caractere especialIsto e um asterisco = *$ echo “O preco total eh: 100 $s” /* interpreta o $ e retorno o valor da variável $sO preco total eh: 100$ echo ‘O preco total eh: 100 $s’ /* não interpreta o $O preco total eh: 100 $s$ echo Isto eh um asterisco =\ * /* não interpreta o asteriscoIsto eh um asterisco = *$ echo O preco total eh: 100 \$s /* não interpreta o $, que segue a barra invertidaO preco total eh: 100 $s$ echo “para continuar o comando na proxima linha digite \”>Ctrl-C$ echo “para exibir uma barra invertida digite \\”para exibir uma barra invertida digite \

Introdução ao UNIX 20

Page 21: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

$ echo “Estou no diretorio: `pwd` ” /*Aspas não ignoram crases, então o pwd será executadoEstou no diretorio: /home/turma981$ echo “Meus arquivos sao: `ls` ” /*Aspas não ignoram crases, então o ls será executadoMeus arquivos sao: programas docs provas$ echo ‘Estou no diretorio: `pwd` ‘ /* Apóstrofos ignoram crases, então pwd não será executado

10.2 – Localizando cadeias de caracteres

O comandogrepé utilizado paralocalizarcadeiasde caracteresem umadeterminadaentrada,quepodeser:umalistadearquivos,asaídadeum comandorecebidaatravésdo usodepipes( | ), oua entradapadrão,se nenhumaoutra for especificada.As cadeiaspodemser especificadascom autilização de metacaracteres (curingas).

grep [-ncvil] cadeia [arquivos]Opções:

-n : Precede cada linha que possui a cadeia com o número da linha-c : Exibe apenas a quantidade de linhas que possuem a cadeia-v : Exibe todas as linhas, exceto aquelas que possuem a cadeia-i : Ignora diferença de letras maiúsculas e minúsculas-l : Exibe apenas os nomes dos arquivos que possuem a cadeia

Exemplos:

$ cat agenda /*Mostra o conteúdo do arquivo UNIXJoao Maria (081) 222-1122Marcia Ribeiro (083) 221-1009Maria Jose (083) 235-0011Ana Maria (083) 987-0087Lis Leite (011) 224-2074Jose Carlos (087) 234-9009maria Alves (083) 223-8051$ grep Maria agenda /* Pesquisa pela cadeia “Maria” dentro do arquivo agendaJoao Maria (081) 222-1122Maria Jose (083) 235-0011Ana Maria (083) 987-0087$ grep –n Maria agenda /* Exibe a numeração das linhas que possuem a cadeia “Maria”1 : Joao Maria (081) 222-11223 : Maria Jose (083) 235-00114 : Ana Maria (083) 987-0087$ grep -i Maria agenda /* Ignora a diferença entre maiúsculas e minúsculasJoao Maria (081) 222-1122Maria Jose (083) 235-0011Ana Maria (083) 987-0087maria alves (083) 223-8051$ grep -c Jose agenda /* Conta quantas linhas possuem a cadeia “Jose”

2$ grep –v Maria agenda /* Mostra apenas as linhas que não possuem a cadeia “Maria” Marcia Ribeiro (083) 221-1009Lis Leite (011) 224-2074Jose Carlos (087) 234-9009maria Alves (083) 223-8051

Introdução ao UNIX 21

Page 22: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

$ grep –l Joao * /* Mostra os arquivos do diretório corrente que possuem a cadeia “Joao”agenda : Joao Maria (081) 222-1122notas: Joao Batista 8,5agenda.old: Joao Silva (081) 222-9999

O comando grep permite a utilização de metacaracteres especiais para especificação da cadeia decaracteres a ser pesquisada. Alguns deles são:

. : Substitui apenas um caractere, é semelhante ao curinga ? do UNIX

.* : Substitui qualquer seqüência de caracteres, é semelhante ao curinga * do UNIX

[ ] : Substitui por qualquer caracteres especificada no intervalo

^ : Indica que a cadeia especificada deve estar posicionada no início da linha

Exemplos:

$ grep ‘L.s’ agenda /* Uso do metacaractere (.)Lis Leite (011) 224-2074$ grep ‘^Maria’ agenda /* Mostra as linhas que possuem a palavra “Maria” no inícioMaria Jose (083) 235-0011$ grep ‘Mar.*’ agenda /* Mostra as linhas que possuem palavras começadas por “Mar”Joao Maria (081) 222-1122Marcia Ribeiro (083) 221-1009Maria Jose (083) 235-0011Ana Maria (083) 987-0087$ grep ‘^[JL]’ agenda /* Mostra as linhas que começam com a letra J ou LJoao Maria (081) 222-1122Lis Leite (011) 224-2074Jose Carlos (087) 234-9009$ grep ‘^[^JM]’ agenda /* Mostra as linhas que não ()̂ começam com a letra J ou MAna Maria (083) 987-0087Lis Leite (011) 224-2074maria Alves (083) 223-8051$ ls –l | grep ‘^d’ /* Lista no formato longo apenas os subdiretórios do diretório correntedrwxrwxr-x 2 julio suport 1024 Sep 18 13:31 cursodrwxrwxr-x 2 julio suport 1024 Sep 11 10:19 javadrw-rw-r-- 9 julio suport 1024 Sep 18 12:54 provas

10.3 – Extraindo colunas

O comandocut é utilizadoparaextrair colunas(campos)deum arquivo,dasaídapadrãodeoutro comando ou da entrada padrão.

cut -c<Faixa-de-Caracteres> arquivo Onde <Faixa-de-Caracteres> pode ser:

x : Retorna o caractere da posição x de cada linha do arquivo

Introdução ao UNIX 22

Page 23: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

x-y : Retorna os caracteres das posições de x até y de cada linha do arquivox- : Retorna os caracteres a partir da posição x de cada linha do arquivo-x : Retorna os caracteres do início até a posição x de cada linha do arquivo

Exemplos:$ cat agenda /*Mostra o conteúdo do arquivo UNIXJoao Maria (081) 222-1122Maria Jose (083) 235-0011Ana Maria (083) 987-0087Lis Leite (011) 224-2074$ cut -c1 agenda /*Extrai a primeira letra de cada linha do arquivo agendaJMAL$ cut -c1-3 agenda /* Extrai as 3 primeiras letras de cada linha do arquivo agendaJoaMarAnaLis$ ls –l | grep ‘^d’ | cut –c2-10 /* Lista as permissões apenas dos subdiretórios do diretório

correnterwxrwxr-xrwxrwxr-xrw-rw-r--

As sintaxese osexemplosapresentadosacima,mostramcomoo comandocut funcionaparaextraçãodecamposcomposiçõespredefinidasdentrodo arquivo.Em muitassituaçõesestetipo deextraçãonãoresolveos problemas,pois há a necessidadede extrair determinadoscamposquenemsempreocorremnasmesmasposiçõesdo arquivo.Nestassituações,devemosusarasopções–f e –ddo comandocut. A opção–f indica quais os camposa seremextraídos,enquantoa opção–despecifica o caractere que servirá de delimitador dos campos.

cut -f<Faixa-de-Campos> -d “delimitador”

Cada linha do arquivo é tratadacomo uma seqüênciade campos,sendoestesseparadospelocaractere “delimitador” especificado na opção –d.Onde <Faixa-de-Campos> pode ser: x : Retorna o campo da posição x de cada linha do arquivo

x-y : Retorna os campos das posições de x até y de cada linha do arquivox- : Retorna os campos a partir da posição x de cada linha do arquivo-x : Retorna os campos do início até a posição x de cada linha do arquivo

Exemplos:$ cat /dados/funcionarios /*Lista o conteúdo do arquivo de funcionários325:Joao Batista:Administrativo:12/10/1974:224-4356:Joao Pessoa – Pb127:Maria de Fatima:Contabilidade:20/06/1969:221-2134:Patos – Pb450:Ana Maria Lins:Informatica:01/02/1970:214-5252:Salvador – Ba981:Francisco Almeida:Financeiro:10/01/1963:235-2087:Fortaleza – Ce$ cut –f1 –d”:” /dados/funcionarios /*Extrai o1º campo do arquivo, tendo como delimitador (:)

Introdução ao UNIX 23

Page 24: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

325127450981$ cut –f1-2 –d”:” /dados/funcionarios /*Lista os campos 1 e 2 325:Joao Batista127:Maria de Fatima450:Ana Maria Lins981:Francisco Almeida

10.4 – Criando e executando Scripts Shell

Como dito anteriormente,um script shell é um arquivo do tipo texto que contémumaseqüênciadecomandosde um determinadoShell.Parailustraresteconceito,vamoscriar um scriptbem simples, que exibe uma mensagem dizendo em qual diretório o usuário se encontra no momentoe em seguida lista o conteúdo deste diretório. Através de um editor de textos (vi ou pico) vamos criaro arquivo Lista.sh com o seguinte conteúdo:

1 #! /bin/ksh23 # Script: Lista.sh4 # 1 – Limpa a tela5 # 2 – Exibe o diretório atual6 # 3 – Lista o conteúdo do diretório atual78 echo O diretorio atual e: `pwd`9 echo Seu conteudo e:10 ls

Na primeira linha, o usuáriodeve especificarqual SHELL deveráexecutaros comandoscontidosno script.Senenhumfor especificado,o sistemautilizaráo SHELL padrãodo usuário.Aslinhas3-6 sãodecomentários(iniciadaspor #) e nãosãointerpretadaspeloSHELL. E, finalmente,naslinhas8-11estãooscomandospropriamenteditosqueexecutamastarefasdo script.Agoraqueo script está pronto vamos executá-lo.

$Lista.shksh: Lista.sh: cannot execute$

O que aconteceu? Como vimos na seçãode permissõesde arquivos, para que umdeterminado usuário possa executar um programa, ou script, ele precisar ter a permissão de execução(x) mesmo que ele seja o dono. Vejamos quais são as permissões do arquivo Lista.sh:

$ ls –l Lista.sh-rw-r--r-- 1 julio suport 85 Sep 18 13:36 Lista.sh

Veja queo dono do script Lista.shnãopossuia permissãox, logo nãopoderáexecutá-lo.Então devemos antes de executar o script incluir a permissão x.

$ chmod +x Lista.sh$ ls –l Lista.sh-rwxr-xr-x 1 julio suport 85 Sep 18 13:36 Lista.sh

Introdução ao UNIX 24

Page 25: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Vamos tentar executar o script Lista.sh novamente, já que temos permissão para isto.

$Lista.shksh: Lista.sh: cannot execute$

O queaconteceudestavez? Todasasvezesquesolicitamosparao SHELL executaralgumprogramaou script, ele vai procurarem todosos diretório especificadosna variável de ambientePATH paratentarencontraro programaou script.Comoo diretórioatual,ondeseencontrao scriptLista.sh, não está no PATH, o SHELL retornaráuma mensagemde erro. Veja o conteúdodavariável PATH:

$echo $PATH/bin: /usr/bin: /usr/local/bin$

Pararesolvero problematemosduasalternativas.A primeiraé indicar parao SHELL queoscript Lista.sh está no diretório atual:

$./Lista.shO diretorio atual e: /usr/julio/scriptsSeu conteudo e:Lista.sh Script1.sh Script2.sh Script3.sh Script4.shScript5.sh Script6.sh$

A outraformaderesolvero problemaé fazercomqueo SHELL procurepeloscripttambémno diretórioatual,ou seja,incluir navariáveldeambientePATH o diretórioatual,queparao UNIXé representado por um . (ponto). Veja os comandos a seguir:

$echo $PATH/bin: /usr/bin: /usr/local/bin$PATH=$PATH:.$echo $PATH/bin: /usr/bin: /usr/local/bin:.$Lista.shO diretorio atual e: /usr/julio/scriptsSeu conteudo e:Lista.sh Script1.sh Script2.sh Script3.sh Script4.shScript5.sh Script6.sh$

Agora que já sabemoscomo fazer um script e como executá-lo,vamos apresentaralinguagem de programação que pode ser utilizada para a construção de scripts mais avançados.

10.5 – Usando variáveis em Scripts Shell

Introdução ao UNIX 25

Page 26: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

O SHELL, comoqualqueroutralinguagemdeprogramação,trabalhacomvariáveis.Vejaosexemplos no script Var.sh.

$cat Var.sh#! /bin/ksh

## Declarando Variaveis#Nome=”Ana Maria”Matricula=981899899Contador=1Dir_Atual=`pwd` #podemos atribuir o resultado de um comando a uma variavelVar_Nula=

## Referenciando Variaveis#echo Valor da variavel Nome: $Nomeecho Matricula: $Matriculaecho Contador: $Contadorecho O diretorio atual e: $Dir_Atualecho Valor da variavel Var_Nula: $Var_Nula

$./Var.shValor da variavel Nome: Ana MariaMatricula: 981899899Contador: 1Valor da variavel Var_Nula:$

OBS: Nas declarações de variáveis não deve existir espaços antes ou depois do sinal de igual (=).

10.6 – Trabalhando com Parâmetros

Osparâmetrossãovalorespassadosparaosscriptsno momentodasolicitaçãodeexecução,e devem ser separadospor pelo menosum espaçoem branco. Por exemplo,no comando:cp/etc/hosts /tmp/hosts.old, estamosexecutandoo comandocp e passandodois parâmetrosparasuaexecução.O primeiroé o arquivoa sercopiado e o segundoé o arquivodedestino.Estapassagemde parâmetrosfunciona de maneiraanálogana execuçãode scripts shell, sendoque nestecaso,dentro dos scripts os parâmetros são referenciados pelas seguintes variáveis:

�$0 : armazena o nome do script que está sendo executado

�$1-$9 : armazenaos nove primeiros parâmetrospassadospara o script. Sendo que oprimeiro deve ser referenciadopor $1, o segundopor $2 e assimpor diante até o nonoparâmetro.

�$# : contém a quantidade de parâmetros passados para o script

�$* : contém o conjunto de todos os parâmetros passados para o script.

Introdução ao UNIX 26

Page 27: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Veja os exemplos a seguir:

$cat Par.sh#! /bin/ksh

echo O nome do script e: $0echo A quantidade de parametros passados foi: $#echo O conjunto de parametros passados foi: $*echo O primeiro parametro e: $1echo O segundo parametro e: $2echo O terceiro parametro e: $3

$./Par.sh /* executando o script sem passar nenhum parâmetroO nome do script e: Par.shA quantidade de parametros passados foi: 0O conjunto de parametros passados foi: O primeiro parametro e: O segundo parametro e: O terceiro parametro e:

$./Par.sh “Ana Maria” 10 Paraiba /* executandoo script passandotrêsparâmetros

O nome do script e: Par.shA quantidade de parametros passados foi: 3O conjunto de parametros passados foi: Ana Maria 10 ParaibaO primeiro parametro e: Ana MariaO segundo parametro e: 10O terceiro parametro e: Paraiba

Paraaplicar o uso de parâmetrosde uma maneiramais prática, vamosconstruir algunsscriptsquerealizamoperaçãosobreum arquivoqueservecomoumaagendatelefônica.A estruturado arquivo Agenda.dat é: Nome <TAB> Telefone.

O script List.sh serveparalistar o conteúdoda Agendaeletrônicade forma paginada.Seucódigo é:

$cat List.sh#! /bin/kshmore Agenda.dat

O script Inc.shserveparaincluir umapessoanaagenda.Ele recebedoisparâmetros:o nomee o telefone da pessoa a ser incluída. Seu código é:

$cat Inc.sh#! /bin/ksh

## Inclui o novo registro no arquivo Agenda.dat# Estamos usando o caractere <tab> como delimitador dos campos#

Introdução ao UNIX 27

Page 28: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

echo “$1 $2” >> Agenda.datsort –o Aganda.dat Aganda.dat

O script Con.shserveparapesquisarum telefonede uma determinadapessoa.Ele recebe

como parâmetro o nome da pessoa a ser pesquisada. Seu código é:

$cat Con.sh#! /bin/ksh

## Pesquisa pelo nome recebido como parametro dentro do arquivo Agenda.dat#grep “^$1” Agenda.dat

O script Exc.sh serveparaexcluir uma determinadapessoada agenda.Ele recebecomoparâmetro o nome da pessoa a ser removida. Seu código é:

$cat Exc.sh#! /bin/ksh

## Remove as pessoas do arquivo Agenda.dat#grep –v “^$1” Agenda.dat > /tmp/Agenda.tmpmv /tmp/Agenda.tmp Aganda.dat

Agora que os scripts foram descritos vamos utilizá-los para manipular a agenda eletrônica.

$List.sh /* Aganda está vazia

$Inc.sh “Julio Cesar” 222-9090$Inc.sh “Ana Maria” 226-9154$Inc.sh Joao 222-9090$List.shAna Maria 226-9154Joao 222-9090Julio Cesar 222-9090$Con.sh AnaAna Maria 226-9154$Exc.sh Julio$List.shAna Maria 226-9154Joao 222-9090$

10.7 – Lendo valores do teclado

Introdução ao UNIX 28

Page 29: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Comovimos,o usodeparâmetrospermiteaousuáriopassarinformaçõesaoscriptqueseráexecutado.Outraformadereceberinformaçõesdo usuárioé atravésdautilizaçãodo comandoread.Sua sintaxe é:

read [var1] [var2] [var3] ... [varn]

Outro comandoimportantequeserveparaauxiliar a entradade dadosé: tput cup lin col.Sua função é posicionar o cursor na linha e coluna especificadas.

Vamosfazerumanovaversãodo script Inc.sh,agorausandoos comandosreade tput cup.Veja o novo código:

$cat Inc2.sh#! /bin/ksh

clear # Limpa a telatput cup 10 15 # posiciona o cursor na linha 10 e na coluna 15echo –n “Entre com o nome: “read Nome tput cup 11 15 # posiciona o cursor na linha 11 e na coluna 15echo –n “Entre com o telefone: “read Fone echo “$Nome $Fone” >> Agenda.datsort –o Aganda.dat Aganda.dat

10.8 – Execução condicional

Comando IFif <comando> then bloco 1 else bloco 2fi

Se o <comando>foi executadocom sucesso,então os comandosdo bloco 1 serãoexecutados. Caso contrário, os comandos do bloco 2 serão executados.

Veja a nova versão do script Con.sh.

$cat Con2.sh#! /bin/ksh

## Pesquisa pelo nome recebido como parametro dentro do arquivo Agenda.dat#

if registro=`grep “^$1” Agenda.dat` > /dev/null 2> /dev/null then

Introdução ao UNIX 29

Page 30: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

echo $registro else echo $1 não esta cadastradofi

Neste caso,atribuímoso resultadodo comandogrep à variável registro. Caso o nomepassadocomo parâmetronão existano arquivo Agenda.dat,o comandogrep geraráum erro e obloco a ser executadoseráo do else.Se o nome existir, o script exibirá o conteúdoda variávelregistro, que contém o resultado da consulta.

O comando if no formato acima serve para testar se a execução de um determinado comandogerou algum erro. Podemostambémusar o comandotest, ou [ ], para testar outros tipos decondições. Veja algumas possibilidades:

Operações para Arquivos e Diretórios-r arquivo Testa se o usuário tem permissão de leitura no arquivo especificado-w arquivo Testa se o usuário tem permissão de escrita no arquivo especificado-x arquivo Testa se o usuário tem permissão de execução no arquivo especificado-f string Testa se a string é um nome de um arquivo-d string Testa se a string é um nome de um diretório-s arquivo Testa se o tamanho do arquivo especificado é maior que zero

Operações para Cadeias de caracteres-z string Testa se o tamanho da string é zero-n string Testa se o tamanho da string é diferente de zerostr1 = str2 Testa se str1 e str2 são idênticas string Testa se a string é não nula

Operações para Números inteiros x –eq y Testa se x é igual a y x –ne y Testa se x é diferente de y x –gt y Testa se x é maior que a y x –ge y Testa se x é maior ou igual a y x –lt y Testa se x é menor que a y x –le y Testa se x é menor ou igual a y

O script a seguir tem como objetivo receberdois arquivos distintos como parâmetroseverificar se o usuáriopossuias permissõesde execuçãoem cadaum deles.Casoos arquivosnãosejam passados ou não sejam distintos, uma mensagem de erro deve ser exibida para o usuário.

$cat TestaIf.sh#! /bin/ksh

# Testa se o script recebeu dois parametrosif [ $# -ne 2 ] then echo “Erro de sintaxe. Uso correto eh: $0 <arquivo1> <arquivo2>” exit 1fi

Introdução ao UNIX 30

Page 31: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

#Testa se o primeiro parametro e um arquivoif [ ! –f $1 ] then echo “Erro: Arquivo $1 nao encontrado” exit 2fi

#Testa se o segundo parametro e um arquivoif [ ! –f $2 ] then echo “Erro: Arquivo $2 nao encontrado” exit 2fi

#Testa se os arquivos recebidos sao distintosif [ “$1” = “$2” ] then echo “Erro: Os Arquivos informados sao iguais” exit 3fi

# Testa se o usuario possui permissao de execucao no primeiro arquivoif [ -x $1 ] then echo “O usuario pode executar o arquivo $1” exit 0fi

# Testa se o usuario possui permissao de execucao no segundo arquivoif [ -x $2 ] then echo “O usuario pode executar o arquivo $2” exit 0fi

Como em qualqueroutra linguagemde programação,na programaçãoSHELL podemosespecificar condições compostas, através dos operadores lógicos: -a (e) e -o (ou). Veja o exemplos.

$cat AndOr.sh#! /bin/ksh

# Testa se o numero de parametros recebidos e igual a 2 ou 4 if [ $# -eq 2 –o $# -eq 4 ] then echo “O script recebeu 2 ou 4 parametros” exit 0fi

# Testa se o numero de parametros recebidos esta entre 5 e 9, inclusive

Introdução ao UNIX 31

Page 32: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

if [ $# -ge 5 –a $# -le 9 ] then echo “O script recebeu entre 5 e 9 parametros” exit 0fi

Comando CASE

case var in padrão1 )

bloco1

;; padrão2 )

bloco2

;;

. . . padrãon )

blocon

;;esac

O comandocasedeveserutilizado quandoqueremosexecutarum dentreváriosblocosdecomandosdependendodo valor ou padrãoassumidopor umadeterminadavariável.Seuusoevitaautilização de comandosifs sucessivos,isto agiliza a execuçãodo script além de deixá-lo maislegível.

O script a seguir recebe um caracter como parâmetro e verifica se ele é uma letra maiúscula,minúscula, um algarismo ou outro caracter qualquer.

$cat TestaChar.sh#! /bin/ksh

# Testa se o script recebeu apenas um parametrosif [ $# -ne 1 ] then echo “Erro de sintaxe. Uso correto eh: $0 <caracter>” exit 1fi

#Testa se o parametro recebido e um caractercase $1 in ? ) ;; #se tiver so um caracter não faz nada * ) echo “Erro: $1 não e um caracter” exit 2 ;;esac

# Testa a classe do caracter recebido

Introdução ao UNIX 32

Page 33: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

case $1 in [a-z] ) echo “$1 e uma letra minuscula” ;; [A-Z] ) echo “$1 e uma letra maiuscula” ;; [0-9] ) echo “$1 e um algarismo decimal” ;; * ) echo “$1 e uma caracter especial” ;;esac

O script a seguir exibe um menu e lê uma opçãodigitadapelo usuário.Dependendodaopção ele executará outro script apropriado.

$cat TestaChar.sh#! /bin/ksh

clearecho “ OPCAO DESCRICAO”echo “ ====== ======================”echo “ 1 Incluir Registro”echo “ 2 Consultar Registro”echo “ 3 Excluir Registro”echo “ 0 ou q Sair”echo “Escolha uma opcao: “read opcao

case $opcao in 1 ) Inc.sh ;; 2 ) Con.sh ;; 3 ) Exc.sh ;;

0 | q | Q ) exit 0 #Testa se e 0 ou q ou Q ;; * ) echo “Opcao invalida” ;;esac

OBS: 1) Todososblocosdecomandos,referentesa cadaum dospadrões,devemserseguidosde

;; que representa o fim do bloco.2) padrão* devesersempreo último a sertestado,visto quecombinacomqualquervalor

da variável especificada no comando case.

Introdução ao UNIX 33

Page 34: Introdução ao UNIX - jairo.pro.br · associaÇÃo paraibana de ensino renovado faculdade paraibana de processamento de dados curso superior de tecnologia em processamento de dados

ASPER Sistemas Operacionais

Introdução ao UNIX 34