Entrada estándar, salida estándar y error estándar

LinuxBeginner
Practicar Ahora

Introducción

Imagine cada comando de Linux como una máquina. Los datos entran por un lado y la máquina los procesa. Sin embargo, a diferencia de las máquinas sencillas, que tienen una sola salida, un comando de Linux cuenta con dos conductos separados para enviar la información al exterior:

  • Salida estándar (stdout): el «conducto de los resultados correctos». Cuando la máquina funciona correctamente, el resultado final sale por aquí.
  • Error estándar (stderr): el «conducto de los errores». Si algo sale mal, los mensajes de error salen por aquí.

De forma predeterminada, ambos conductos envían su contenido a la pantalla.

Este modelo de «flujos» es una de las ideas más importantes al trabajar con la shell. Los comandos de Linux no se limitan a «imprimir texto»; a menudo producen flujos de datos estructurados. Cuando comprenda cómo funcionan estos flujos, la redirección y las tuberías empezarán a parecer lógicas en lugar de mágicas.

En este laboratorio ejecutará comandos para observar estos dos flujos en acción.

Salida estándar (stdout)

Observe el «conducto de los resultados correctos» en acción.

Usaremos ls, que muestra una lista de archivos. Cuando ls funciona correctamente, envía los nombres de los archivos al flujo de salida estándar.

Ejecute este comando:

ls -l

Debería ver una lista de archivos.

¿Qué ocurrió?

Como el comando se ejecutó correctamente, el programa ls envió la lista al flujo stdout. El terminal supervisa este flujo y lo muestra.

La idea clave es que el terminal solo es el destino predeterminado. La salida estándar no está vinculada permanentemente a la pantalla; por eso pronto podrá guardarla o redirigirla a otro destino.

Error estándar (stderr)

Ahora observe el «conducto de los errores». El error estándar (stderr) está reservado para los errores.

Puede hacer que ls muestre un error si le pide que liste un directorio que no existe.

Ejecute este comando:

ls -l /nonexistent_directory

Verá un mensaje de error.

¿Qué ocurrió?

El comando falló. En lugar de enviarlo a stdout, envió el mensaje al flujo stderr.

De forma predeterminada, el terminal supervisa ambos flujos, por lo que muestra el error igual que cualquier texto normal.

Por eso los principiantes suelen asumir que los mensajes de éxito y los mensajes de error son «el mismo tipo de salida». En la pantalla pueden parecer iguales, pero internamente viajan por canales diferentes.

Salida combinada

Ahora observe qué ocurre cuando un comando produce ambos tipos de salida.

Pediremos a ls que haga dos cosas:

  1. Liste el directorio actual . (funciona).
  2. Liste /fake (falla).

Ejecute este comando:

ls -l . /fake

Observe atentamente. Debería ver dos partes:

  1. Un mensaje de error para /fake.
  2. Una lista correcta para ..

¿Qué ocurrió?

El error llegó por el flujo stderr. La lista de archivos llegó por el flujo stdout. El terminal recogió ambos flujos y mostró su contenido en la pantalla.

Esta diferencia es fundamental. En el próximo laboratorio aprenderá a capturar stdout mientras ignora stderr.

Esta separación no es solo una cuestión académica. En la automatización real, los scripts suelen necesitar guardar los resultados normales y, al mismo tiempo, mantener visibles los errores, o capturar los errores en registros sin mezclarlos con los datos útiles.

Resumen

En este laboratorio exploró los «flujos de datos» mediante la analogía de una máquina con dos conductos:

  • Salida estándar: el canal para los resultados normales.
  • Error estándar: el canal para los mensajes de error.

De forma predeterminada, Linux mezcla ambos flujos en la pantalla. A continuación, aprenderá a separarlos.