
Estoy escribiendo un controlador de dispositivo que imprime un mensaje de error enbuffer de anillosalida de mensaje. Quiero ver el resultado de dmesg
a medida que cambia.
¿Cómo puedo hacer esto?
Respuesta1
dmesg
Versiones relativamente recientesproporcionar una opción de seguimiento( -w
, --follow
) que funciona de manera análoga a tail -f
.
Por lo tanto, simplemente use el siguiente comando:
$ dmesg -wH
( -H
, --human
habilita funciones fáciles de usar como colores, tiempo relativo)
Esas opciones están disponibles, por ejemplo, en Fedora 19.
Respuesta2
Puedes usar el watch
comando que está destinado exactamente para cosas como esta.
watch -n 0.1 "dmesg | tail -n $((LINES-6))"
la $((LINES-6))
pieza debe encajar perfectamente en su terminal.
Respuesta3
Realmente no se puede monitorear la salida dmesg
directamente.
Sin embargo, hay muchas posibilidades de que su módulo no imprima directamente en el búfer circular de dmesg, sino que utilice las funciones de registro del kernel (que luego se mostrarán en dmesg
). Si syslog
tiene algunas configuraciones sensatas (por ejemplo, predeterminadas), lo más probable es que estos mensajes también aparezcan en el kern.log
archivo de registro.
Entonces puedes hacer algo como:
tail -f /var/log/kern.log
Respuesta4
Si está utilizando un sistema integrado, comoCaja ocupadaeso es común en sistemas comoOpenWrt, tiene una funcionalidad muy limitada y solo se admiten 2 o 3 indicadores.
Si desea una forma rápida y sucia de imprimir la salida dmesg en la pantalla continuamente a medida que cambian los eventos, un simple bucle Bash funciona bien. No es ideal, pero como mencioné, a BusyBox dmesg le faltan muchas funciones. Encuentro que lo siguiente tiene el mismo efecto cuando se ingresa en la línea de comando:
$ while true; do dmesg -c ; sleep 1 ; done
Puedes salir del ciclo con Ctrl+ C. El modo de suspensión 1 es para evitar que golpee la CPU innecesariamente, y el indicador -c borra el búfer en cada llamada para que no vea resultados repetidos cada segundo.