Si alguna vez usó canalización y redirección a través de shell على Linux A veces, también necesitará usar el comando tee para obtener ayuda.
¿Qué hace tee?
ordenar como
ls
mostrará El contenido del directorio actual. En otras palabras, es mostrar este contenido En stdout (salida estándar), que suele estar en su pantalla, o para ser más precisos, su monitor predeterminado.
ordenar como
ls > file123
No se mostrará nada en la pantalla. Eso es porque la señal > Redirige toda la salida a un archivo en lugar de servirla a stdout. ahora se llenará file123 contenido previamente mostrado en la pantalla.
Para mostrar el contenido de su directorio en la pantalla y escribir en este archivo, puede usa dos cosas. Con tee puedes hacer ambas cosas simultáneamente.
ls | tee file123
¿Por qué usar Tee si puede ejecutar un comando similar dos veces?
En el ejemplo anterior, obviamente no es necesario tee Si puede ejecutar el comando normalmente, ejecútelo nuevamente y redirija la salida a algún archivo. Sin embargo, encontrará situaciones en las que la salida es solitaria. Imagine un escenario en el que está tratando de diagnosticar el problema. Puede ejecutar un diagnóstico | tee error registro. Los errores que obtenga pueden ser únicos. Desea mostrarlo en la pantalla para que pueda ver lo que sucede a medida que prueba las cosas. Pero también desea guardar esos errores en un archivo, para que pueda revisarlos más tarde o pegar el resultado en un foro de discusión y preguntarle a la gente al respecto.
Hay otra situación, que se encuentra a menudo, en la que tendrá que tee , que es: desea escribir el resultado de un comando en una ubicación donde solo el usuario raíz puede leer o escribir. Esto no funcionará.
/sbin/blkid > /root/somefile
Entonces, podrías pensar: "Bueno, por supuesto, solo usa sudo!” Y te sorprenderá que esto tampoco funcione:
sudo blkid > /root/somefile
Esto se debe a que después de implementar sudo blkid Todavía está conectado como un usuario normal, no principal. y tratando shell (Usualmente golpear) escribir a /root/algunarchivo utilizando credenciales de usuario normales. Para resolver esto, puedes usar tee:
/sbin/blkid | sudo tee /root/somefile
Agregar texto y redirigir errores
tee Un comando útil pero simple; básico | tee algún archivo La mayor parte del tiempo suficiente. Sin embargo, hay dos escenarios que puede encontrar que requieren estos consejos.
Lo primero que hay que saber es que tee Por defecto sobrescribe un archivo. Si tu corres
ls | tee somefile
y luego
ls /tmp | tee somefile
El segundo comando sobrescribirá el contenido de algunos archivos y solo verá el contenido del último comando ejecutado. Para cambiar este comportamiento, puede hacer tee Agrega texto en lugar de escribir. Para hacer esto, simplemente use el interruptor de palanca -a.
ls | tee -a somefile
Lo segundo que debe saber es que no todos los resultados son iguales. Los mensajes de error se manejan de manera diferente y, aunque aparecen en la pantalla, no se consideran stdout , por lo que no será notado por tee. (Se considera stderr.) He aquí un ejemplo de grep.
grep -r L2TP /etc | tee somefile
Se mostrará algo como la siguiente imagen.
Cartas de denegación de permiso escritas a stderr. Lo único que se escribe en stdout es el texto resaltado. Por este motivo notará que el contenido de “somefileEsto es lo que se muestra en la imagen de abajo.
En este caso, donde se usa . grep Para la búsqueda de texto, es útil no reenviar mensajes de error al archivo. Esto solo estaba llenando el archivo con archivos innecesarios. Solo desea ver los resultados encontrados. Pero cuando necesite mensajes de error, use 2> y 1 , que redirige stderr A stdout.
grep -r L2TP /etc 2>&1 | tee somefile
Con este comando, notará que somefile Ahora también contiene mensajes de error.
Conclusión
Esperamos que este tutorial cubra todo lo que necesita para aprovechar al máximo el comando tee. Pero si te encuentras con una situación en la que te quedas atascado con tee Deje un comentario a continuación, y es posible que podamos ayudarlo.