Un indicador de terminal estilizado en una computadora portátil Linux.

Cómo usar el comando dmesg en Linux

Fatmawati Achmad Zaenuri / Shutterstock

los dmesg El comando le permite explorar el mundo oculto de los procesos de arranque de Linux. Revise y supervise los mensajes de controladores y dispositivos de hardware desde el búfer de anillo del núcleo con «el amigo solucionador de problemas».

Cómo funciona el búfer de anillo de Linux

En las computadoras tipo Linux y Unix, el inicio y el inicio son dos fases separadas en la secuencia de eventos que ocurren cuando se enciende la computadora.

Procesos de puesta en marcha (BIOS Dónde UEFI, MBR, y GUSANO) llevan la inicialización del sistema al punto en que el kernel se carga en la memoria y se conecta al disco virtual inicial (initrd o initramfs), y systemd ha empezado.

Luego, los procesos de inicio se hacen cargo y completan la inicialización del sistema operativo. Al comienzo de la inicialización, los demonios de registro como syslogd Dónde rsyslogd aún no están operativos. Para evitar perder mensajes de error y advertencias notables de esta fase de inicialización, el kernel contiene un sello de anillo que utiliza como almacén de mensajes.

Un búfer de anillo es un espacio de memoria reservado para mensajes. Es de diseño simple y de tamaño fijo. Cuando está lleno, los mensajes más recientes sobrescriben los mensajes más antiguos. Conceptualmente, se puede considerar un «búfer circular. «

El búfer de anillo del kernel almacena información como mensajes de inicialización del controlador de dispositivo, mensajes de hardware y mensajes del módulo del kernel. Debido a que contiene estos mensajes de arranque de bajo nivel, el búfer de anillo es un buen lugar para iniciar una investigación de errores de hardware u otros problemas de arranque.

Pero no vayas con las manos vacías. Tomar dmesg con vosotros.

El comando dmesg

los dmesg el comando te permite para revisar los mensajes que se almacenan en el búfer de anillo. Por defecto deberías usar sudo usar dmesg.

sudo dmesg

Todos los mensajes del búfer se muestran en la ventana del terminal.

Fue un diluvio. Obviamente, lo que tenemos que hacer es superarlo. less:

sudo dmesg | less

Ahora podemos desplazarnos por las publicaciones en busca de elementos de interés.

Puede utilizar la función de búsqueda en less para localizar y resaltar elementos y términos que le interesen. Inicie la función de búsqueda presionando la tecla de barra «/» en less.

Eliminar la necesidad de sudo

Si quieres evitar tener que usar sudo cada vez que usas dmesg, puede utilizar este comando. Pero cuidado: permite que cualquier persona con una cuenta de usuario use su computadora dmesg sin tener que usar sudo.

sudo sysctl -w kernel.dmesg_restrict=0

Forzar salida de color

Por defecto, dmesg probablemente se configurará para producir una salida en color. Si no, puedes decir dmesg colorear su salida usando el -L opción (color).

sudo dmesg -L

Forzar dmesg para usar siempre una pantalla coloreada por defecto, use este comando:

sudo dmesg --color=always

Marcas de tiempo humanas

Por defecto, dmesg use una notación de marca de tiempo en segundos y nanosegundos desde el arranque del kernel. Para hacer esto renderizado en un formato más amigable, use el -H opción (humano).

sudo dmesg -H

Esto causa dos cosas.

  • La salida se muestra automáticamente en less.
  • Las marcas de tiempo muestran una marca de tiempo con la fecha y la hora, con una resolución en minutos. Los mensajes que ocurrieron en cada minuto están etiquetados con segundos y nanosegundos desde el comienzo de ese minuto.

Sellos de tiempo legibles por humanos

Si no necesita una precisión de nanosegundos, pero desea marcas de tiempo más fáciles de leer que las predeterminadas, utilice la -T opción (legible por humanos). (Es un poco confuso. -H es la opción «humana», -T es la opción «legible por humanos»).

sudo dmesg -T

Las marcas de tiempo se representan como fechas y horas estándar, pero la resolución se reduce a un minuto.

Todo lo que sucedió en un minuto tiene la misma marca de tiempo. Si lo único que le preocupa es la secuencia de eventos, eso es suficiente. También tenga en cuenta que regresará al símbolo del sistema. Esta opción no llama automáticamente less.

Ver eventos en vivo

Para ver los mensajes a medida que llegan al búfer de anillo del kernel, utilice el --follow (espera mensajes). Esta frase puede sonar un poco extraña. Si el búfer de anillo se usa para almacenar mensajes de eventos que tienen lugar durante la secuencia de arranque, ¿cómo pueden llegar los mensajes en vivo al búfer de anillo después de que la computadora está en funcionamiento?

Cualquier cosa que provoque un cambio en el hardware conectado a su computadora hará que los mensajes se envíen al búfer de anillo del kernel. Actualice o agregue un módulo del kernel y verá mensajes de búfer en anillo con respecto a estos cambios. Si conecta una unidad flash USB o conecta o desconecta un dispositivo Bluetooth, verá mensajes en el dmesg salir. Incluso el hardware virtual hará que aparezcan nuevos mensajes en el búfer de anillo. Inicie una máquina virtual y verá llegar nueva información al búfer de anillo.

sudo dmesg --follow

Tenga en cuenta que no regresará al símbolo del sistema. Cuando aparecen nuevos mensajes, se muestran por dmesg en la parte inferior de la ventana de la terminal.

