GNU/Linux >> Tutoriales Linux >  >> Linux

Comando dmesg de Linux - Imprimir búfer de anillo del kernel

Comando Dmesg imprime el búfer de mensajes del núcleo. El comando Dmesg se usa principalmente para identificar los dispositivos fallidos, dispositivos conectados en caliente como USB, errores de dispositivos de E/S.

Cuando el sistema arranca los controladores de dispositivos presentes en la configuración del kernel con dispositivos de hardware relevantes. En ese momento, los controladores y otros elementos con kernel producen mensajes. Estos mensajes se almacenan en un pequeño espacio de búfer y sobrescribirá cada uno cuando lleguen nuevos mensajes. La mayoría de las distribuciones de Linux almacenan estos mensajes en /var/log/dmesg. Dmesg lee directamente desde el búfer de anillo del kernel, no desde /var/log/dmesg. Syslog por defecto (depende de las distribuciones de Linux) o configurado para capturar mensajes.

Tiendas Dmesg mensajes del núcleo durante el arranque y después del arranque. Después del arranque, ocasionalmente el kernel genera mensajes cuando hay errores de io, dispositivos conectados, etc. Esos mensajes también se envían a la consola del sistema. La salida de Dmesg suele ser grande, se puede filtrar con los comandos more, tail o grep.

Cómo usar el comando dmesg

El comando Dmesg por defecto imprime N número de mensajes del búfer de anillo del kernel.

$ dmesg

Salida de muestra:

