O que é o dmesg?

O dmesg exibe o buffer de mensagens do kernel -- o ring buffer. Aqui ficam registradas mensagens de boot, detecção de hardware, erros de drivers e eventos do kernel.

dmesg básico

dmesg | head -20
[    0.000000] Linux version 6.8.0-45-generic (buildd@lcy02-amd64-080)
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-6.8.0-45-generic root=/dev/sda1 ro quiet
[    0.000000] BIOS-provided physical RAM map:
[    0.000000]  BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
[    0.031284] CPU: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
[    0.031284] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
[    0.045102] Memory: 16330480K/16777216K available

Os números entre colchetes são segundos desde o boot.

dmesg -T: timestamps legíveis

O formato padrão mostra segundos desde o boot. Para ver data e hora reais:

dmesg -T | tail -10
[Sex Mar 27 09:15:22 2026] usb 2-1: new high-speed USB device number 3 using xhci_hcd
[Sex Mar 27 09:15:22 2026] usb 2-1: New USB device found, idVendor=0781, idProduct=5567
[Sex Mar 27 09:15:22 2026] usb-storage 2-1:1.0: USB Mass Storage device detected
[Sex Mar 27 09:15:23 2026] sd 2:0:0:0: [sdb] 30031872 512-byte logical blocks: (15.4 GB/14.3 GiB)
Dica: O flag -T pode apresentar timestamps imprecisos após suspend/resume. Use journalctl -k para timestamps confiáveis.

dmesg --level: filtrar por severidade

O kernel classifica mensagens em níveis de severidade:

NívelNomeDescrição
0emergSistema inutilizável
1alertAção imediata necessária
2critCondição crítica
3errErro
4warnAviso
5noticeCondição normal significativa
6infoInformacional
7debugDebug
# Apenas erros
dmesg --level=err
[    2.451023] ACPI BIOS Error (bug): Could not resolve symbol...
[   45.891204] EXT4-fs error (device sda1): ext4_lookup:1855: inode #131073
# Erros e avisos juntos
dmesg --level=err,warn
# Tudo até nível warn (0-4)
dmesg -l 0..4

Filtrando por dispositivo ou subsistema

Use grep para filtrar mensagens de um dispositivo específico:

# Mensagens sobre USB
dmesg -T | grep -i usb
# Mensagens sobre discos
dmesg -T | grep -i "sd[a-z]"
[Sex Mar 27 08:00:05 2026] sd 0:0:0:0: [sda] 976773168 512-byte logical blocks: (500 GB/465 GiB)
[Sex Mar 27 08:00:05 2026] sd 0:0:0:0: [sda] Write cache: enabled
[Sex Mar 27 08:00:05 2026]  sda: sda1 sda2 sda3
# Mensagens de rede
dmesg -T | grep -iE "eth|ens|enp|wlan|net"

Filtrando por facilidade

# Apenas mensagens do kernel (sem userspace)
dmesg --facility=kern

Monitorando em tempo real

Para acompanhar novas mensagens do kernel (útil ao plugar dispositivos):

dmesg -Tw

O -w (watch) mantém o dmesg aberto esperando novas mensagens. O -T formata os timestamps. Pressione Ctrl+C para sair.

journalctl -k: alternativa moderna

O journalctl -k mostra as mesmas mensagens do kernel, mas com timestamps precisos e integração com o journal do systemd:

# Mensagens do kernel do boot atual
journalctl -k
# Mensagens do kernel do boot anterior
journalctl -k -b -1
# Apenas erros do kernel
journalctl -k -p err
# Seguir em tempo real (equivale a dmesg -Tw)
journalctl -kf
Dica: Em investigações de hardware, combine dmesg -Tw em um terminal e conecte/desconecte o dispositivo. As mensagens aparecem instantaneamente.

Limpar o buffer

Em sessões de diagnóstico, pode ser útil limpar o buffer para ver apenas mensagens novas:

# Limpar o ring buffer
sudo dmesg -C

# Agora apenas novas mensagens aparecerão
dmesg

Resumo dos comandos

# Mensagens do kernel com timestamps legíveis
dmesg -T

# Apenas erros
dmesg --level=err

# Erros e avisos
dmesg --level=err,warn

# Filtrar por dispositivo
dmesg -T | grep -i usb

# Monitorar em tempo real
dmesg -Tw

# Alternativa via journalctl
journalctl -k
journalctl -k -p err
journalctl -kf