Conozca los conceptos básicos de cómo funciona la redirección de I / O (entrada / salida) de Linux


Uno de los temas más importantes e interesantes en la administración de Linux es la redirección de E/S. Esta función de la línea de comandos le permite redirigir la entrada y/o salida de comandos desde y/o archivos, o unir varios comandos juntos utilizando tuberías para formar lo que se conoce como " canal de comandos " .

Todos los comandos que ejecutamos producen básicamente dos tipos de salida:

  1. the command result – data the program is designed to produce, and
  2. the program status and error messages that informs a user of the program execution details.

En Linux y otros sistemas similares a Unix, hay tres archivos predeterminados nombrados a continuación que también son identificados por el shell utilizando números de descriptores de archivos:

  1. stdin or 0 – it’s connected to the keyboard, most programs read input from this file.
  2. stdout or 1 – it’s attached to the screen, and all programs send their results to this file and
  3. stderr or 2 – programs send status/error messages to this file which is also attached to the screen.

Por lo tanto, la redirección de E/S le permite alterar la fuente de entrada de un comando, así como a dónde se envían sus mensajes de salida y de error. Y esto es posible gracias a los operadores de redireccionamiento “& lt;” y “& gt;” .

Cómo redirigir la salida estándar a un archivo en Linux

Puede redirigir la salida estándar como en el siguiente ejemplo, aquí, queremos almacenar la salida del comando superior para una inspección posterior:

$ top -bn 5 >top.log

Donde las banderas:

  1. -b – enables top to run in batch mode, so that you can redirect its output to a file or another command.
  2. -n – specifies the number of iterations before the command terminates.

Puede ver el contenido del archivo top.log usando el comando cat de la siguiente manera:

$ cat top.log

Para agregar la salida de un comando, use el operador “& gt; & gt;” .

Por ejemplo, para agregar la salida del comando top en el archivo top.log , especialmente dentro de un script (o en la línea de comando), ingrese la siguiente línea:

$ top -bn 5 >>top.log

rojo

$ top -bn 5 1>top.log

Cómo redirigir el error estándar a un archivo en Linux

Para redirigir el error estándar de un comando, debe especificar explícitamente el número del descriptor de archivo, 2 para que el shell entienda lo que está intentando hacer.

Por ejemplo, el comando ls a continuación producirá un error cuando lo ejecute un usuario normal del sistema sin privilegios de root:

$ ls -l /root/

Puede redireccionar el error estándar a un archivo de la siguiente manera:

$ ls -l /root/ 2>ls-error.log
$ cat ls-error.log 

Para adjuntar el error estándar, use el siguiente comando:

$ ls -l /root/ 2>>ls-error.log

Cómo redirigir la salida / error estándar a un archivo

También es posible capturar toda la salida de un comando (tanto la salida estándar como el error estándar) en un solo archivo. Esto se puede hacer de dos formas posibles especificando los números de descriptores de archivos:

1. El primero es un método relativamente antiguo que funciona de la siguiente manera:

$ ls -l /root/ >ls-error.log 2>&1

El comando anterior significa que el shell enviará primero la salida del comando ls al archivo ls-error.log (utilizando & gt; ls-error.log ), y luego escribe todos los mensajes de error en el descriptor de archivo 2 (salida estándar) que se ha redirigido al archivo ls-error.log (usando 2 & gt; & amp; 1 ). Lo que implica que el error estándar también se envía al mismo archivo que la salida estándar.

2. El segundo método y directo es:

$ ls -l /root/ &>ls-error.log

También puede agregar la salida estándar y el error estándar a un solo archivo como este:

$ ls -l /root/ &>>ls-error.log

Cómo redirigir la entrada estándar al archivo

La mayoría, si no todos los comandos, obtienen su entrada de la entrada estándar y, de forma predeterminada, la entrada estándar está conectada al teclado.

Para redirigir la entrada estándar de un archivo que no sea el teclado, use el operador “& lt;” como se muestra a continuación:

$ cat <domains.list 

Cómo redirigir la entrada / salida estándar al archivo

Puede realizar una entrada estándar, redirección de salida estándar al mismo tiempo, utilizando el comando de ordenamiento como se muestra a continuación:

$ sort <domains.list >sort.output

Cómo usar la redirección de E / S usando tuberías

Para redirigir la salida de un comando como entrada de otro, puede usar tuberías, este es un medio poderoso para construir líneas de comando útiles para operaciones complejas.

Por ejemplo, el siguiente comando mostrará una lista de los cinco principales archivos recientemente modificados.

$ ls -lt | head -n 5 

Aquí, las opciones:

  1. -l – enables long listing format
  2. -t – sort by modification time with the newest files are shown first
  3. -n – specifies the number of header lines to show

Comandos importantes para la construcción de tuberías

Aquí, revisaremos brevemente dos comandos importantes para construir tuberías de comando y son:

xargs que se utiliza para crear y ejecutar líneas de comando desde la entrada estándar. A continuación se muestra un ejemplo de una canalización que utiliza xargs , este comando se usa para copiar un archivo en varios directorios en Linux:

$ echo /home/aaronkilik/test/ /home/aaronkilik/tmp | xargs -n 1 cp -v /home/aaronkilik/bin/sys_info.sh

Y las opciones:

  1. -n 1 – instructs xargs to use at most one argument per command line and send to the cp command
  2. cp – copies the file
  3. -v – displays progress of copy command.

Para obtener más opciones de uso e información, lea la página del manual de xargs :

$ man xargs 

Un comando tee lee desde la entrada estándar y escribe en la salida y los archivos estándar. Podemos demostrar cómo tee funciona de la siguiente manera:

$ echo "Testing how tee command works" | tee file1 

Los filtros de archivos o de texto se usan comúnmente con tuberías para operaciones de archivos de Linux efectivas, para procesar información de manera poderosa como la reestructuración de la salida de comandos (esto puede ser vital para la generación de informes útiles de Linux), la modificación de texto en archivos y varios otros sistemas de administración de sistemas Linux. Tareas.

Para obtener más información acerca de los filtros y tuberías de Linux, lea este artículo. Encontrar las 10 principales direcciones IP que acceden al servidor Apache, muestra un ejemplo útil del uso de filtros y tuberías.

En este artículo, explicamos los fundamentos de la redirección de E/S en Linux. Recuerde compartir sus pensamientos a través de la sección de comentarios a continuación.