Artigos

Prompt do Linux: stdin, stdout, stderr e seus truques (parte I)

Hoje, na série “Prompt do Linux”, falaremos sobre o stdin, o stdout e o stderr, e o que dá pra fazer quando entendemos o seu conceito. Como dá pra falar bastante a respeito, vou dividir o artigo em algumas partes.

Conceito

Todos os programas que fazem interface com o usuário precisam receber por algum meio as informações passadas por ele. O meio mais antigo e comum do usuário passar informações a um programa é via teclado. Por isto mesmo, ele é considerado a entrada padrão, e é daí que vem o nome stdin (STandarD INput, ou Entrada Padrão).

No Linux, em alguns programas, você passa as informações previamente, via parâmetros, antes de executá-lo. Em outros, você pode digitar as informações durante a execução, caso especifique que a entrada deve vir do stdin.

Na outra mão, temos o stdout (STandarD OUTput, ou Saída Padrão), que representa o monitor, já que ele é o dispositivo de saída padrão na interface com o usuário. Nesta saída, temos acesso a todas as mensagens de informação que o sistema gera na tela para o usuário. Ela pode ser representada pelo número 1.

Por fim, temos o stderr (STandarD ERRor, ou Erro Padrão), que também é apresentado no monitor, mas é por ele que são enviadas as mensagens de erro geradas pelos aplicativos. Ela pode ser representada pelo número 2.

A maioria dos programas em modo texto trabalham com estes “carinhas”, ou seja, aceitam entrada pelo stdin, mostram mensagens informativas pelo stdout, e mostram erros via stderr.

Operadores

Você pode manipular as entradas e saídas com estes três operadores:

Pipe ( | ): Liga o stdout de um programa ao stdin de outro.
Write ( > ): Redireciona o stdout para outro local (um arquivo, por exemplo).
Append ( >> ): Anexa o stdout para outro local (um arquivo, por exemplo).

Repare que há uma pequena diferença entre o “>” e o “>>”: o primeiro apaga o conteúdo do destino, para então escrever seus dados; o segundo apenas acrescenta as informações às já existentes.

Legal, mas o que eu faço com isto?

Ora, dá pra fazer muita coisa!!! Se você entendeu o conceito, e se você conhecer alguns comandos úteis (assunto para o próximo artigo), dá para fazer muitas coisas interessantes usando estes operadores e conceitos. Alguns exemplos pra começar:

– Enviar a saída do comando ls para o arquivo “lista.txt”:
$ ls > lista.txt
– Semelhante ao comando acima, mas preservando o conteúdo original do arquivo “lista.txt”:
$ ls >> lista.txt
– Obter uma lista do tamanho (em MiB) ocupado por cada arquivo na pasta atual e subpastas, e classificar a relação do maior para o menor:
$ du -m | sort -nr

Em todos estes casos, trabalhamos apenas com stdout e stdin. Para trabalhar com a stderr, a coisa fica assim (repare no “2”):

– Remover todos os arquivos em /home, listando um por um, e fazer log dos erros no arquivo /tmp/erros.txt:
$ rm -rfv /home 2> /tmp/erros.txt
– Mesmo caso acima, mas as mensagens de informação irão para o arquivo /tmp/info.txt:
$ rm -rfv /home 1> /tmp/info.txt 2> /tmp/erros.txt
– Outra abordagem do mesmo problema, mas desta vez, tudo irá para o arquivo /tmp/info.txt:
$ rm -rfv /home 1> /tmp/info.txt 2>&1

Isto é só um pouquinho do que dá pra fazer. No(s) próximo(s) artigo(s), vou abordar alguns comandos muito úteis para trabalhar com textos no shell, incluindo localização de padrões, substituição de texto, filtragem de conteúdo, entre outros.

Até mais!

Tags: Linux, Software

Você também vai gostar

Leia também!