Redirección de entrada y salida en ejemplos de Linux/Unix

⚡ Resumen inteligente

La redirección en Linux y Unix cambia dónde un comando lee la entrada o envía la salida, intercambioping el teclado y la pantalla para archivos o dispositivos que utilizan operadores como el signo mayor que, el signo menor que y el operador de añadir.

  • 🔀 Redireccionamiento: La redirección cambia la entrada o salida estándar de un comando, desde el teclado y la pantalla a un archivo o dispositivo.
  • ➡️ Salida: El operador > escribe la salida en un archivo, mientras que >> agrega contenido a un archivo existente sin borrarlo.
  • ⬅️ Entrada: El operador < introduce un archivo en un comando como entrada estándar en lugar del teclado.
  • 🔢 Descriptores de archivo: Cada archivo abierto recibe un número: 0 para stdin, 1 para stdout y 2 para stderr.
  • ⚠️ Redirección de error: El uso de 2> envía los mensajes de error a un archivo separado para que no saturen la salida normal.
  • 🔗 Flujos combinados: La sintaxis 2>&1 dirige el error estándar al mismo destino que la salida estándar.
  • 🤖 Ayuda de IA: Los asistentes de IA y GitHub Copilot pueden crear y explicar comandos de redirección y scripts de shell.

Redirección de entrada/salida en Linux y Unix con ejemplos

La redirección es una de las características más útiles del Linux y el intérprete de comandos de Unix, porque permite decidir dónde lee un comando su entrada y dónde envía su salida. Esta página explica la redirección de salida, entrada y errores con ejemplos prácticos.

¿Qué es la redirección?

La redirección es una característica de Linux que permite, al ejecutar un comando, cambiar los dispositivos de entrada y salida estándar. El flujo de trabajo básico de cualquier Comando de Linux Es que toma una entrada y da una salida.

  • El dispositivo de entrada estándar (stdin) es el teclado.
  • El dispositivo de salida estándar (stdout) es la pantalla.

Mediante la redirección, se pueden modificar la entrada y la salida estándar mencionadas anteriormente.

Redirección de salida

El gráfico que aparece a continuación marca el inicio de los ejemplos de redirección de salida.

Gráfico del encabezado de la sección de redirección de salida

El símbolo '>' se utiliza para la redirección de la salida (STDOUT).

Ejemplo:

ls -al > listings

Aquí, la salida del comando ls -al se redirige al archivo “listings” en lugar de mostrarse en la pantalla. La captura de pantalla a continuación muestra el resultado.

Terminal que muestra la lista de ls -al redirigida al archivo de listados.

Nota: Utilice el nombre de archivo correcto al redirigir la salida del comando a un archivo. Si ya existe un archivo con el mismo nombre, el comando redirigido borrará su contenido y lo sobrescribirá.

Si no desea sobrescribir un archivo, sino agregarle contenido, utilice el operador '>>'. La siguiente captura de pantalla muestra el contenido agregado con '>>'.

Terminal que muestra la salida del comando agregada a un archivo existente con el operador doble mayor que

Puedes redirigir la salida estándar no solo a archivos, sino también a dispositivos.

$ cat music.mp3 > /dev/audio

El comando cat lee el archivo de música.mp3 y envía la salida a /dev/audio, que es el dispositivo de audio. Si la configuración de sonido de su PC es correcta, este comando reproduce el archivo de música.mp3.

Redirección de entrada

El siguiente gráfico muestra la redirección de entrada.

Gráfico del encabezado de la sección de redirección de entrada

El símbolo '<' se utiliza para la redirección de entrada (STDIN).

Ejemplo: El programa de correo electrónico en Linux puede ayudarte a enviar correos electrónicos desde la terminal.

Puedes escribir el contenido del correo electrónico usando el teclado, el dispositivo de entrada estándar. Pero si quieres adjuntar un archivo al correo electrónico, puedes usar el operador de redirección de entrada en el siguiente formato.

mail -s "Subject" to-address < Filename

La captura de pantalla que aparece a continuación muestra el comando de correo electrónico leyendo un archivo como entrada.

Comando de correo electrónico que utiliza la redirección de entrada para adjuntar un archivo a un correo electrónico.

Esto adjunta el archivo al correo electrónico y lo envía al destinatario.

Los ejemplos anteriores eran sencillos. Ahora veamos algunas técnicas avanzadas de redirección que utilizan descriptores de archivo.

Archivo Descriptors (FD)

En Linux y Unix, todo es un archivo. Los archivos, directorios e incluso los dispositivos son archivos. Cada archivo tiene un número asociado llamado descriptor de archivo (FD).

El siguiente diagrama muestra los flujos estándar y sus descriptores de archivo.

Diagrama de las secuencias estándar de entrada, salida y error, y sus descriptores de archivo.

Tu pantalla también tiene un descriptor de archivo. Cuando se ejecuta un programa, la salida se envía al descriptor de archivo de la pantalla y la ves en tu monitor. Si la salida se enviara al descriptor de archivo de la impresora, se imprimiría.

Redirección de errores

