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

¿Qué es la redirección?

La redirección es una característica de Linux que permite cambiar los dispositivos de entrada/salida estándar al ejecutar un comando. 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.

Con la redirección, se puede cambiar la entrada/salida estándar anterior.

Haga clic en aquí si el video no es accesible

Redirección de salida

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

Redirección de salida

Ejemplo:

ls -al > listings

Aquí, la salida del comando ls -al se redirige a los "listados" de archivos en lugar de a su pantalla.

Redirección de salida

Nota: utilice el nombre de archivo correcto al redirigir la salida del comando a un archivo. Si existe un archivo con el mismo nombre, el comando redirigido eliminará el contenido de ese archivo y luego podrá sobrescribirlo”.

Si no desea que se sobrescriba un archivo pero desea agregar más contenido a un archivo existente, entonces debe usar '>>' operador.

Redirección de salida

¡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 music.mp3 y envía la salida a /dev/audio, que es el dispositivo de audio. Si las configuraciones de sonido en tu PC son correctas, este comando reproducirá el archivo music.mp3

Redirección de entrada

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

Redirección de entrada

Ejemplo: El programa de correo en Linux puede ayudarle a enviar correos electrónicos desde la Terminal.

Puede escribir el contenido del correo electrónico con el teclado estándar del dispositivo. Pero si desea adjuntar un archivo al correo electrónico, puede utilizar el operador de redirección de entrada en el siguiente formato.

Mail -s "Subject" to-address < Filename

Redirección de entrada

Esto adjuntaría el archivo al correo electrónico y se enviaría al destinatario.

Los ejemplos anteriores eran simples. Veamos algunas técnicas avanzadas de redireccionamiento que utilizan File Descriptors.

Archive Descriptors (FD)

En Linux/Unix, todo es un archivo. Los archivos normales, los directorios e incluso los dispositivos son archivos. Cada archivo tiene un número asociado llamado Archivo Descripto (FD).

Tu pantalla también tiene un Archivo Descripto. Cuando se ejecuta un programa, la salida se envía a Archivo Descripto de la pantalla, y verá la salida del programa en su monitor. Si la salida se envía a Archivo Descripto de la impresora, se habría impreso la salida del programa.

Redirección de errores

Siempre que se ejecuta un programa/comando en la terminal, siempre se abren 3 archivos, a saber, entrada estándar, salida estándar y error estándar..

Redirección de errores

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

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

De forma predeterminada, el flujo de errores se muestra en la pantalla. La redirección de errores consiste en enviar los errores 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 / Linux.

Los usuarios frecuentes de UNIX considerarán que muchos comandos generan una gran cantidad de errores.

  • Por ejemplo, al buscar archivos, normalmente aparecen errores de permiso denegado. Estos errores no suelen ayudar a la persona que busca un archivo en particular.
  • Al ejecutar scripts de shell, a menudo NO desea que los mensajes de error abarroten la salida normal del programa.

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

Ejemplo

$ myprogram 2>errorsfile

Por qué se produce un error en la redirección

Arriba estamos ejecutando un programa llamado myprogram.

El descriptor de archivo para el error estándar es 2.

Usando "2>" redirigimos la salida del error a un archivo llamado "errorfile"

Por lo tanto, la salida del programa no está abarrotada de errores.

Ejemplo

Aquí hay otro ejemplo que utiliza la declaración de búsqueda:

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

Usando el comando “find”, buscamos en el directorio actual “.” un archivo cuyo “nombre” comience con “my”

Por qué se produce un error en la redirección

Ejemplo 3: Veamos un ejemplo más complejo,

Los administradores de servidores suelen enumerar directorios y almacenar tanto los errores como la salida estándar en un archivo, que se puede procesar más tarde. Este es el comando.

ls Documents ABC> dirlist 2>&1

Aquí,

  • que escribe la salida de un archivo en la entrada de otro archivo. 2>&1 significa que STDERR redirige al destino de STDOUT (que es la lista de directorios de archivos)
  • Estamos redirigiendo la salida de error a la salida estándar, que a su vez se redirige a la lista de directorios de archivos. Por lo tanto, tanto la salida se escribe en el archivo dirlist

Por qué se produce un error en la redirección

Resum

  • Cada archivo en Linux tiene un archivo correspondiente Descripto asociado con él
  • El teclado es el dispositivo de entrada estándar, mientras que la pantalla es el dispositivo de salida estándar.
  • ">" es el operador de redirección de salida. ">>" agrega la salida a un archivo existente
  • “<” es el operador de redirección de entrada
  • "> &" Redirige la salida de un archivo a otro.
  • Puedes redirigir el error usando su Archivo correspondiente Descripto 2.