Como posso ver a saída do dmesg conforme ela muda?

Como posso ver a saída do dmesg conforme ela muda?

Estou escrevendo um driver de dispositivo que imprime uma mensagem de errobuffer de anelsaída dmesg. Quero ver a saída dmesgconforme ela muda.

Como posso fazer isso?

Responder1

dmesgVersões relativamente recentesforneça uma opção de seguir( -w, --follow) que funciona de forma análoga a tail -f.

Assim, basta usar o seguinte comando:

$ dmesg -wH

( -H, --humanpermite recursos fáceis de usar, como cores, tempo relativo)

Essas opções estão disponíveis, por exemplo, no Fedora 19.

Responder2

Você pode usar o watchcomando que se destina exatamente a coisas como esta

watch -n 0.1 "dmesg | tail -n $((LINES-6))"

a $((LINES-6))peça deve caber perfeitamente em seu terminal.

Responder3

Você realmente não pode monitorar a saída dmesgdiretamente.

No entanto, há grandes chances de que seu módulo não esteja imprimindo diretamente no buffer de anel do dmesg, mas use os recursos de registro do kernel (que serão exibidos por dmesg). Se você syslogtiver algumas configurações sensatas (por exemplo, padrão), essas mensagens provavelmente também aparecerão no kern.logarquivo de log.

Então você pode fazer algo como:

 tail -f /var/log/kern.log

Responder4

Se você estiver usando um sistema embarcado, comoOcupadoBoxisso é comum em sistemas comoOpenWrt, ele tem funcionalidade muito limitada e apenas 2 a 3 sinalizadores são suportados.

Se você deseja uma maneira rápida e suja de imprimir a saída do dmesg na tela continuamente à medida que os eventos mudam, um simples loop Bash funciona bem. Não é o ideal, mas como mencionei, faltam muitas funções no dmesg do BusyBox. Acho que o seguinte tem o mesmo efeito quando inserido na linha de comando:

$ while true; do dmesg -c ; sleep 1 ; done

Você pode sair do loop com Ctrl+ C. O sleep 1 serve para impedir que ele atinja a CPU desnecessariamente, e o sinalizador -c limpa o buffer em cada chamada para que você não veja resultados repetidos a cada segundo.

informação relacionada