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


답변:


178

상대적으로 최신 dmesg버전 은 다음과 같은 옵션 ( -w, --follow)을 제공합니다 tail -f.

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

$ dmesg -wH

( -H, --human색상과 같은 사용자 친화적 인 기능, 상대 시간을 가능)

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


2
좋은 발견! 젠투는 그라우트하지 -H않았지만 다른 방식으로 발견되었습니다.
unperson325680

사용자 공간 도구는 버전 2.22 이상이어야합니다. 우분투 사용자 버전 14.10 "utopic"기다릴 필요가
다니엘 알더

1
(아래) 시계를 사용할 필요가 - 우분투는 -w grok 수 없습니다
브렌트 파우스트

2
암호화 된 단일 문자 플래그 대신 --descriptively-named-flags를 사용하는 sysadmin 응답. 브라보 선생님 브라보.
allyourcode

1
-wUtopic (14.10)부터 모든 버전의 Ubuntu에서 작동합니다. ( launchpad.net/ubuntu/+source/util-linux/+publishinghistory는 초기 Utopic 패키지는 2.20에 대한 있었지만, 출시 된 시점에서 2.25에 도달 제안합니다.)
mwfearnley

54

watch이와 같은 것들을 위해 만들어진 명령을 사용할 수 있습니다

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

$((LINES-6))부분은 터미널에 잘 맞게해야한다.


2
큰 따옴표 대신 작은 따옴표를 사용하거나 달러 기호를 이스케이프하면 모든 호출에 대해 $ LINES의 새로운 값을 얻게되므로 터미널 크기를 변경하면 조정됩니다.
P Daddy

작은 따옴표는 변수 확장을 금지합니다. 또한이 예제에서는 변수가 호출 될 때 한 번만 확장됩니다 watch. 따라서 호출 사이에 실제로 변경되지는 않습니다 dmesg. 터미널 상태를 쿼리하는 래퍼를 사용해야합니다.
peterph

2
그게 요점입니다. 작은 따옴표는 쉘이 인수를에 전달할 때 변수 확장을 금지 watch하므로 watch는 변수 표현식을 사용하여 명령을 실행합니다.이 표현식은 호출하는 쉘에 의해 확장됩니다. 매번. 시도해보십시오.
P Daddy

흠, 당신은 옳습니다-uses이라고 가정 watch합니다 popen(). 즉, 다른 쉘이 생성되고 환경 변수가 제공됩니다 (따라서 모든 실행 실행마다 업데이트 됨). 좋은 발견.
peterph

12

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

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

그래서 당신은 다음과 같은 것을 할 수 있습니다 :

 tail -f /var/log/kern.log

/var/log/kern.log상당히 리눅스에 따라 다릅니다. OpenBSD (및 기타)의 경우 dmesg 항목은 / var / log / messages에 기록됩니다. 물론 다른 것들도 있습니다.
kurtm

2
tail -f /var/log/{messages,kernel,dmesg,syslog}수퍼 유저
여기서

9

dmesg커널의 로그 메시지를 얻는 데 사용 합니다.

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

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

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

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


//, 내가 사용하는 CEntOS 6 시스템에서 테일링 및 / proc / kmsg보기는 출력을 생성하지 않습니다. [~] $ sudo tail -f / proc / kmsg ♥ % [~] $ sudo cat / proc / kmsg ♥ % [~] $
Nathan Basanese

8

임베디드 시스템을 사용하는 경우 OpenWRT와 같은 시스템에서 공통적 인 비지 박스는 기능이 매우 제한되어 있으며 2-3 개의 플래그 만 지원됩니다.

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

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

Ctrl-C를 사용하여 루프를 종료 할 수 있습니다. sleep 1은 불필요하게 CPU의 타격을 막는 것입니다.


1
안드로이드 디버깅에 정말 유용합니다.
val

5

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

# journalctl -kf

1
우분투 14.10 : ➜ ~ journalctl -kf 저널 파일이 없습니다.
Nathan Basanese

0

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

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

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


//, 이것은 기본적으로 dmesg에게 test.txt에 출력을 추가하도록 지시합니다. 그리고 두 번째 명령은 그 test.txt 파일을 감시합니까?
Nathan Basanese

감사합니다 .. 예 .. 두 번째 명령은 dmesg에 대한 변경 사항을 감시합니다. cat / proc / kmsg는 비슷한 출력을 얻을 수 있지만 로그를 파일에 저장하지는 않습니다.
K_K September
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.