it-swarm-es.tech

¿Cómo puedo ver la salida de dmesg a medida que cambia?

Estoy escribiendo un controlador de dispositivo que imprime el mensaje de error en ring buffer dmesg output. Quiero ver la salida de dmesg a medida que cambia.

¿Cómo puedo hacer esto?

154
Milad Khajavi

Versiones relativamente recientes de dmesgproporcione una opción de seguimiento (-w, --follow) que funciona de manera análoga a tail -f.

Por lo tanto, solo use el siguiente comando:

$ dmesg -wH

(-H, --human permite funciones fáciles de usar como colores, tiempo relativo)

Esas opciones están disponibles, por ejemplo, en Fedora 19.

194
maxschlepzig

Puede usar el comando watch que está destinado exactamente para cosas como esta

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

la parte $((LINES-6)) debería hacer que se ajuste perfectamente a su terminal.

57
peterph

Realmente no puede monitorear la salida de dmesg directamente.

Sin embargo, hay muchas posibilidades de que su módulo no imprima directamente en el búfer de anillo de dmesg, sino que utilice las funciones de registro del núcleo (que luego se mostrarán con dmesg). Si su syslog tiene una configuración sensata (por ejemplo, predeterminada), es muy probable que estos mensajes también aparezcan en el kern.log archivo de registro.

Entonces puedes hacer algo como:

 tail -f /var/log/kern.log
12
umläute

Utiliza dmesg para obtener mensajes de registro del núcleo.

El núcleo en sí se registra en un búfer en anillo, es decir, solo en la memoria. Ahora todo lo que hace dmesg es mostrar el contenido de ese búfer de anillo. Si lo haces dmesg -c también eliminará el búfer de anillo después.

Por lo tanto, podrías hacer algo como while true; do dmesg -c; sleep 1; done tener algo como el equivalente de un no funciona dmesg|tail. Pero esto elimina el búfer de anillo y, por lo tanto, necesita poderes de raíz.

La otra forma es el archivo /proc/kmsg, que permite ver el búfer en anillo. Podrías hacerlo tail -f /proc/kmsg, pero esto solo permite un proceso, y este suele ser su demonio de registro. - Su trabajo es leer los mensajes y escribirlos en archivos reales (generalmente en/var/log) donde puedan leerse. Se puede configurar para enviar todos los mensajes a un solo archivo o diferentes partes en diferentes archivos. (Pero la configuración depende del daemon de registro de su sistema).

Por lo tanto, eche un vistazo a /var/log si hay algún archivo que se adapte a sus necesidades y configure su demonio de registro de otra manera.

10
michas

Si está utilizando un sistema integrado, como BusyBox que es común en sistemas como OpenWrt , tiene una funcionalidad muy limitada y solo se admiten 2-3 indicadores.

Si desea una forma rápida y sucia de imprimir resultados dmesg en la pantalla continuamente a medida que cambian los eventos, un simple Bash loop funciona bien. No es ideal, pero como mencioné, al dmesg de BusyBox le faltan muchas funciones. Creo 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. La 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 una salida repetida cada segundo.

8
user241342

En los sistemas que usan systemd también puede:

# journalctl -kf
5
Maxim

Utilice estos dos comandos desde terminales separados:

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

Logrará un resultado similar.

0
K_K