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 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

Note: 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 mail El programa en Linux puede ayudarte a enviar correos electrónicos.mails de la Terminal.

Puede escribir el contenido del email usando el teclado estándar del dispositivo. Pero si desea adjuntar un archivo a email puede utilizar el operador de redirección de entrada en el siguientewing formato.

Mail -s "Subject" to-address < Filename

Redirección de entrada

Esto adjuntaría el archivo con la e.mail, y se enviará al destinatario.

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

Descriptores de archivos (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 Descriptor de archivo (FD).

Su 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 verá la salida del programa en su monitor. Si la salida se envía al descriptor de archivo de la impresora, la salida del programa se habrá impreso.

Redirección de errores

Cada vez que ejecuta un programa/comando en la terminal, siempre hay 3 archivos abiertos, viz., entrada estándar, salida estándar, 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 Descriptor de archivo
Entrada estándar STDIN 0
Salida estándar STDOUT 1
Error estándar STDERR 2

De forma predeterminada, la secuencia de errores se muestra en la pantalla. La redirección de errores consiste en enrutar 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 se obtienen errores de permiso denegado. Estos errores normalmente no ayudan 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 1

$ 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 2

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

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

Usando el comando "buscar", buscamos el "." directorio actual para un archivo con "nombre" que comienza con "mi"

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

Ejemplo 3: Veamos una más com.plex ejemplo,

Los administradores de servidores con frecuencia enumeran directorios y almacenan tanto los resultados de error como los estándar en un archivo, que se puede procesar más adelante. Aquí está 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

Resumen

  • Cada archivo en Linux tiene un descriptor de archivo correspondiente asociado
  • 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.
  • Puede redirigir el error utilizando su correspondiente Descriptor de Archivo 2.