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.886 ]

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

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

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

Expressões regulares no Bash : parte I

Operadores de redirecionamento

Recebendo seu IP dinâmico via email

  
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