Sudo dmesg exit: siga la ventana de la terminal na

Incluso montar un disco CD-ROM se considera un cambio porque ha insertado el contenido del disco CD-ROM en el árbol de directorios.

Mensajes de búfer de anillo dmesg resultantes de montar un disco CD-ROM

Para salir de la transmisión en vivo, presione Ctrl+C.

Recuperar los últimos diez mensajes

Usa el comando tail recuperar los últimos diez mensajes de búfer de anillo del núcleo. Por supuesto, puede recuperar cualquier número de mensajes. Diez es solo nuestro ejemplo.

sudo dmesg | last -10

Los últimos diez mensajes se recuperan y se enumeran en la ventana del terminal.

Buscar términos específicos

Dirigir la salida de dmesg mediante grep para buscar cadenas o patrones particulares. Aquí usamos el -i (ignorar mayúsculas y minúsculas) para que se ignore el caso de cadenas coincidentes. nuestros resultados incluirán «usb» y «usb» y cualquier otra combinación de mayúsculas y minúsculas.

sudo dmesg | grep -i usb

Los resultados de búsqueda resaltados están en mayúsculas y minúsculas.

Podemos aislar los mensajes que contienen referencias a la primera SCSI disco duro en el sistema sda. (En realidad, sda también se utiliza hoy en día para el primer disco duro SATAy para memorias USB.)

sudo dmesg | grep -i sda

Todas las publicaciones que mencionan sda se recuperan y se enumeran en la ventana de terminal.

Hacer grep buscar varios términos al mismo tiempo, utilice el -E (extender expresión regular). Debe proporcionar los términos de búsqueda dentro de una cadena entre comillas con delimitadores de tubo «|» entre los términos de búsqueda:

sudo dmesg | grep -E "memory|tty|dma"

Cualquier mensaje que mencione alguno de los términos de búsqueda se muestra en la ventana de la terminal.

Usando niveles de registro

Cada mensaje almacenado en el búfer de anillo del kernel está asociado con un nivel. El nivel representa la importancia de la información contenida en el mensaje. Los niveles son:

  • surgir: El sistema no se puede utilizar.
  • alerta: Se deben tomar medidas de inmediato.
  • crítico: Condiciones críticas.
  • equivocarse: Condiciones de error.
  • para advertir: Condiciones de advertencia.
  • opinión: Estado normal pero significativo.
  • Información: informativo.
  • depurar: mensajes a nivel de depuración.

Podemos hacer dmesg extraer mensajes que coincidan con un nivel particular utilizando el -l (nivel) y pasando el nombre del nivel como parámetro de línea de comando. Para ver solo mensajes de nivel «informativo», use este comando:

sudo dmesg -l info

Todos los mensajes enumerados son mensajes informativos. No contienen errores ni advertencias, solo notificaciones útiles.

Combine dos o más niveles de registro en un solo comando para recuperar mensajes de varios niveles de registro:

sudo dmesg -l debug,notice

La salida de dmesg es una mezcla de mensajes de cada nivel de registro:

Las categorías de instalaciones

los dmesg los mensajes se agrupan en categorías denominadas «instalaciones». La lista de instalaciones es:

  • interletrado: mensajes del kernel.
  • usuario: mensajes a nivel de usuario.
  • correo: sistema de mensajería.
  • demonio: demonios del sistema.
  • autenticación: mensajes de seguridad / autorización.
  • syslog: mensajes internos de syslogd.
  • lpr: subsistema de impresora de línea.
  • nuevo: subsistema de noticias de la red.

Podemos preguntar dmesg para filtrar su salida para mostrar solo mensajes en una instalación específica. Para hacer esto tenemos que usar el -f opción (instalación):

sudo dmesg -f daemon

dmesg enumera todos los mensajes relacionados con los demonios en la ventana de terminal.

Como hicimos con los niveles, podemos preguntar dmesg para enumerar mensajes de varias instalaciones a la vez:

sudo dmesg -f syslog, daemon

El resultado es una mezcla de mensajes de registro de syslog y daemon.

Combinación de instalación y nivel

los -x La opción (decodificar) hace dmesg muestra la instalación y el nivel como prefijos legibles por humanos en cada línea.

sudo dmesg -x

La instalación y el nivel son visibles al inicio de cada línea:

La primera sección resaltada es un mensaje de la función «kernel» con un nivel de «notificación». La segunda sección resaltada es un mensaje de la función «kernel» con un nivel de «información».

Es genial, pero ¿por qué?

En definitiva, la búsqueda de averías.

Si tiene problemas con una pieza de hardware que no se reconoce o se comporta incorrectamente, dmesg puede arrojar luz sobre el problema.

  • Usar dmesg para examinar los mensajes desde el nivel más alto a cada nivel más bajo, buscando errores o advertencias que mencionen el elemento de hardware o que pudieran afectar el problema.
  • Usar dmesg busque cualquier mención de la instalación adecuada para ver si contienen información útil.
  • Tubo dmesg mediante grep y busque cadenas o identificadores asociados, como el fabricante del producto o los números de modelo.
  • Tubo dmesg mediante grep y busque términos genéricos como «gpu» o «almacenamiento», o términos como «fallido», «fallido» o «incapaz».
  • Utilizar el --follow opción y reloj dmesg mensajes en tiempo real.

Buena cacería.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Experto Geek - Tu Guía en Tendencias Tecnológicas