Como usar o comando dmesg no Linux

Um prompt de terminal estilizado em um laptop Linux.
Fatmawati Achmad Zaenuri / Shutterstock

O dmesgcomando permite que você perscrute o mundo oculto dos processos de inicialização do Linux. Revise e monitore o dispositivo de hardware e as mensagens do driver do buffer de anel do próprio kernel com o “amigo do localizador de falhas”.

Como funciona o Ring Buffer do Linux

Em computadores Linux e semelhantes ao Unix, a inicialização e a inicialização são duas fases distintas da sequência de eventos que ocorrem quando o computador é ligado.

Os processos de inicialização ( BIOS ou UEFI , MBR e GRUB ) levam a inicialização do sistema ao ponto em que o kernel é carregado na memória e conectado ao ramdisk inicial ( initrd ou initramfs ) e o systemd é iniciado.

Os processos de inicialização então pegam o bastão e completam a inicialização do sistema operacional. Nos estágios iniciais da inicialização, os daemons de registro, como syslogd  ou rsyslogd, ainda não estão ativos e em execução. Para evitar a perda de mensagens de erro e avisos notáveis ​​dessa fase de inicialização, o kernel contém um buffer em anel que usa como armazenamento de mensagens.

Um buffer de anel é um espaço de memória reservado para mensagens. Tem um design simples e um tamanho fixo. Quando estiver cheio, as mensagens mais recentes substituem as mensagens mais antigas. Conceitualmente, pode ser considerado um ” buffer circular “.

O buffer de anel do kernel armazena informações como as mensagens de inicialização dos drivers de dispositivo, mensagens do hardware e mensagens dos módulos do kernel. Por conter essas mensagens de inicialização de baixo nível, o buffer de anel é um bom lugar para iniciar uma investigação de erros de hardware ou outros problemas de inicialização.

Mas não vá de mãos vazias. Leve  dmesgcom você.

O Comando dmesg

O dmesgcomando permite que você reveja as mensagens armazenadas no buffer de anel . Por padrão, você precisa usar sudopara usar dmesg.

sudo dmesg

sudo dmesg em uma janela de terminal

Todas as mensagens no buffer de anel são exibidas na janela do terminal.

Saída de sudo dmesg em uma janela de terminal

Aquilo foi um dilúvio. Obviamente, o que nós precisamos fazer é tubulação -lo através de less:

sudo dmesg | Menos

sudo dmesg |  menos em uma janela de terminal

Agora podemos percorrer as mensagens em busca de itens de interesse.

saída dmesg em menos em uma janela de terminal

Você pode usar a função de pesquisa lesspara localizar e destacar itens e termos de seu interesse. Inicie a função de pesquisa pressionando a tecla de barra “/” em less.

Removendo a necessidade de sudo

Se você quiser evitar ter que usar sudocada vez que usar dmesg, pode usar este comando. Mas, fique atento: ele permite que qualquer pessoa com uma conta de usuário no seu computador use dmesgsem precisar usar sudo.

sudo sysctl -w kernel.dmesg_restrict = 0

sudo sysctl -w kernel.dmesg_restrict = 0 em uma janela de terminal

Forçando saída de cor

Por padrão, dmesgprovavelmente será configurado para produzir saída colorida. Se não for, você pode dizer dmesgpara colorir sua saída usando a -Lopção (cor).

sudo dmesg -L

sudo dmesg -L em uma janela de terminal

Para forçar o dmesgpadrão sempre para uma tela colorida, use este comando:

sudo dmesg --color = always

sudo dmesg --color = sempre em uma janela de terminal

Human Timestamps

Por padrão, dmesguse uma notação de carimbo de data / hora de segundos e nanossegundos desde que o kernel foi iniciado. Para que isso seja renderizado em um formato mais amigável, use a -Hopção (humano).

sudo dmesg -H

sudo dmesg -H em uma janela de terminal

Isso faz com que duas coisas aconteçam.

Recomendado:  Como girar vídeos em um Mac

saída de sudo dmesg -H em janela de terminal

  • A saída é exibida automaticamente em less.
  • Os carimbos de data / hora mostram um carimbo de data e hora com a data e hora, com resolução de minuto. As mensagens que ocorreram a cada minuto são rotuladas com os segundos e nanossegundos desde o início desse minuto.

