Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade do Grande Rio “Professor José de Souza Herdy” Sistemas Operacionais Abertos Conceitos de Redirecionamento e PIPE (canalização). Para facilitar o controle do computador foram desenvolvidas linguagens de comando. A maioria das linguagens de comando foi desenvolvida para que haja comandos fáceis para especificar ações comuns. A maioria dos sistemas operacionais fornece um interpretador de comandos para desempenhar essa função, e no LINUX/UNIX este interpretador é chamado de shell, que fornece uma abundância de características, que torna possível especificar comandos muito poderosos. Entretanto, estes comandos quando utilizados isoladamente têm uma função específica e rendem muito menos do que poderiam render ao administrador/usuário do sistema., mas quando utilizamos um conjunto de comandos de forma unificada, eles se tornam ferramentas poderosas capazes de realizadas todas as tarefas no sistema A figura abaixo mostra que, para cada processo submetido ao sistema, o shell abre automaticamente 3 arquivos. Esses arquivos serão, a partir de agora, referenciados como: Entrada padrão - é o teclado por default. Saída padrão - é o vídeo por default. Saída padrão para erros - é o vídeo por default. Esses padrões default, podem ser modificados usando o conceito de redirecionamento que será mostrado mais adiante. Símbolos utilizados para o redirecionamento O conceito de redirecionamento é usado para alterar o fluxo default (padrão) de entrada(0), saída(1) e saída de erros padrão(2) apresentados anteriormente. Desse modo, podemos ter três tipos de redirecionamento: < : redirecionamento da entrada padrão(0), é usado para indicar ao Shell, que a entrada de dados será de algum lugar, e não do teclado. Ex.: wall < arq.msg (o comando wall mostrará na tela, a mensagem armazenada no arquivo arq.msg) > e >> : Redirecionamento de saída padrão(1). Usados para enviar os dados de saída para algum lugar que não seja o padrão (vídeo). ls -l > saida.txt (Neste exemplo, criará o arquivo saída.txt caso este não exista com o conteúdo do comando ls –l e, caso o arquivo saída.txt exista, seu conteúdo será pertido) cat texto2 >> texto1 Neste exemplo, criará o arquivo texto1 caso este não exista com o contéudo do arquivo texto2 e, caso o arquivo texto1 exista, o seu conteúdo será preservado. 2> e 2>> : Redirecionamento da saída de erros padrão(2). Usada para redirecionar os erros que ocorram durante a execução de um comando. Exemplos: cat arq1 arq.txt 2> arqerro Neste exemplo, o comando cat está sendo utilizado para mostrar o contéudo dos arquivos “arq1 e arq.txt”. Suponha que o arquivo ‘arq.txt”, não exista. Será exibida a mensagem:“cat: arq.txt: No such file or directory”. Utilizando o recurso de redirecionamento da saída de erros, a mensagem “cat: arq.txt: No such file or directory” será enviada para o arquivo “arqerro”. cat arq1 arq.sh 2> /dev/null Neste exemplo, as mensagens de erro que venham o correr, serão desprezadas, já que “/dev/null” é um arquivo nulo. � PIPE (canalização) O conceito de canalização, permite enviar a saída de um comando, para que seja a entrada do próximo comando dando continuidade ao processamento. Os dados enviados são processados pelo próximo comando que mostrará o resultado do processamento. O símbolo que representa o PIPE é o caracter “|” (código ascii=124), que é um arquivo especial do tipo FIFO e pode ser usado várias vezes numa mesma linha de comando. Exemplos: ls -la | wc –l (mostrará quantos arquivos (incluindo os ocultos) têm no seu diretório corrente) who | grep sopii | wc -l (mostrará quantos usuários estão logados como “sopii”) cat cidades.txt | sort | tee cidades.ordenada | wc –l (mostrará o número de linha no arquivo cidades.txt e, criará o arquivo cidades.ordenada, que terá o conteúdo do arquivo cidades.txt com as linhas em ordem crescente) Obs.: Este tipo de conexão (tee), tem como finalidade enviar o resultado do programa para a saída padrão (tela) e para um arquivo ao mesmo tempo.O comando deve ser usado com o pipe "|". Diferença entre o "|" e o ">": A principal diferença entre o "|" e o ">", é que o Pipe envolve o processamento entre comandos, ou seja, a saída de um comando é utilizada como a entrada do próximo comando, e o ">" redireciona a saída de um comando para um arquivo/dispositivo. � Curingas e Metacaracteres. Curingas ou referência global, é um recurso usado para especificar um ou mais arquivos ou diretórios do sistema de uma só vez. Este recurso permite que você faça a filtragem do que será listado, copiado, apagado, etc. São usados 3 tipos de curingas no Linux: * - Faz referência a um nome completo/restante de um arquivo/diretório. ? - Faz referência a uma letra naquela posição. [padrão] - Faz referência a um padrão contido em um arquivo. Padrão pode ser: [a-z][0-9] - Faz referência a caracteres de a até z ou de 0 até 9. [a,z][0,9] - Faz referência aos caracteres a e z ou 0 e 9 naquela posição. [a-z,0,9] - Faz referência aos caracteres de a até z e 0 e 9 naquela posição. A procura de caracteres é "Case Sensitive". Assim se você deseja que sejam localizados todos os caracteres alfabéticos, você deve usar [a-zA-Z]. Caso a expressão seja seguida de um “^” ou “!”, faz referência a qualquer caracter exceto o da expressão. Por exemplo [^abc] faz referência a qualquer caracter exceto a, b e c. Por exemplo [!abc] faz referência a qualquer caracter exceto a, b e c. Outros exemplos. Suponha que existam 5 arquivos no diretório /usr/teste: teste1.txt, teste2.txt, teste3.txt, teste4.new, teste5.new. Caso deseje listar todos os arquivos do diretório /usr/teste você pode usar o curinga * para especificar todos os arquivos do diretório: cd /usr/teste e ls * ou ls /usr/teste/*. Não tem muito sentido usar o comando ls com * porque todos os arquivos serão listados se o “ls” for usado sem nenhum Curinga. Agora para listar todos os arquivos teste1.txt, teste2.txt, teste3.txt com exceção de teste4.new, teste5.new, podemos usar inicialmente 3 métodos: Usando o comando ls *.txt que pega todos os arquivos que começam com qualquer nome e terminam com .txt. Usando o comando ls teste?.txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caracter no lugar do curinga ? e terminem com .txt. Com o exemplo acima teste*.txt também faria a mesma coisa, mas se também tivéssemos um arquivo chamado teste10.txt, este também seria listado. Usando o comando ls teste[1-3].txt, que pega todos os arquivos que começam com o nome teste, tenham qualquer caracter entre o número 1-3 no lugar da 6ª letra e terminem com .txt. Neste caso se obtém uma filtragem mais exata, pois o curinga “?” especifica qualquer caracter naquela posição e [] especifica números, letras ou intervalos que serão usados. Listar todos os arquivos que começam com a letra c: ls c* Apagar os arquivos que começam com a letra c seguida de mais um caracter qualquer: rm c? Tenha muito cuidado com o comando abaixo: rm * Copiar todos os arquivos que começam com uf para o diretório /u/ricardo: cp uf* /u/ricardo Remover os arquivos co1, co2 e co3 deixando co4 e co5 intactos: rm co[123] Apagar os arquivos lot, cor, tom, boa: rm [lctb]o[trma] Listar os arquivos que começam com letras entre a e g: ls [a-g] Símbolo É curinga? Função * sim Compara qualquer série de caracteres ? sim Compara qualquer caractere simples [ sim Introduz um grupo de caracteres ] sim Termina um grupo de caracteres - não Indica o limite dos caracteres ! sim Negação > não Redireção de saída < não Redireção de entrada & não Processamento em background $ nãoMacros � Metacaracteres São caracteres capazes de, com poucos caracteres, representar funções específicas para uma dada situação, na utilização com comandos: CARACTER FUNÇÃO < Avisa ao Shell que a entrada padrão não será o teclado, mas sim o arquivo especificado. << Inclusão de dados. Indica ao Shell que o escopo de um comando começa na linha seguinte e termina quando encontra uma linha cujo conteúdo seja o label após o sinal <<. > Redireciona a saída de um comando para um arquivo especificado, criando-o caso não exista ou destruindo-o caso exista. Deve-se ter muito cuidado ao se redirecionar a saída de um comando. >> Redireciona a saída de um comando para um arquivo especificado, anexando-o ao seu fim. Caso este arquivo não exista, será criado. ; Processamento sequencial de comandos | Este é o pipe, utilizado para direcionar a saída de um comando para a entrada de outro. Muito utilizado em processamento paralelo de comandos em conexão. & processamento paralelo de comandos em retaguarda && conector lógico “ e “ | | conector lógico “ ou “ Exemplos: Inclusão de Dados - um comando pode receber dados quando este vier seguido pelo caracter "<<" mais uma cadeia delimitadora, que indica o final da inclusão de dados. $ ed provas << ! > g/reprovado/p > ! - a partir de "<<!" tudo que for digitado até "!" será armazenado e enviado ao comando como sua entrada; no exemplo, o comando ED pesquisa no arquivo provas, todas as ocorrências da cadeia reprovado. Sequência de Comandos Condicionais - comandos do sistema separados por operadores condicionais. && = executa o próximo se o comando anterior for verdadeiro || = executa o próximo se o comando anterior for falso Ex.: test -f arq.txt && imp arq (se o arquivo arq.txt existir então o arquivo será impresso) test -f arq.txt || echo "arquivo arq não existe" (se o arquivo arq.txt não existir, o comando echo será executado) �PAGE � �PAGE �80� Versão 2006-2
Compartilhar