fbpx

Um conceito importante no Linux é o redirecionamento. Como tudo no Linux é um arquivo, fez-se necessário que os comandos e processos tivessem a habilidade de tratar as entradas e saídas de dados com grande facilidade.

Antes de detalharmos a habilidade de redirecionamento do Linux precisamos definir o que são entradas padrão, saída padrão e saída de erro.

Entrada padrão stdin -> 0

A Entrada Padrão (stdin) é a entrada de um fluxo de texto. Como exemplos temos o teclado, o mouse, um pendrive, etc. Todos eles alimentam o computador com informações. Pode ser representado pelo número 0.

Saída padrão stdout -> 1

A Saída Padrão (stdout) é a saída de um fluxo de texto em condições normais. Como exemplos temos o monitor, a impressora, o disquete, um arquivo, etc. Todos eles recebem informações do computador. Pode ser representado pelo número 1.

Saída de erros stderr -> 2

A Saída de Erro (stderr) é a saída de um fluxo de texto em condições de erro ou insucesso em um determinado processamento. A saída de erro poderá ser direcionada para o monitor ou para um arquivo de LOG. Pode ser representado pelo número 2.

Podemos redirecionar a entrada padrão ou a saída padrão do fluxo de dados de um determinado processo para outro processo ou um arquivo com muita facilidade.

Redirecionar para arquivos com > ou >>

Para redirecionar um resultado de uma saída para outra saída utilizamos o sinal de maior (>) ou (>>).

O sinal > simplesmente regrava o arquivo de saída; Já o sinal >> adiciona a saída no final do arquivo, sem apagar o conteúdo.

Redirecionar a partir de arquivos com o < ou

e para direcionarmos uma entrada para outra entrada usamos o sinal de menor (<).

Condutores… conduzem algo de um processo a outro ( | ou pipe)

Ainda podemos redirecionar uma saída para uma entrada usando uma barra vertical especial, o sinal em inglês chamado “pipe” (|) ou duto.

$ ls > saida.txt

Neste exemplo listamos os arquivos em um diretório gravando o resultado no arquivo saída.txt.

O redirecionamento é utilizando principalmente por programas ou quando o resultado de um processamento não será observado diretamente pelo usuário, mas enviado para outro programa, para um arquivo ou para um dispositivo.

$ mail [email protected] < e-mail.txt

Aqui o programa mail está recebendo como argumento o endereço de e-mail e ao invés de utilizarmos o teclado como entrada padrão, estamos redirecionando o arquivo texto e-mail.txt.

$ ./folha_pagamento > arquivo1

Ou

$ ./folha_pagamento 1 > arquivo1

Estamos enviando toda a saída do programa folha_pagamento para o arquivo1

$ ./folha_pagamento 2 > arquivo_erro.log

Estamos enviando toda a saída de erros para o arquivo arquivo_ erro.log.

$ ./folha_pagamento > arquivo1 2>&1

Estamos enviando toda a saída padrão e de erros para o arquivo arquivo1.

$ ./folha_pagamento > arquivo_sucesso.log 2> arquivo_erro.log

Estamos enviando o resultado com a saída normal para o arquivo_ sucesso.log e a saída de erro para o arquivo_erro.log.

$ ./folha_pagamento | imprime_boletos 2> erros.log

Estamos enviando o resultado do processo folha_pagamento para o processo imprime_boletos e a saída de erro do imprime_boletos para o arquivo erro.log.

Símbolos Coringa

Veja que você também pode usar símbolos coringa para aglutinar arquivos pelo nome ou pedaços de nome.

Veja a tabela a seguir

TABELA – Símbolos Coringa (Wildcards)

Símbolo Descrição
* Significa “vale qualquer coisa” e pode substituir um ou mais caracteres de um nome. Por exemplo “Certifi*” pode significar “Certificado”, “Certifi­cação” ou qualquer outra combinação de nomes de arquivos que inicie com “Certifi”.
? Significa que pode substituir um caractere somente de um nome. Por exemplo: “?ertificado” pode  substituir “Certificado”, “certificado” ou qualquer outra combinação de nomes de arquivos que inicie com um caracter qualquer e termine com “certificado”.
{texto1, texto2…} Substitui a parte dentro das chaves pelos texto1, depois pelo texto2, assim por diante. Por exemplo: “parte_{a,b,c}” vai resultar em “parte_a”, “parte_b” e “parte_c”.

