Entrada, saída e erro padrão

LinuxBeginner
Pratique Agora

Introdução

Imagine cada comando do Linux como uma máquina. Os dados entram por um lado, e a máquina os processa. Mas, ao contrário de máquinas simples, que têm apenas uma saída, um comando do Linux tem dois canais separados para enviar informações:

  • Saída padrão (stdout): o “canal de saída normal”. Quando a máquina funciona corretamente, o produto final sai por aqui.
  • Erro padrão (stderr): o “canal de erro”. Quando algo dá errado, as mensagens de erro saem por aqui.

Por padrão, os dois canais exibem seu conteúdo na tela.

Esse modelo de “fluxos” é uma das ideias mais importantes ao trabalhar com o shell. Os comandos do Linux não apenas “imprimem texto”; eles geralmente produzem fluxos estruturados de dados. Quando você entende esses fluxos, o redirecionamento e os pipelines deixam de parecer mágicos e passam a fazer sentido.

Neste laboratório, você executará comandos para observar esses dois fluxos diferentes em ação.

Saída padrão (stdout)

Vamos observar o “canal de saída normal” em ação.

Usaremos ls, que lista arquivos. Quando ls funciona corretamente, ele envia os nomes dos arquivos para a saída padrão.

Execute este comando:

ls -l

Você deverá ver uma lista de arquivos.

O que aconteceu?

Como o comando foi executado com sucesso, o programa ls enviou a lista para o fluxo stdout. Seu terminal monitora esse fluxo e o exibe.

O ponto principal é que o terminal é apenas o destino padrão. A saída padrão não está permanentemente vinculada à tela; por isso, em breve você poderá salvá-la ou redirecioná-la para outro destino.

Erro padrão (stderr)

Agora, vamos observar o “canal de erro”. O erro padrão (stderr) é reservado para erros.

Podemos fazer o ls emitir uma mensagem de erro solicitando a listagem de um diretório que não existe.

Execute:

ls -l /nonexistent_directory

Você verá uma mensagem de erro.

O que aconteceu?

O comando falhou. Em vez de enviar a mensagem para stdout, ele a enviou para o fluxo stderr.

Por padrão, seu terminal monitora os dois fluxos. Por isso, ele exibe o erro como se fosse um texto normal.

É por isso que iniciantes muitas vezes presumem que mensagens de sucesso e mensagens de erro são “o mesmo tipo de saída”. Elas podem parecer iguais na tela, mas internamente percorrem canais diferentes.

Saída combinada

Agora, vamos observar o que acontece quando um comando produz os dois tipos de saída.

Pediremos ao ls que faça duas coisas:

  1. Liste o diretório atual . (operação bem-sucedida).
  2. Liste /fake (operação malsucedida).

Execute:

ls -l . /fake

Observe com atenção. Você deverá ver duas partes:

  1. Uma mensagem de erro para /fake.
  2. Uma listagem bem-sucedida para ..

O que aconteceu?

O erro percorreu o fluxo stderr. A lista de arquivos percorreu o fluxo stdout. Seu terminal recebeu os dois fluxos e exibiu todo o conteúdo na tela.

Essa distinção é fundamental. No próximo laboratório, você aprenderá a capturar stdout enquanto ignora stderr.

Essa separação não é apenas teórica. Em automações reais, os scripts muitas vezes precisam salvar os resultados normais e, ao mesmo tempo, manter os erros visíveis, ou registrar os erros sem misturá-los aos dados úteis.

Resumo

Neste laboratório, você explorou os “fluxos de dados” usando a analogia de uma máquina com dois canais:

  • Saída padrão: o canal para resultados normais.
  • Erro padrão: o canal para mensagens de erro.

Por padrão, o Linux mistura os dois fluxos na tela. Em seguida, você aprenderá a separá-los.