GNU/Linux >> Tutoriales Linux >  >> Linux

Comandos prácticos de Linux y Unix Tee para el administrador de Linux

Como administrador de Linux, hay muchas ocasiones en las que debe guardar la salida de un comando en un archivo, además de simplemente imprimir la salida 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 usar el tee comando para guardar y agregar la salida a un archivo.

¿Listo? ¡Siga leyendo para llevar sus scripts de shell al siguiente nivel!

Requisitos

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

Redireccionamiento de 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 los comandos. Como resultado, puede tomar la salida de un comando y usar esa salida como entrada para otro comando (redirecciones de archivos).

Hay diferentes tipos de redireccionamientos, y cada uno tiene un propósito. Pero cuando se ejecuta el tee comando, utiliza principalmente dos tipos diferentes de redireccionamientos:

  • Redireccionamiento de salida estándar (STDOUT) (>):la salida predeterminada de un comando.
  • Redireccionamiento 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 las salidas de los comandos en un archivo, pero verá 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.

ls

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

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

ls fake_directory

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

Guardar los resultados de los comandos en un archivo

Suponga que desea guardar el STDOUT del ls comando a un archivo en lugar de simplemente imprimir la salida en el terminal. En este caso, el operador de redirección (> ) es útil.

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

ls > ls_stdout.txt

2. Ahora, ejecute el siguiente comando cat para ver el contenido de su archivo ls_stdout.txt.

cat 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á una salida en su terminal ya que la salida se guarda en un archivo.

ls fake_directory 2> ls_stderr.txt

4. Ahora, ejecute el siguiente comando cat para ver el contenido del archivo ls_stderr.txt.

cat ls_stderr.txt

A continuación, puede confirmar que el STDERR del comando ls se guardó en 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é conformarse con uno cuando puedes tener ambos, verdad? Por lo general, es posible que desee almacenar ambas salidas en el mismo archivo para solucionar problemas o para fines de registro.

ls &> ls_alloutput.txt

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

cat ls_alloutput.txt

Conectar programas con tuberías

Además de simplemente guardar las salidas en un archivo, puede lograr mucho más usando canalizaciones, como conectar programas. En escenarios del mundo real, lo más probable es que utilice canalizaciones junto con redireccionamientos de archivos y el tee comando.

Una tubería (| ) 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 canalización toma el STDOUT de un proceso y conecta ese STDOUT al STDIN de otro proceso.

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

grep tcp /etc/services

Ahora, ejecute el mismo grep comando a continuación. Pero esta vez, canalice la salida del grep anterior 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. La salida luego se pasa como una entrada al less comando.

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

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

Anteriormente usaste la canalización con redireccionamientos, y eso es un gran paso. Esta vez, usará tuberías 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 expediente. La salida de ls se canaliza aún más al 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 resultado archivo .txt.

cat result.txt

Adjuntar salida 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 que el tee ordena hacer la magia.

Por defecto, el tee El comando sobrescribe el contenido de un archivo existente. Pero en muchos casos, es posible que desee agregar la salida 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 la salida del comando ls -lR y agregue la salida (tee -a) al resultado.txt contenido del archivo. Este comando no proporciona salida ya que está enviando la salida del comando a un archivo.

ls -lR | tee -a result.txt

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

cat result.txt

Como puede ver a continuación, la salida del ls -lR el comando se agrega al final del result.txt archivo.

Uso del 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 el comando trabaja de la mano con sudo ? ¡Sí!

Anteponer sudo al comando tee permite que un usuario que no sea root escriba datos en un archivo que solo un usuario root puede modificar. Por ejemplo, desea habilitar el usuario ata para escribir datos en /etc/ata.conf expediente. Pero, al mismo tiempo, no quiere darle al usuario ata privilegios de root.

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 desde ata el usuario no tiene acceso de escritura a /etc/ata.conf archivo.

3. Ejecute el mismo comando a continuación como lo 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 le permite al usuario ata para completar el comando (elevado) como usuario no root.

echo "data" | sudo tee /etc/ata.conf

Por último, ejecute el siguiente comando cat para verificar que ata el usuario podría escribir el texto "datos" en /etc/ata.conf.

cat /etc/ata.conf

Conclusión

A lo largo de este tutorial, aprendió cómo usar el comando tee de Unix para escribir datos en archivos y cómo funciona junto con otros comandos. En este punto, debe 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, controlas completamente los ingredientes y las proporciones de cada plato. Puede personalizar cada pedido sobre la marcha para adaptarlo a los gustos de su cliente. El único límite es tu imaginación (y quizás el tamaño de la ventana de tu terminal).

Ahora, ¡adelante y crea increíbles brebajes de línea de comandos!


Linux
  1. 8 consejos para la línea de comandos de Linux

  2. Comandos Bash Bang:un truco imprescindible para la línea de comandos de Linux

  3. 5 ejemplos prácticos de Head Command en Linux

  4. Ejemplos esenciales del comando de archivo en Linux

  5. 5 ejemplos prácticos del comando dd en Linux

Los 50 comandos IP útiles de Linux para administradores de red

5 comandos para ver el contenido de un archivo en la línea de comandos de Linux

Comando AWK en Linux/Unix

Una guía práctica para el comando chroot en Linux

Comando Unix LS:15 ejemplos prácticos

UNIX/Linux:7 ejemplos prácticos de comandos PS para el monitoreo de procesos