Pide tu presupuesto ya!

Domine los comandos de Unix para tareas de administración de Linux en el mundo real

Como administrador de Linux, hay muchas ocasiones en las que debes guardar el resultado de un comando en un archivo, además de simplemente imprimir el resultado en la terminal. ¿No estás seguro de cómo? Deje que el comando tee de Unix haga el truco.

En este tutorial, aprenderá muchas formas de utilizar el tee comando para guardar y agregar resultados a un archivo.

¿Listo? ¡Sigue leyendo para llevar tus scripts de shell al siguiente nivel!

Requisitos previos

Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener un sistema Linux. Este tutorial usa Ubuntu 20.04, pero puedes usar cualquier versión de Linux.

Redirigir salidas de comandos (STDOUT/STDERR)

Antes de ejecutar el tee comando, es crucial entender cómo funcionan las redirecciones. En Linux, todo se considera un archivo, incluidos los dispositivos, los directorios e incluso la salida de comandos. Como resultado, puede tomar la salida de un comando y usar esa salida como entrada para otro comando (redirecciones de archivos).

Existen diferentes tipos de redireccionamientos y cada uno tiene un propósito. Pero al ejecutar el tee comando, utiliza principalmente dos tipos diferentes de redirecciones:

  • Redirección de salida estándar (STDOUT) (>): la salida predeterminada de un comando.
  • Redirección de error estándar (STDERR)(2>): un mensaje de error generado por un comando y que se muestra en la pantalla.

Ambos redireccionamientos toman y guardan los resultados de los comandos en un archivo, pero verás cómo funcionan los redireccionamientos a continuación.

Ejecute el ls comando sin argumentos para enumerar todos los contenidos (archivos y carpetas) de su directorio de trabajo.

A continuación se muestra la STDOUT del comando ls.

Obtener una STDOUT

A continuación, ejecute el siguiente comando para enumerar deliberadamente el contenido de un directorio (fake_directory) eso no existe.

Recibirá un mensaje de error que indica que el directorio no existe. Esta salida es el STDERR del comando ls.

Obteniendo STDERR

Guardar salidas de comandos en un archivo

Supongamos que desea guardar el STDOUT del ls comando a un archivo en lugar de simplemente imprimir la salida en la terminal. En este caso, el operador de redirección (>) Viene muy bien.

1. Ejecute el siguiente comando para guardar/redirigir (>) el STDOUT del comando ls a un archivo llamado ls_stdout.txt. Dado que este comando guarda el resultado en un archivo, no obtendrá un resultado en su terminal.

2. Ahora, ejecute el comando cat a continuación para ver el contenido de su archivo ls_stdout.txt.

Ver el contenido del ls_stdout.txt archivo

3. De manera similar, ejecute el siguiente comando para guardar el STDERR (2>) del comando ls en un archivo llamado ls_stderr.txt. Nuevamente, no obtendrá un resultado en su terminal ya que el resultado se guarda en un archivo.

ls fake_directory 2> ls_stderr.txt

4. Ahora, ejecute el comando cat a continuación para ver el contenido del archivo ls_stderr.txt.

A continuación, puede confirmar que el STDERR del comando ls se guardó en el ls_stderr.txt archivo.

Ver el contenido del archivo ls_stderr.txt
Ver el contenido del ls_stderr.txt archivo

5. Ejecute el siguiente comando para guardar (&>) STDOUT y STDERR del comando ls en un archivo llamado ls_alloutput.txt.

¿Por qué conformarte con uno cuando puedes tener ambos, verdad? Por lo general, es posible que desee almacenar ambas salidas en el mismo archivo para fines de resolución de problemas o registro.

6. Por último, ejecute el siguiente comando cat para ver el contenido del archivo ls_alloutput.txt

Ver el archivo ls_alloutput.txt
Viendo el ls_alloutput.txt archivo

Conexión de programas con tuberías

Además de simplemente guardar los resultados en un archivo, puede lograr mucho más utilizando tuberías, como conectar programas. En escenarios del mundo real, lo más probable es que utilices canalizaciones junto con redireccionamientos de archivos y el tee dominio.

Un tubo (|) es un mecanismo para la comunicación entre procesos que le permite conectar la salida de un comando a la entrada de otro comando. En otras palabras, la tubería toma el STDOUT de un proceso y conecta ese STDOUT al STDIN de otro proceso.

Ejecute lo siguiente grep comando para buscar todas las líneas que contienen la palabra tcp en el archivo /etc/services.

Buscando todas las líneas que contienen la palabra “tcp” del archivo /etc/services
Buscando todas las líneas que contienen la palabra “tcp” del archivo /etc/services

Ahora ejecuta lo mismo grep comando a continuación. Pero esta vez, canalice el resultado de lo anterior. grep comando al less comando para mostrar los resultados de la búsqueda una pantalla a la vez.

grep tcp /etc/services | less

