Pide tu presupuesto ya!
28th March 2024
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!
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.
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:
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.
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.

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.

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.

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

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.

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.

tee) Comando, canalizaciones y redireccionesHasta 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

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

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.

tee Comando en conjunto con sudoMuchos 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.

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

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.

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!
Leave a comment