Los sistemas operativos Linux ofrecen cientos de comandos que han sido desarrollados en ofrecer las mejores facilidades de administración para los usuarios ya sea a nivel de hardware, software, servicios o procesos, donde cada comando cumple con una función especial y puede desplegar o no mejores resultados que otros. Sabemos de la fiabilidad e integridad de las distribuciones de Linux, pero al igual que todo sistema operativo o aplicación, puede llegar el momento en que alguno de sus componentes falle y en vez de perder tiempo buscando miles de causas podemos echar mano de un comando que simplificará este proceso y es el comando dmesg.
Solvetic hará un completo análisis sobre qué es y como actual dmesg en Linux y así nos daremos cuenta de que se convierte en una gran herramienta de ayuda para todas las tareas de soporte.
El comando dmesg obtiene los datos leyendo el buffer del anillo del kernel. Básicamente un búfer es una parte de la memoria del equipo que se reserva como un lugar temporal para los datos que son enviados o recibidos desde un dispositivo externo, tales como una unidad de disco duro, un teclado, etc, mientras que un búfer de anillo es un búfer de tamaño fijo en el cual cualquier dato nuevo agregado va a sobrescribir los datos más antiguos allí alojados. dmesg se usa para examinar o controlar el buffer del anillo kernel y la acción predeterminada es mostrar todos los mensajes del buffer de anillo kernel.
Los mensajes generados por el kernel son pieza fundamental en las tareas de diagnóstico ya que, en caso de fallar algún dispositivo, tendremos a mano un resumen sobre que sucedió y así tomar las medidas de soporte necesarias. En el momento de conectar o desconectar un dispositivo de hardware en el sistema, gracias al comando dmesg, será posible conocer la información detectada o desconectada en tiempo real y lo mejor de todo es que el comando dmesg está disponible en la mayoría de los sistemas operativos basados en Linux y Unix.
1. Usar el comando dmesg en Linux
El uso básico de este comando es ejecutarlo sin parámetros:
Dmesg
Esto dará como resultado el despliegue de todos los mensajes del kernel:
Debido a toda la información desplegada, es difícil llevar a cabo alguna tarea de administración allí. Podemos hacer uso del parámetro “-H” con el fin de indicarle a dmesg que la salida sea legible para los usuarios, lo cual simplificará las tareas de soporte. Allí encontramos detalles mucho más claros sobre el anillo del kernel.
dmesg -H
Otra alternativa para realizar un análisis con dmesg es con el parámetro “-w”, el cual nos permite escribir un script para analizar el resultado usando una expresión regular con el fin de filtrar los eventos para su posterior análisis:
dmesg -w
Podemos ver que los resultados son por lo general abundantes, es posible limitar la salida únicamente a errores y advertencias con el fin de no analizar todo lo que sucede en el sistema a nivel interno y para ello el comando dmesg dispone de ocho niveles a usar, donde cada uno de los cuales se puede combinar con el objetivo de llevar a cabo una búsqueda mucho más completa y específica, estos niveles son:
Podemos usar diversos tipos de niveles, por ejemplo, podemos ejecutar lo siguiente:
dmesg --level=alert,info
Los resultados dependen del estado del kernel:
dmesg --level=err,warn
2. Ver Marcas y detalles de tiempo con comando dmesg
Al usar dmesg, será posible saber en detalle a qué hora ocurrió un error o advertencia gracias al parámetro -T, podemos ejecutarlo de la siguiente forma:
dmesg --level=err,warn -T
Allí vemos detalles de hora y fecha del evento. Podemos especificar un dispositivo específico para desplegar los resultados generados por dmesg, para ello especificamos el nombre del dispositivo de la siguiente forma:
dmesg | grep -i enp0s3
Si deseamos limitar la salida de dmesg solo a mensajes de espacio de usuario, vamos a usar la opción “-u”:
dmesg -u
Podemos hacer uso de herramientas de manipulación de texto, como more (mas) o les (menos) junto a 'grep' con el comando dmesg, la razón es que la salida del registro dmesg no cabe en una sola página, podeos usar alguna de las siguientes opciones:
dmesg | more dmesg | less
Si deseamos descubrir qué discos duros ha detectado el kernel, es posible buscar la palabra clave "sda" junto con "grep" para desplegar este resultado así:
dmesg | grep sda
Podemos usar el parámetro “head” junto con dmesg con el fin de mostrar la cantidad de líneas de inicio deseadas, para desplegar solo las primeras 15 líneas ejecutamos:
dmesg | head -15
Del mismo modo, si solo deseamos desplegar las ultimas 15 líneas ejecutamos:
dmesg | tail -15
Para buscar un dispositivo o palabra en particular, será posible filtrar las líneas con cadenas específicas, donde la opción -i indica al comando grep que ignore el caso (letras mayúsculas o minúsculas):
dmesg | grep -i usb dmesg | grep -i dma dmesg | grep -i tty dmesg | grep -i memory
Para limpiar el buffer de eventos de dmesg ejecutamos:
dmesg -cDe esta forma hemos visto como dmesg es una utilidad valiosa para gestionar todo lo que sucede con el kernel y sus componentes en tiempo real y llevar cabo una tarea administrativa mucho más completa.