¿Cómo funciona la tubería? Como puede ver a continuación, cuando usa el carácter de barra vertical (|), la salida del grep El comando se almacena en una ubicación temporal. Luego la salida se pasa como entrada al less dominio.

Canalizando la salida del comando grep anterior al comando less
Canalizando la salida del comando grep anterior al comando less

Combinando la camiseta Unix (tee) Comando, canalizaciones y redirecciones

Hasta ahora has aprendido cómo tee El comando, las canalizaciones y las redirecciones funcionan. Pero ¿por qué no utilizar los tres juntos para un mejor control de las salidas de los comandos?

Anteriormente usaste la canalización con redirecciones, y ese es un gran paso. Esta vez, usarás tubería y el tee comando para enviar la salida de un comando a otro para su posterior procesamiento.

Ejecute el siguiente comando para enviar la salida del ls comando a la pantalla y el result.txt archivo. La salida de ls se canaliza además hacia el grep comando para filtrar solo las líneas que contienen la palabra ip.

ls | grep 'ip' | tee result.txt
Enviar salida de comando a otros comandos
Enviar salida de comando a otros comandos

Ahora, ejecuta el cat comando para verificar el contenido del resultadoArchivo .txt.

Verificar el contenido del archivo result.txt
Verificar el contenido del resultado.txt archivo

Agregar resultados a archivos existentes

Anteriormente guardó la salida de los comandos en un archivo, pero ¿puede actualizar un archivo existente en lugar de crear uno nuevo? ¡Sí! Deja el tee comando haz la magia.

Por defecto, el tee El comando sobrescribe el contenido de un archivo existente. Pero en muchos casos, es posible que desees agregar el resultado de un comando a un archivo existente. Como registrar todos los eventos del servidor en tiempo real en un archivo de registro.

Con esta característica, el archivo de registro se agrega con nuevas entradas cada vez que ocurre un evento en el servidor.

Ejecute el siguiente comando para tomar el resultado del comando ls -lR y agregar el resultado (tee -a) al resultado.txt contenido del archivo. Este comando no proporciona resultados ya que está enviando el resultado del comando a un archivo.

ls -lR | tee -a result.txt

Ahora, ejecuta el cat comando para verificar el contenido del result.txt archivo.

Como puede ver a continuación, la salida del ls -lR El comando se añade al final del resultado.txt archivo.

Agregar resultados a archivos existentes
Agregar resultados a archivos existentes

Utilizando el tee Comando en conjunto con sudo

Muchos comandos requieren privilegios elevados o sudo acceso, como realizar modificaciones dentro del /etc directorio. La pregunta es, ¿el tee comando trabajar de la mano con sudo? ¡Sí!

Anteponer sudo al comando tee permite a un usuario no root escribir datos en un archivo que solo un usuario root puede modificar. Por ejemplo, desea habilitar al usuario ata escribir datos en el /etc/ata.conf archivo. Pero, al mismo tiempo, no desea darle al usuario ata privilegios de raíz.

1. Inicie sesión en su máquina con un usuario que no sea root.

2. A continuación, ejecute el siguiente comando sin sudo para escribir los datos de texto en el archivo /etc/ata.conf.

echo "data" > tee /etc/ata.conf

Como puede ver a continuación, obtendrá un error de Permiso denegado ya que ata El usuario no tiene acceso de escritura al /etc/ata.conf archivo.

Modificar un archivo sin anteponer el comando sudo
Modificar un archivo sin anteponer el comando sudo

3. Ejecute el mismo comando a continuación que hizo en el paso dos para escribir los datos de texto en el archivo /etc/ata.conf. Pero esta vez, anteponga el comando sudo al comando tee. Hacerlo permite al usuario ata para completar el comando (elevado) como usuario no root.

echo "data" | sudo tee /etc/ata.conf
Permitir que un usuario escriba datos en el archivo /etc/ata.conf,
Permitir que un usuario escriba datos en el /etc/ata.conf archivo,

Por último, ejecute el comando cat a continuación para verificar que el ata El usuario podría escribir el texto “datos” en /etc/ata.conf.

Verificando que el usuario ata pudo escribir en el archivo /etc/ata.conf
Verificando que ata el usuario pudo escribir en el archivo /etc/ata.conf

Conclusión

A lo largo de este tutorial, ha aprendido cómo utilizar el comando tee de Unix para escribir datos en archivos y cómo funciona junto con otros comandos. En este punto, debería tener una poderosa combinación de comandos que puede usar para administrar la entrada y salida en el entorno de línea de comandos de Linux.

Eres como un chef de sushi, controlando completamente los ingredientes y las proporciones de cada plato. Puede personalizar cada pedido sobre la marcha para adaptarlo a los gustos de sus clientes. El único límite es tu imaginación (y tal vez el tamaño de la ventana de tu terminal).

Ahora, continúa y crea una línea de comando increíble. brebajes!

Written by

Leave a comment