[    1.230638] kernel: Run /init as init process
 [    1.336492] kernel: scsi host0: Virtio SCSI HBA
 [    1.338612] kernel: scsi 0:0:0:0: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
 [    1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
 [    1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
 [    1.346920] kernel: ahci 0000:00:1f.2: version 3.0
 [    1.350864] kernel: scsi host1: Virtio SCSI HBA
 [    1.358377] kernel: scsi host2: Virtio SCSI HBA
 [    1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
 [    1.359718] kernel: scsi 1:0:1:2: Direct-Access     QEMU     QEMU HARDDISK    2.5+ PQ: 0 ANSI: 5
 [    1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
 [    1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt

La salida de Dmesg se divide principalmente en 3 partes:

  • Hora: Muestra el número de segundos desde el tiempo de arranque. Si encuentra 20.091730. Significa que el mensaje se crea 20 segundos después del tiempo de arranque.
  • Nombre_dispositivo: Mostrar el nombre del dispositivo
  • Mensajes: El mensaje real. Desde aquí, podemos analizar lo que sucedió.

1) Cómo leer dmesg

El comando Dmesg sin ninguna opción produce una gran salida. Para que sea más fácil de leer, use el comando grep o less para filtrar la salida. Veamos algunos ejemplos.

Imprimir salida dmesg por página

$ dmesg | less

Salida de muestra:

[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] NSC Geode by NSC
[ 0.000000] Cyrix CyrixInstead
[ 0.000000] Centaur CentaurHauls
[ 0.000000] Transmeta GenuineTMx86
[ 0.000000] Transmeta TransmetaCPU
[ 0.000000] UMC UMC UMC UMC

Imprimir información relacionada con eth

$ dmesg | grep eth

Salida de muestra:

[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready

Imprimir información relacionada con USB

$ dmesg | grep usb

Salida de muestra:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0

Tenga en cuenta que el comando grep es sensible a mayúsculas y minúsculas . es decir, del ejemplo anterior, "usb" y "USB" dan resultados diferentes. Para ignorar la característica de distinción entre mayúsculas y minúsculas, use el parámetro -i después del comando grep . Compare esta salida de comando con la carcasa USB anterior.

$ dmesg | grep -i usb

Salida de muestra:

[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver

Mostrar el resultado deseado usando cabeza/cola

Por ejemplo, ha insertado un dispositivo extraíble o ha realizado cambios en cualquier volumen de disco. Para verificar las últimas entradas de dmesg usando la cola comando.

Para mostrar las últimas N líneas del registro dmesg:

$ dmesg | tail -15

De manera similar, para encontrar las primeras líneas de dmesg log, use el comando head. Esto será útil para encontrar los cambios que ocurrieron justo después de arrancar.

$ dmesg | head -15

Monitoreo en tiempo real

Para monitoreo continuo en tiempo real use la opción -f .

$ tail -f /var/log/dmesg

Alternativa, use watch dmesg:

$ watch "dmesg | tail -15"

Algunos sistemas Linux admiten el uso de dmesg -w, que esperará nuevos mensajes.

2) Imprimir en formato legible por humanos

Para imprimir la salida de dmesg en un formato legible por humanos, use la opción -H.

$ dmesg -H

3) Convertir la marca de tiempo a un formato de fecha personalizado

De forma predeterminada, la marca de tiempo de la salida dmesg no es legible por humanos. Para cambiar la marca de tiempo a la opción de uso de formato de fecha personalizado - -ctime o -T.

$ dmesg  --ctime

Salida de muestra:

[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff

También puede usar --time-format para imprimir marcas de tiempo usando el formato dado, que puede ser ctime, reltime, delta o iso.

Si la marca de tiempo no está habilitada entonces el comando dmesg puede no mostrar la marca de tiempo en la salida.

Para verificar si las marcas de tiempo están habilitadas o no, abra el archivo /sys/module/printk/parameters/time:

$ cat /sys/module/printk/parameters/time
N

Si el contenido del archivo es N, la marca de tiempo no está habilitada. Puede ejecutar el siguiente comando para habilitar la marca de tiempo:

$ echo Y > /sys/module/printk/parameters/time

4) Borrar dmesg

Para borrar los mensajes del búfer de anillo del núcleo, utilice la opción -C.

$ dmesg -C

Para borrar el búfer circular después de imprimir su contenido, utilice la opción -c.

$ dmesg -c

Incluso si borra dmesg usando los parámetros -c o -C, aún puede ver los registros en /var/log/kern.log o /var/log/dmesg.

5) Impedir que Dmesg inicie sesión en la consola

Para deshabilitar la impresión de mensajes a la consola use la opción -D.

$ dmesg -D

La opción alternativa es usar -n 1 para evitar que todos los mensajes, excepto los mensajes de emergencia (pánico), aparezcan en la consola.

Para habilitar la impresión de mensajes en la consola, use -E.

$ dmesg -E

6) Mostrar mensajes específicos de la instalación

Para imprimir mensajes de una categoría o instalación específica. Para cumplir con este propósito, utilice la opción --facility.

Del ejemplo para imprimir un mensaje específico de correo, escriba:

$ dmesg --facility=daemon

Servicios de registro admitidos son:

kern - mensajes del núcleo
usuario:mensajes aleatorios a nivel de usuario
correo - sistema de correo
demonio - demonios del sistema
auth - mensajes de seguridad/autorización
syslog:mensajes generados internamente por syslogd
lpr - subsistema de impresora de línea
noticias - subsistema de noticias de la red

7) Imprimir nivel de registro

Para imprimir mensajes específicos del nivel de registro, use la opción --level. Por ejemplo, para imprimir todos los mensajes de advertencia, ejecute el siguiente comando:

$ dmesg --level=warn

Salida de muestra:

[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr

Niveles de registro admitidos son:

emerg - el sistema no se puede usar
alerta:se deben tomar medidas de inmediato
crit - condiciones críticas
err - condiciones de error
advertir - condiciones de advertencia
aviso - condición normal pero significativa
información - informativo
depuración:mensajes de nivel de depuración

8) Facilidad de visualización y nivel en lenguaje humano

Para imprimir la instalación y el nivel de registro en un formato legible por humanos, utilice la opción -x.

$ dmesg -x

Salida de muestra:

kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.

9) Imprimir mensaje del kernel

Para imprimir mensajes específicos del kernel, use la opción -k.

$ dmesg -k

10) Ignorar marca de tiempo

Si no desea imprimir la marca de tiempo del kernel, use la opción -t.

$ dmesg -t

Conclusión

Dmesg puede ser muy útil para diagnosticar problemas relacionados con el sistema. En este tutorial, aprendimos a usar el comando dmesg en Linux.


Linux
  1. comando linux mv

  2. Linux du comando

  3. Comando IP de Linux

  4. Ejemplos de comandos dmesg en Linux

  5. Ejemplos de comandos lpr en Linux

Comando Modprobe en Linux

Comando Sysctl en Linux

Tutorial del comando dmesg de Linux para principiantes (5 ejemplos)

Comando id de Linux - Imprimir información de ID de usuario e ID de grupo

Comando sysctl en Linux

3 formas de comprobar la versión del kernel de Linux en la línea de comandos