Este artículo fue publicado originalmente en go2linux.org. El dominio ya no me pertenece, pero soy el autor original. Lo republico aquí en garron.me con correcciones y mejoras.

dmesg muestra el búfer circular del kernel: los mensajes que el kernel de Linux escribe durante el arranque y mientras está en funcionamiento. Es el primer lugar donde mirar cuando un disco, un dispositivo USB, una tarjeta de red o un controlador se comporta mal.

Uso básico

sudo dmesg

La salida es larga, así que envíala a un paginador o deja que dmesg lo haga con -H:

sudo dmesg | less
sudo dmesg -H

-H activa la salida legible: paginador, colores y tiempos relativos.

"Operation not permitted"

En las versiones actuales de Debian, Ubuntu y muchas otras distribuciones, un usuario normal obtiene esto:

dmesg: read kernel buffer failed: Operation not permitted

Los mensajes del kernel pueden filtrar direcciones de memoria y otros detalles útiles para un atacante, por eso el acceso está restringido por la opción kernel.dmesg_restrict. Usa sudo, como en los ejemplos de este artículo.

Para revisar la opción:

sysctl kernel.dmesg_restrict

Un valor de 1 significa que solo root puede leer el búfer. Puedes ponerlo en 0 en un equipo personal, pero déjalo como está en servidores y sistemas compartidos.

Fechas legibles

Por defecto cada línea empieza con el número de segundos desde el arranque:

[    2.418337] usb 1-1: new high-speed USB device number 2 using xhci_hcd

-T lo convierte en fecha y hora:

sudo dmesg -T
[Mon Oct  5 09:14:02 2026] usb 1-1: new high-speed USB device number 2 using xhci_hcd

Estas horas se calculan a partir de la hora de arranque, y el reloj del kernel no avanza mientras el equipo está suspendido. En un portátil que estuvo en reposo, las horas de -T pueden estar desfasadas; para horas exactas usa journalctl -k (más abajo).

Mostrar solo errores y advertencias

Cada mensaje del kernel tiene un nivel. -l filtra por uno o más de ellos:

sudo dmesg -l err,warn

Los niveles, del más al menos grave, son emerg, alert, crit, err, warn, notice, info y debug.

Para ver el nivel y el origen de cada línea, agrega -x:

sudo dmesg -x

Filtrar por origen

-f selecciona el origen (facility) del mensaje. La distinción más útil es entre kernel y espacio de usuario:

sudo dmesg -f kern
sudo dmesg -f daemon

-k y -u son atajos para ver solo mensajes del kernel o solo del espacio de usuario.

Seguir los mensajes nuevos en vivo

-w mantiene dmesg en ejecución y muestra los mensajes nuevos a medida que llegan, como tail -f:

sudo dmesg -w

Ejecútalo y luego conecta una memoria USB: verás cómo el kernel detecta el dispositivo y le asigna un nombre como sdb. Usa -W para omitir el búfer existente y mostrar solo lo que ocurra a partir de ese momento.

Buscar algo

dmesg se combina bien con grep:

sudo dmesg | grep -i usb
sudo dmesg | grep -i -E 'sd[a-z]|nvme'
sudo dmesg | grep -i -E 'eth|enp|wlan|link is'

Comprobar si el kernel mató un proceso por falta de memoria:

sudo dmesg -T | grep -i -E 'out of memory|killed process'

Buscar problemas de disco:

sudo dmesg -T -l err,warn | grep -i -E 'ata|i/o error|ext4|xfs'

Guardar los mensajes en un archivo

Práctico cuando necesitas enviarle el registro de arranque a alguien que te está ayudando:

sudo dmesg -T > mensajes-arranque.txt

Vaciar el búfer

-C vacía el búfer; -c lo muestra primero y luego lo vacía:

sudo dmesg -C

Es útil antes de una prueba: vacía el búfer, reproduce el problema, y lo que queda es solo lo que el problema generó. Los mensajes que ya están guardados en el journal del sistema no se ven afectados.

El búfer tiene un tamaño fijo

Se llama búfer circular porque tiene un tamaño fijo y los mensajes nuevos sobrescriben a los más antiguos. En un equipo que lleva semanas encendido, o con un controlador que escribe mucho, puede que los mensajes del arranque ya no estén en dmesg.

journalctl -k

En sistemas con systemd, el journal guarda los mensajes del kernel en disco, con horas exactas, y los conserva entre reinicios:

journalctl -k

Mensajes del kernel del arranque anterior — muy útil después de un cuelgue:

journalctl -k -b -1

Seguir en vivo, o mostrar solo errores:

journalctl -k -f
journalctl -k -p err

Usa dmesg para un vistazo rápido a lo que el kernel está diciendo ahora, y journalctl -k cuando necesites historial u horas precisas.

Ver también

man dmesg — referencia completa.