El dmesg
le permite mirar en el mundo oculto de los procesos de inicio de Linux. Revise y supervise los mensajes de dispositivos y controladores de hardware desde el propio búfer de anillo del kernel con “el amigo del buscador de fallas”.
¿De qué vamos a hablar?
- 1 Cómo funciona el búfer de anillo de Linux
- 2 El comando dmesg
- 3 Eliminando la necesidad de sudo
- 4 Forzar la salida de color
- 5 Marcas de tiempo humanas
- 6 Marcas de tiempo legibles por humanos
- 7 Ver eventos en vivo
- 8 Recuperar los últimos diez mensajes
- 9 Búsqueda de términos específicos
- 10 Uso de niveles de registro
- 11 Las categorías de instalaciones
- 12 Combinando instalación y nivel
- 13 Eso es genial, pero ¿por qué?
Cómo funciona el búfer de anillo de Linux
En las computadoras Linux y Unix, el arranque y el inicio son dos fases distintas de la secuencia de eventos que tienen lugar cuando la computadora está encendida.
El procesos de arranque (BIOS o UEFI, MBR (en insy LARVA) lleve la inicialización del sistema al punto en que el núcleo se carga en la memoria y se conecta al ramdisk inicial (initrd o initramfs), y systemd se inicia.
El procesos de inicio luego recoge el testigo y completa la inicialización del sistema operativo. En las primeras etapas de la inicialización, los demonios de registro como syslogd o rsyslogd aún no están en funcionamiento. Para evitar perder mensajes de error notables y advertencias de esta fase de inicialización, el kernel contiene un búfer de anillo que utiliza como almacén de mensajes.
Un búfer de anillo es un espacio de memoria reservado para los mensajes. Es simple en diseño, y de un tamaño fijo. Cuando está lleno, los mensajes más nuevos sobrescriben los mensajes más antiguos. Conceptualmente se puede pensar como un “búfer circular.”
El búfer de anillo del kernel almacena información como los mensajes de inicialización de los controladores de dispositivo, los mensajes del hardware y los mensajes de los módulos del kernel. Debido a que contiene estos mensajes de inicio de bajo nivel, el búfer de anillo es un buen lugar para iniciar una investigación sobre errores de hardware u otros problemas de inicio.
Pero no te vayas con las manos vacías. Tomar dmesg
contigo.
El comando dmesg
El dmesg
comando le permite Para revisar los mensajes almacenados en el búfer de anillo. De forma predeterminada, debe usar sudo
utilizar dmesg
.
sudo dmesg
Todos los mensajes en el búfer de anillo se muestran en la ventana del terminal.
Eso fue un diluvio. Obviamente, lo que tenemos que hacer es canalizarlo a través de él. less
:
sudo dmesg | less
Ahora podemos desplazarnos por los mensajes en busca de elementos de interés.
Puede utilizar la función de búsqueda dentro de less
para localizar y resaltar elementos y términos que te interesan. Inicie la función de búsqueda presionando la tecla de barra diagonal “/” en less
.
Eliminando la necesidad de sudo
Si quieres evitar tener que usar sudo
cada vez que utilice dmesg
, puede utilizar este comando. Pero, tenga en cuenta: 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 la salida de color
De forma predeterminada, dmesg
probablemente se configurará para producir salida de color. Si no lo es, puedes decirlo dmesg
Para colorear su salida mediante el -L
opción (color).
sudo dmesg -L
Para forzar dmesg
para establecer siempre de forma predeterminada una pantalla coloreada, utilice este comando:
sudo dmesg --color=always
Marcas de tiempo humanas
De forma predeterminada, dmesg
utilizar una notación de marca de tiempo de segundos y Nanosegundos desde que comenzó el kernel. Para que esto se represente en un formato más amigable para los humanos, use el -H
opción (humana).
sudo dmesg -H
Esto hace que sucedan 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 de minutos. Los mensajes que ocurrieron en cada minuto se etiquetan con los segundos y nanosegundos desde el comienzo de ese minuto.
Marcas de tiempo legibles por humanos
Si no necesita precisión de nanosegundos, pero desea marcas de tiempo que sean más fáciles de leer que las predeterminadas, use el -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 solo minuto tiene la misma marca de tiempo. Si todo lo que te molesta es la secuencia de eventos, esto es lo suficientemente bueno. Además, tenga en cuenta que se le devuelve en el símbolo del sistema. Esta opción no invoca 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
(esperar mensajes) opción. Esa frase puede parecer un poco extraña. Si el búfer de anillo se utiliza para almacenar mensajes de eventos que tienen lugar durante la secuencia de inicio, ¿cómo pueden llegar los mensajes en vivo al búfer de anillo una vez que el equipo está en funcionamiento?
Cualquier cosa que cause 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 de timbre sobre esos cambios. Si conectas una unidad USB o conectas o desconectas un dispositivo Bluetooth, verás mensajes en el dmesg
salida. Incluso el hardware virtual hará que aparezcan nuevos mensajes en el búfer de anillo. Encienda una máquina virtual y verá nueva información que llega al búfer de anillo.
sudo dmesg --follow
Tenga en cuenta que no se le devuelve al símbolo del sistema. Cuando aparecen nuevos mensajes, se muestran por dmesg
en la parte inferior de la ventana del terminal.
Incluso montar un disco CD-ROM se ve como un cambio, porque ha injertado el contenido del disco CD-ROM en el árbol de directorios.
Para salir de la fuente en tiempo real, presiona Ctrl+C
.
Recuperar los últimos diez mensajes
Usar el comando tail Para recuperar los últimos diez mensajes de búfer de anillo del kernel. 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.
Búsqueda de términos específicos
Canalizar la salida desde dmesg
a través de grep
Para buscar cadenas o patrones concretos. Aquí estamos usando el -i
(ignorar mayúsculas y minúsculas) para que no se tenga en cuenta el caso de las cadenas coincidentes. nuestros resultados incluirán “usb” y “USB” y cualquier otra combinación de minúsculas y mayú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 al primero 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 unidades USB.)
sudo dmesg | grep -i sda
Todos los mensajes que mencionan sda
se recuperan y se enumeran en la ventana del terminal.
Para hacer grep
busque varios términos a la vez, utilice el cuadro -E
(extender la expresión regular) opción. Debe proporcionar los términos de búsqueda dentro de una cadena entrecomillada con delimitadores de tubería “|” entre los términos de búsqueda:
sudo dmesg | grep -E "memory|tty|dma"
Cualquier mensaje que mencione cualquiera de los términos de búsqueda aparece en la ventana del terminal.
Uso de niveles de registro
Cada mensaje registrado en el búfer de anillo del kernel tiene un nivel adjunto. El nivel representa la importancia de la información en el mensaje. Los niveles son:
- emerger: El sistema es inutilizable.
- alerta: Se deben tomar medidas de inmediato.
- Crit: Condiciones críticas.
- errar: Condiciones de error.
- advertir: Condiciones de advertencia.
- notar: Condición normal pero significativa.
- información: Informativo.
- depurar: Mensajes de nivel de depuración.
Podemos hacer dmesg
Extraer mensajes que coincidan con un nivel determinado mediante el método -l
(level) y pasar el nombre del nivel como parámetro de línea de comandos. Para ver sólo los mensajes de nivel “informativo”, utilice este comando:
sudo dmesg -l info
Todos los mensajes que se enumeran son mensajes informativos. No contienen errores ni advertencias, solo notificaciones útiles.
Combine dos o más niveles de registro en un comando para recuperar mensajes de varios niveles de registro:
sudo dmesg -l debug,notice
El resultado de dmesg
es una mezcla de mensajes de cada nivel de registro:
Las categorías de instalaciones
El dmesg
los mensajes se agrupan en categorías denominadas “instalaciones”. La lista de instalaciones es:
- Kern: Mensajes del kernel.
- usuario: Mensajes a nivel de usuario.
- correo: Sistema de correo.
- demonio: Demonios del sistema.
- Auth: Mensajes de seguridad/autorización.
- syslog: Mensajes syslogd internos.
- Lpr: Subsistema de impresora de línea.
- noticia: Subsistema de noticias de red.
Podemos preguntar dmesg
para filtrar su salida para mostrar solo mensajes en una instalación específica. Para ello, debemos utilizar el -f
opción (instalación):
sudo dmesg -f daemon
dmesg
enumera todos los mensajes relacionados con los demonios en la ventana del terminal.
Como nosotros hecho con los niveles, podemos preguntar dmesg
para enumerar mensajes de más de una instalación a la vez:
sudo dmesg -f syslog, daemon
El resultado es una mezcla de mensajes de registro de syslog y daemon.
Combinando instalación y nivel
El -x
(decodificar) la opción hace dmesg
mostrar la instalación y el nivel como prefijos legibles por humanos para cada línea.
sudo dmesg -x
La instalación y el nivel se pueden ver al comienzo de cada línea:
La primera sección resaltada es un mensaje de la función “kernel” con un nivel de “aviso”. La segunda sección resaltada es un mensaje de la función “kernel” con un nivel de “info”.
Eso es genial, pero ¿por qué?
En pocas palabras, la búsqueda de fallas.
Si tiene problemas con una pieza de hardware que no se reconoce o no se comporta correctamente, dmesg
puede arrojar algo de luz sobre el tema.
- Uso
dmesg
Para revisar los mensajes de la parte superior nivel a través de cada nivel inferior, buscando cualquier error o advertencia que mencione el elemento de hardware, o que pueda tener relación con el problema. - Uso
dmesg
para buscar cualquier mención de la facilidad para ver si contienen alguna información útil. - Pipa
dmesg
a través degrep
y busca relacionados cadenas o identificadores como el fabricante del producto o los números de modelo. - Pipa
dmesg
a través degrep
y busca términos genéricos como “gpu” o “almacenamiento”, o términos como “fallo”, “fallido” o “incapaz”. - Utilice el
--follow
opción y verdmesg
mensajes en tiempo real.
Feliz caza.