Redirecionamentos, Pipes e Fluxos

Redirecionamentos, Pipes e Fluxos utilizados no cotidiano de forma prática. Artigo realizado com o intuito de aproximar os usuários mais novatos com o terminal e agilizar seu entendimento e uso com o mesmo.

[ Hits: 6.961 ]

Por: Jefferson em 22/10/2018


Redirecionadores de Saída - STDIN, STDOUT e STDERR



Hoje está mais fácil o uso de Shell Script com a vasta informação de que conseguimos na internet. Porém, as vezes, realizamos algumas operações "redundantes", ou seja, acabamos utilizar vários comandos sendo que em apenas um poderia fazer o trabalho. Essa página abordará esse quesito..

Bom, vamos lá!

Todo programa no Linux recebe três "descritores", conforme verificado na imagem abaixo:
  • Temos a Entrada Padrão, código zero, STDIN (0);
  • Temos a Saída Padrão, código um, STDOUT (1);
  • Temos o Erro Padrão, código dois, STDERR (2);

Podemos dizer, de forma que todos possamos entender, que a entrada padrão (STDIN) de qualquer programa é o teclado, ou seja, é pelo teclado que você entra com as informações, comandos etc.

Já a Saída Padrão e a Saída de Erro, ambos as saídas são a tela, ou seja, o valor impresso em tela são as saídas um e dois. Em STDOUT (1) é a saída positiva do comando, todo comando gera um resultado, uma saída; isso chamados de STDOUT (1).No caso dos erros gerados pelo comando, chamamos de STDERR (2). Normalmente, ambos são visualizados em tela, não diferenciamos isso com o uso normal, porém, podem ser separados. No dia-a-dia não percebemos, mas o simples fato de utilizar cat arquivo > arquivo_novo já é um redirecionamento do STDOUT (1).

STDOUT

STDERR
Vamos a prática! Utilizaremos uma situação problema corriqueira. O gerente pediu para que gerasse uma lista de todos os arquivos em seu diretório (/home/gerente/).

Uma das formas para verificar os arquivos presentes seria utilizar o ls.

ls /home/gerente/

Porém, como seria feito a lista?

Neste caso, bastaria adicionar o operador "1>" ou ">" (normalmente é utilizado o "maior >" apenas, porém, no artigo demonstrarei com o 1, pois se trata do código da saída padrão, do STDOUT (1)). Sempre que adicionar o >, saiba que o 1 está presente, pois é a saída padrão, porém omitido. Então, o comando a ser utilizado seria:

ls /home/gerentes/ 1> Arquivos_Gerente

Isto fará com que toda a saída do comando ls seja redirecionada (não será impresso em tela) para o Arquivos_Gerente.

Na mesma situação podemos inserir o uso do operador 1>> ou >>, onde o mesmo também criará o arquivo (caso não exista) e adicionará o conteúdo. No caso de já existir o arquivo, utilizando esse operador, o mesmo adicionará a lista no final do arquivo. Já o operador 1> ou > criará o arquivo e no caso de já existir com o mesmo nome, substituirá o conteúdo pelo novo (por isso requer um pouco mais de atenção neste caso, pois caso não realizado uma cópia do arquivo, não poderá ser desfeito rs).

Explicado sobre o STDOUT (1), vamos ao STDERR (2).

No caso do STDERR (2) também são saídas de comandos representadas em tela, porém, são especificamente os erros dos comandos, onde o STDOUT não filtrará:

STDERR
Como a imagem acima, esses são os STDERR (2). Normalmente muito utilizado em Shell Scripts para fazer separação dos erros para debug e afins.

Para redirecionamento, é utilizado o código 2 (2>).

Neste exemplo, utilizaremos o ls em um arquivo inexistente, conforme imagem e texto abaixo:
ls Arquivos_VOL4 2> STDERR_LS

A saída do comando será redirecionada para o arquivo STDERR_LS e seu conteúdo apresentado como:

ls: não foi possível acessar 'Arquivos_VOL4': Arquivo ou diretório inexistente

Também podemos utilizar a saída padrão e a saída de erro em um mesmo comando de redirecionamento, para isso, basta apenas adicioná-los consecutivamente:
ls Arquivos_VOL{1,4} 1> STDOUT_LS 2> STDERR_LS

No caso de realizar o direcionamento em um mesmo arquivo, é possível?

Sim, pode ser efetuado a saída STDOUT e STDERR para o mesmo arquivo, para isso, basta apenas fazer o redirecionamento do erro para a saída padrão:
ls Arquivos_VOL{1,4} 1> STDOUT_LS 2>&1

Onde você está indicando que a STDERR (2) seja redirecionada ao mesmo lugar que STDOUT (1).

ou > criará o arquivo e no caso de já existir com o mesmo nome, substituirá o conteúdo pelo novo (por isso requer um pouco mais de atenção neste caso, pois caso não realizado uma cópia do arquivo, não poderá ser desfeito rs).

Explicado sobre o STDOUT (1), vamos ao STDERR (2).

No caso do STDERR (2) também são saídas de comandos representadas em tela, porém, são especificamente os erros dos comandos, onde o STDOUT não filtrará.

    Próxima página

Páginas do artigo
   1. Redirecionadores de Saída - STDIN, STDOUT e STDERR
   2. Redirecionadores de Entrada
   3. Pipes e Fluxos
Outros artigos deste autor

Instalação da Plataforma Hadoop

Leitura recomendada

Operadores de redirecionamento

Expressões regulares no Bash : parte I

Utilizando "expr" para "String Matching" através de expressões regulares em shell

Recebendo seu IP dinâmico via email

Definição automática de wallpaper em função do horário

  
Comentários
[1] Comentário enviado por eduardo em 23/10/2018 - 11:13h

Ótimo artigo Jefferson, parabéns!

[2] Comentário enviado por jeffersonmartins em 23/10/2018 - 18:41h


[1] Comentário enviado por eduardo em 23/10/2018 - 11:13h

Ótimo artigo Jefferson, parabéns!


Muito Obrigado Eduardo!!

[3] Comentário enviado por amaurybsouza em 25/10/2018 - 08:39h

Muito bom o seu artigo, estou revendo o que eu aprendi sobre redirecionamentos para a prova LPI-1.

[4] Comentário enviado por Levi linux em 02/11/2018 - 22:29h

Parabéns! Muito útil.

[5] Comentário enviado por jeffersonmartins em 02/11/2018 - 23:41h


[3] Comentário enviado por absouza em 25/10/2018 - 08:39h

Muito bom o seu artigo, estou revendo o que eu aprendi sobre redirecionamentos para a prova LPI-1.


Obrigado! O intuito que criei é justamente para aprendizado; estou em processo de estudos para a LPI também rs. Bora lá!

[6] Comentário enviado por jeffersonmartins em 02/11/2018 - 23:41h


[4] Comentário enviado por Levi linux em 02/11/2018 - 22:29h

Parabéns! Muito útil.


Muito obrigado Levi!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts