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).
Ejemplo:
ls -al > listings
Aquí, la salida del comando ls -al se redirige a los "listados" de archivos en lugar de a su pantalla.
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.
¡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).
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
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..
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
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”
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
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.