Quando estamos trabalhando com arquivos e diretórios no shell é muito comum precisarmos trabalhar com diversos arquivos de uma vez.

Para tornar este tipo de tarefa mais simples, o Linux oferece o recurso de coringa para os nomes dos arquivos e diretórios.

Assim como no baralho de cartas, os coringas são símbolos que podem significar muitas coisas. No Linux possibilitam que você os utilize como parte do nome dos arquivos e diretórios. Veja a tabela 6, de coringas:

Exemplos:

$ ls *.txt

Lista todos os arquivos com o sufixo .txt

$ cat doc??? >> documentos

Concatena todos os arquivos iniciados com “doc” que tenham 6 caracteres de tamanho no arquivo documentos.

Conheça agora um comando especial que permite que a saída de um comando possa ao mesmo tempo ser gravada em arquivo e enviada para outro comandao.

Comando tee

Uso:

$ tee [opções] arquivos

O comando tee recebe dados de uma entrada padrão, grava o que recebeu em um arquivo e ainda envia para sua saída padrão.

É utilizado para gravar a saída padrão de um comando em um arquivo e ainda enviar esta saída para outro comando.

A opção é:

  • -a: Adiciona no final do arquivo o que foi recebido ao invés de gravar por cima.

Exemplo:

$ folha_pagamento | tee folha.txt | imprime_boleto | tee boleto.txt | lpr 2> erros.log

O resultado do programa folha_pagamento é gravado pelo tee no arquivo folha.txt e enviado para o programa imprime_boleto.

Por sua vez o programa imprime_boleto redireciona sua saída para o segundo tee que grava o resultado no arquivo boleto.txt que também é enviado para o programa lpr que imprime os boletos.

Se houver erro na impressão, este erro é gravado no arquivo erros.log.

Há um outro comando especial que passa o que recebeu como entrada como argumentos para um determinado comando.

Comando xargs

Uso:

$ xargs comando [opções] arqumentoinicial

O xargs executa o comando e passa como argumento para esse comando o que foi recebido como entrada padrão.

O xargs vai executar inúmeras vezes comando de acordo com o número de linhas recebidas como entrada padrão.

As opções mais frequentes são:

  • -p: Pergunte ao usuário se o comando deve ser executado antes de fazê-lo
  • -r: Não execute o comando quando receber linhas vazias
  • -t: Mostre o comando na tela antes de executá-lo

Exemplos:

$ cat LEIAME.TXT | xargs echo

Neste exemplo cada linha do arquivo LEIAME.TXT é passada como argumento para o comando echo.

O comando echo imprime na saída padrão os argumentos recebidos.

$ cat lista-de-usuários.txt | xargs mkdir

Neste exemplo o comando xargs irá criar um diretório executando o mkdir com o nome da cada usuário contido no arquivo lista-de-usuários.txt.

$ ls -1 *.gz > lista-de-arquivo-zipado.txt

$ cat lista-de-arquivo-zipado.txt | guzip

Neste exemplo a primeira linha lista todos os arquivos com sufixo .gz e manda para o arquivo lista-de-arquivo-zipado.txt.

Na segunda linha o xargs irá executar o “gunzip” com cada arquivo da lista.

Assista o vídeo abaixo que não vai restar nenhuma dúvida:

Quer saber se uma certificação vale a pena ? Saiba porque os salários são bons, e porque as empresas estão procurando profissionais de Linux.

Você vai ententer que os benefícios superam de longe o sacrifício.

E se você já se decidiu, veja nosso Guia de Certificação.

E se quer saber onde fazer as provas, consulte a lista de cidade.

Se quiser saber o idioma das provas, veja esse post.

Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.

Gostou? Compartilhe 🙂

Redirecionamentos e Condutores no Linux
Classificado como:                            

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.