Timestamps legíveis por humanos

Se você não precisar de precisão de nanossegundos, mas quiser carimbos de data / hora mais fáceis de ler do que os padrões, use a opção -T(legível por humanos). (É um pouco confuso. -HÉ a opção “humana”, -Té a opção “legível por humanos”.)

sudo dmesg -T

sudo dmesg -T em uma janela de terminal

Os carimbos de data / hora são renderizados como datas e horas padrão, mas a resolução é reduzida para um minuto.

saída de sudo dmesg -T em uma janela de terminal

Tudo o que aconteceu em um único minuto tem o mesmo carimbo de data / hora. Se você só se preocupa com a sequência de eventos, isso é bom o suficiente. Além disso, observe que você é descarregado de volta no prompt de comando. Esta opção não invoca automaticamente less.

Assistir a eventos ao vivo

Para ver as mensagens à medida que chegam ao buffer de anel do kernel, use a opção --follow (aguardar mensagens). Essa frase pode parecer um pouco estranha. Se o buffer de anel for usado para armazenar mensagens de eventos que ocorrem durante a sequência de inicialização, como as mensagens ao vivo podem chegar ao buffer de anel depois que o computador está funcionando?

Qualquer coisa que cause uma mudança no hardware conectado ao seu computador fará com que mensagens sejam enviadas ao buffer de anel do kernel. Atualize ou adicione um módulo de kernel e você verá mensagens de buffer de anel sobre essas mudanças. Se você conectar uma unidade USB ou conectar ou desconectar um dispositivo Bluetooth, verá mensagens na dmesgsaída. Mesmo o hardware virtual fará com que novas mensagens apareçam no buffer de anel. Abra uma máquina virtual e você verá novas informações chegando ao buffer de anel.

sudo dmesg --seguir

sudo dmesg - seguir em uma janela de terminal

Observe que você não retornou ao prompt de comando. Quando novas mensagens aparecem, elas são exibidas dmesg na parte inferior da janela do terminal.

Recomendado:  Como usar o teclado na tela no Windows 7, 8 e 10

Saída de sudo dmesg --follow na janela do terminal

Até mesmo montar um disco de CD-ROM é visto como uma mudança, porque você inseriu o conteúdo do disco de CD-ROM na árvore de diretórios.

Mensagens de buffer de anel dmesg como resultado da montagem de um disco CD-ROM

Para sair do feed em tempo real, pressione Ctrl+C.

Recupere as últimas dez mensagens

Use o comando tail para recuperar as últimas dez  mensagens do ring buffer do kernel. Claro, você pode recuperar qualquer número de mensagens. Dez é apenas nosso exemplo.

sudo dmesg | último -10

sudo dmesg |  último -10 em uma janela de terminal

As últimas dez mensagens são recuperadas e listadas na janela do terminal.

Saída de sudo dmsesg |  cauda -10 em uma janela de terminal

Pesquisando Termos Específicos

Canalizar a saída do dmesgmeio grep de pesquisa para determinadas cordas ou padrões . Aqui, estamos usando a opção -i(ignorar maiúsculas e minúsculas) para que a capitalização de strings correspondentes seja desconsiderada. nossos resultados incluirão “usb” e “USB” e qualquer outra combinação de minúsculas e maiúsculas.

sudo dmesg | grep -i usb

sudo dmesg |  grep -i usb em uma janela de terminal

Os resultados da pesquisa destacados estão em maiúsculas e minúsculas.

Resultados da pesquisa mostrando resultados em maiúsculas e minúsculas em uma janela de terminal

Podemos isolar as mensagens que contêm referências ao primeiro disco rígido SCSI do sistema sda. (Na verdade, sdatambém é usado hoje em dia para o primeiro disco rígido SATA e para drives USB.)

sudo dmesg | grep -i sda

sudo dmesg |  grep -i sda em uma janela de terminal

Todas as mensagens mencionadas sdasão recuperadas e listadas na janela do terminal.

saída de sudo dmesg |  grep -i sda em uma janela de terminal

Para fazer a grepbusca por vários termos de uma vez, use a opção -E(estender expressão regular). Você deve fornecer os termos de pesquisa dentro de uma string entre aspas com barra vertical “|” delimitadores entre os termos de pesquisa:

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

sudo dmesg |  grep -E "memory | tty | dma" em uma janela de terminal

