wake-up-neo.com

dmesg 출력이 변경되면 어떻게 볼 수 있습니까?

오류 메시지를 ring buffer dmesg 출력으로 인쇄하는 장치 드라이버를 작성 중입니다. dmesg의 출력이 변경됨을보고 싶습니다.

어떻게해야합니까?

154
Milad Khajavi

비교적 최근의 dmesg 버전 추종 옵션 제공 (-w, --follow) tail -f와 유사하게 작동합니다.

따라서 다음 명령을 사용하십시오.

$ dmesg -wH

(-H, --human는 색상, 상대 시간과 같은 사용자 친화적 인 기능을 지원합니다)

이러한 옵션은 예를 들어 Fedora 19에서 사용할 수 있습니다.

194
maxschlepzig

이와 같은 것들을위한 watch 명령을 사용할 수 있습니다

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

$((LINES-6)) 부분은 터미널에 잘 맞아야합니다.

57
peterph

실제로 dmesg의 출력을 직접 모니터링 할 수는 없습니다.

그러나 모듈이 dmesg의 링 버퍼에 직접 인쇄되지 않고 대신 커널 로깅 기능을 사용하게 될 가능성이 높습니다 (dmesg로 표시됨). syslog에 정상 (예 : 기본) 설정이있는 경우 이러한 메시지는 kern.log 로그 파일.

따라서 다음과 같은 작업을 수행 할 수 있습니다.

 tail -f /var/log/kern.log
12
umläute

dmesg를 사용하여 커널의 로그 메시지를 가져옵니다.

커널 자체는 링 버퍼, 즉 메모리에 로그인합니다. 이제 모든 dmesg는 그 링 버퍼의 내용을 출력합니다. dmesg -c를 수행하면 나중에 링 버퍼도 삭제됩니다.

따라서 while true; do dmesg -c; sleep 1; done와 같이 작동하지 않는 dmesg|tail와 같은 것을 수행 할 수 있습니다. 그러나 이것은 링 버퍼를 삭제하므로 루트 파워가 필요합니다.

다른 방법은 링 버퍼에서 볼 수있는 파일 /proc/kmsg입니다. tail -f /proc/kmsg를 수행 할 수 있지만 이는 한 프로세스에만 허용되며 일반적으로 로깅 데몬입니다. -메시지를 읽고 읽을 수있는 실제 파일 (보통/var/log에)에 기록하는 것이 직업입니다. 모든 메시지를 단일 파일로 출력하거나 다른 부분을 다른 파일로 출력하도록 구성 할 수 있습니다. (그러나 구성은 시스템의 로깅 데몬에 따라 다릅니다.)

따라서 필요에 맞는 파일이 있으면 /var/log를보고 로깅 데몬을 구성하십시오.

10
michas

OpenWrt 와 같은 시스템에서 일반적으로 사용되는 BusyBox 와 같은 내장 시스템을 사용하는 경우 기능이 매우 제한되어 있으며 2-3 개의 플래그 만 지원됩니다.

이벤트가 변경 될 때 화면에 dmesg 출력을 빠르고 더러운 방식으로 계속 인쇄하려면 간단한 Bash 루프가 제대로 작동합니다. 이상적이지는 않지만 BusyBox dmesg에 많은 기능이 없습니다. 커맨드 라인에 입력하면 다음과 같은 효과가 있습니다.

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

당신은 루프를 종료 할 수 있습니다 Ctrl + C. 휴면 1은 불필요하게 CPU를 타격하는 것을 멈추고 -c 플래그는 각 호출에서 버퍼를 지우므로 매 초마다 반복되는 출력이 표시되지 않습니다.

8
user241342

systemd를 사용하는 시스템에서 다음을 수행 할 수도 있습니다.

# journalctl -kf
5
Maxim

별도의 터미널에서이 두 명령을 사용하십시오.

  1. while true; do dmesg -c >> test.txt;sleep 1; done
  2. tail -f test.txt

비슷한 결과를 얻을 수 있습니다.

0
K_K