Seguramente este truco te va a ser de más utilidad en caso de que te dediques a la gestión de servidores, ya que para un ordenador de escritorio normalmente no es necesario revisar los logs en tiempo real, y mucho menos teniendo que filtrarlos por cadenas de carácteres a modo búsqueda.
Si gestionamos un único servidor, puede que no nos encontremos con este problema, pues utilizando únicamente la cadena tailf access_log | grep campoafiltrar seguramente nos va a funcionar. El problema viene cuando esto no funciona siempre, o ha dejado de hacerlo, y puede deberse a alguna modificación en la configuración de nuestros servicios.
El comando anterior nos suele funcionar cuando no tenemos ningún tipo de buffer de salida para estos comandos, pero si el sistema está cacheando los datos y enviándolos por paquetes almacenados, entonces el comando grep no nos va a servir de nada ya que no se ejecuta en cada línea que se carga en el buffer.
Cómo filtrar archivos de registro y ver la salida en vivo
Por suerte, el comando grep nos ofrece unas cuantas funciones, y entre ellas está el forzar que cada línea que entra en el buffer se pueda filtrar, por lo que simplemente variando un poco el comando que solemos usar podemos tener esta funcionalidad en sistemas que no nos permitan usar el comando habitual.
Pongamos por ejemplo que queremos filtrar el archivo de apache, para ver la salida del access_log, y que nos interesan los usuarios que visitan una url que contenga la palabra «blog» (o la ip en concreo, e incluso el número de error). Para ello simplemente tendremos que escribir uno de estos dos comandos:
tailf /var/log/access_log | grep --line-buffered blog tail -f /var/log/access_log | grep --line-buffered blog
Los dos hacen exactamente lo mismo, y como puedes ver estamos forzando la salida de cada una de las líneas del buffer, por lo que aunque se guarden en caché de esta forma podremos ver la salida igualmente.
¿Tienes algún otro truco para linux? Deja tu comando en un comentario