Qualquer mensagem que mencione qualquer um dos termos de pesquisa é listada na janela do terminal.

saída de sudo dmesg |  grep -E "memory | tty | dma" em uma janela de terminal

Usando níveis de registro

Cada mensagem registrada no buffer de anel do kernel tem um nível anexado a ela. O nível representa a importância das informações na mensagem. Os níveis são:

  • emerg : Sistema inutilizável.
  • alerta : A ação deve ser tomada imediatamente.
  • crit : Condições críticas.
  • err : Condições de erro.
  • avisar : Condições de aviso.
  • aviso : condição normal, mas significativa.
  • info : Informativo.
  • debug : mensagens de nível de depuração.
Recomendado:  Como abrir e navegar em arquivos ZIP no macOS sem desarquivá-los

Podemos dmesgextrair mensagens que correspondam a um determinado nível usando a -lopção (nível) e passando o nome do nível como um parâmetro de linha de comando. Para ver apenas mensagens de nível “informativo”, use este comando:

sudo dmesg -l info

sudo dmesg -l info em uma janela de terminal

Todas as mensagens listadas são mensagens informativas. Eles não contêm erros ou avisos, apenas notificações úteis.

Saída de informações sudo dmesg -l em uma janela de terminal

Combine dois ou mais níveis de registro em um comando para recuperar mensagens de vários níveis de registro:

sudo dmesg -l debug, aviso

sudo dmesg -l debug, observe em uma janela de terminal

A saída dmesgé uma mistura de mensagens de cada nível de registro:

Saída de sudo dmesg -l debug, observe em uma janela de terminal

As categorias de instalações

As dmesgmensagens são agrupadas em categorias chamadas “instalações”. A lista de instalações é:

  • kern : mensagens do kernel.
  • usuário : mensagens no nível do usuário.
  • mail : sistema de correio.
  • daemon : daemons do sistema.
  • auth : Mensagens de segurança / autorização.
  • syslog : Mensagens syslogd internas.
  • lpr : Subsistema de impressora de linha.
  • notícias : subsistema de notícias da rede.

Podemos pedir dmesgpara filtrar sua saída para mostrar apenas mensagens em uma instalação específica. Para fazer isso, devemos usar a -fopção (facilidade):

sudo dmesg -f daemon

sudo dmesg -f daemon em uma janela de terminal

dmesg lista todas as mensagens relacionadas aos daemons na janela do terminal.

saída do sudo dmesg -f daemon em uma janela de terminal

Como fizemos com os níveis, podemos pedir dmesgpara listar mensagens de mais de uma instalação ao mesmo tempo:

sudo dmesg -f syslog, daemon

sudo dmesg -f syslog, daemon em uma janela de terminal

A saída é uma mistura de mensagens de log do syslog e daemon.

saída de sudo dmesg -f syslog, daemon em uma janela de terminal

Combinando Instalações e Nível

A -xopção (decodificar) dmesgmostra a facilidade e o nível como prefixos legíveis para cada linha.

sudo dmesg -x

sudo dmesg -x em uma janela de terminal

A instalação e o nível podem ser vistos no início de cada linha:

Saída de sudo dmesg -x em uma janela de terminal

A primeira seção destacada é uma mensagem do recurso “kernel” com um nível de “aviso”. A segunda seção destacada é uma mensagem do recurso “kernel” com um nível de “informação”.

Isso é ótimo, mas por quê?

Em suma, localização de falhas.

Se você está tendo problemas com uma peça de hardware não sendo reconhecida ou não se comportando corretamente, dmesgpode lançar alguma luz sobre o problema.

  • Use dmesgpara revisar as mensagens do nível mais alto até cada nível inferior, procurando por erros ou avisos que mencionem o item de hardware ou que possam ter uma relação com o problema.
  • Use dmesgpara pesquisar qualquer menção à instalação apropriada  para ver se eles contêm alguma informação útil.
  • Tubo dmesgatravés de grepe olhar para relacionadas cordas ou identificadores , como fabricante do produto ou números de modelo.
  • Tubo dmesgatravés de grepe olhar para termos genéricos como “gpu” ou “armazenamento”, ou termos como “fracasso”, “não” ou “não”.
  • Use a --followopção e veja as dmesgmensagens em tempo real.

Caçada feliz.