Quinta, 4 de dezembro de 2008 Textos via RSS Comentários via RSS Textos por e-mail Celular

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

Data 28/12/2007, 16:30
Autor Daniel Carmo Olops
Comentários 4 comentários

Comentários   Compartilhar

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!

Quem escreveu? Daniel Carmo Olops

Daniel Carmo Olops. Sou graduando em Ciência da Computação, e atualmente trabalho para a Faculdade de Jaguariúna na área de Informática, administrando servidores Linux e também as atividades do setor. Tenho uma relação de quase 10 anos com a informática, e tenho conhecimentos em diversas áreas e softwares, a maioria deles adquirido em fóruns ou através de empirismo (o chamado "se vira").

Textos relacionados
Comentários

Uau! Continue com esta série de artigos, estão sensacionais! :)

Mesmo que eu já saiba tudo isso, para quem está começando este material é deveras informativo. Apesar de ser somente o básico, já é um baita conhecimento agregado. Sem contar com a linguagem descomplicada e os exemplos elucidativos. :D

Parabéns! ;)

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

Muita coisa mesmo! :)

Nos meus projetos interativos em bash costumo usar muito comandos com > /dev/null 2>&1 e depois checar o valor do $?. Isso me dá um controle perfeito. :P

[]’s :D

[Responder]

[...] Obs.: para um melhor entendimento deste artigo, leia o anterior: Prompt do Linux: stdin, stdout, stderr e seus truques (parte I). [...]

Ótimo artigo!
Parabéns!

[Responder]

Você poderia pegar um outro exemplo do que apagar os arquivos do /home.

É só um toque!!

Abraço

[Responder]

Envie um comentário