Siempre que se ejecuta un programa o comando en la terminal, tres archivos permanecen abiertos: la entrada estándar, la salida estándar y el error estándar.

Estos archivos siempre están presentes cuando se ejecuta un programa. Como se explicó anteriormente, cada uno de estos archivos tiene asociado un descriptor de archivo.

Archivo Archivo Descriptor
Entrada estándar STDIN 0
Salida estándar STDOUT 1
Error estándar STDERR 2

Por defecto, el flujo de errores se muestra en la pantalla. La redirección de errores los dirige a un archivo distinto de la pantalla.

¿Por qué redirección de errores?

La redirección de errores es una de las características más populares de Unix y Linux.

Los usuarios frecuentes de Unix sabrán que muchos comandos generan una gran cantidad de errores. Por ejemplo, al buscar archivos, normalmente se obtiene (permission) Los errores denegados no suelen ser útiles para quien busca un archivo específico. Al ejecutar scripts de shell, a menudo no se desea que los mensajes de error saturen la salida normal del programa.

La solución consiste en redirigir los mensajes de error a un archivo.

Ejemplo

$ myprogram 2>errorsfile

La siguiente captura de pantalla muestra este comando en la terminal.

Terminal ejecutando mi programa con error estándar redirigido al archivo errorsfile.

Arriba, estamos ejecutando un programa llamado myprogram. El descriptor de archivo para el error estándar es 2. Usando “2>”, redirigimos la salida de error a un archivo llamado “errorsfile”. De esta manera, la salida del programa no se llena de errores.

Ejemplo

Aquí hay otro ejemplo que utiliza la instrucción find.

find . -name 'my*' 2>error.log

Usando el comando find, buscamos en el directorio actual “.” un archivo cuyo nombre comience con “my”, y enviamos cualquier error al archivo error.log.

Ejemplo 3: Veamos un ejemplo más complejo.

Los administradores de servidores suelen listar directorios y almacenar tanto la salida de error como la salida estándar en un archivo, que puede procesarse posteriormente. Aquí está el comando.

ls Documents ABC> dirlist 2>&1

El diagrama que aparece a continuación muestra cómo se capturan ambas secuencias en un solo archivo.

Diagrama de salida estándar y error estándar, ambos redirigidos al directorio de archivos.

Aquí:

  • 2>&1 significa que STDERR se redirige al mismo destino que STDOUT (que es la lista de directorios de archivos).
  • La salida de error se redirige a la salida estándar, que a su vez se redirige a la lista de directorios de archivos. Por lo tanto, ambos flujos se escriben en la lista de directorios de archivos.

El siguiente diagrama resume cómo se relacionan la entrada, la salida y la redirección de errores.

Diagrama que resume la redirección de entrada, salida y errores en Linux y Unix.

Preguntas Frecuentes

A tubo El operador (|) envía la salida de un comando directamente a otro como entrada. La redirección, en cambio, conecta un comando a un archivo o dispositivo, escribiendo su salida o leyendo su entrada. Las tuberías unen comandos; la redirección une un comando con un archivo.

El operador > escribe la salida de un comando en un archivo, reemplazando cualquier contenido existente. El operador >> agrega la salida al final del archivo, manteniendoping lo que ya está ahí. Usa >> siempre que quieras añadir algo a un archivo en lugar de sobrescribirlo.

/dev/null es un archivo especial que descarta todo lo que se escribe en él. Si se añade 2>/dev/null a un comando, los mensajes de error se redirigen a ese archivo, descartándolos silenciosamente para que solo aparezca la información normal en pantalla. Es una forma común de ocultar mensajes de error innecesarios.

El comando tee lee la entrada estándar y escribe los datos tanto en la pantalla como en uno o más archivos a la vez; por ejemplo, ls -al | tee listing.txt. Permite guardar la salida de un comando en un archivo mientras se visualiza en pantalla.

Un documento `here` utiliza el operador `<<` para introducir varias líneas de texto en línea en un comando, finalizando en una palabra clave que usted elija. Resulta útil en scripts de shell para pasar entradas de varias líneas, como el cuerpo de un correo electrónico, sin necesidad de un archivo aparte.

Utilice la sintaxis 2>&1 después de redirigir la salida, como en comando > archivo 2>&1, para que el error estándar siga a la salida estándar en el archivo. En Bash moderno, el comando abreviado &> archivo hace lo mismo. El orden importa: coloque 2>&1 después de la redirección de salida.

Los asistentes de IA pueden convertir una solicitud en lenguaje natural en el comando de redirección correcto, explicar la función de operadores como 2>&1 o &>, e identificar errores antes de su ejecución. Las herramientas de aprendizaje automático también analizan los archivos de registro y de error redirigidos para detectar anomalías que pasarían desapercibidas en una revisión manual.

Sí. Copiloto de GitHub Puede generar comandos y scripts que redirigen la entrada, la salida y los errores a partir de un breve comentario que describe el objetivo, y completarlos a medida que escribe. RevVea cualquier comando sugerido para sus archivos, especialmente aquellos que usan > que sobrescriben datos existentes.

Resumir este post con: