Post

[Linux] dmesg Command

dmesg

dmesg명령어는 리눅스에서 시스템 부팅 시점부터 발생한 커널 관련 메세지를 출력하는 명령어이다. 주로 시스템 로그, 부팅 과정, 장치의 상태 및 드라이버 관련 정보를 보여준다.

Options

dmesg의 주요 옵션은 다음과 같다.

1
2
3
4
5
6
7
8
-C, --clear: dmesg 내용 삭제
-c, --read-clear: dmesg 내용 출력 후 삭제
-k, --kernel: 커널 메세지 출력
-f, --facility <list> : 지정한 facility들에 대한 메시지 출력
-l, --level <list> : 지정한 level들에 대한 메시지 출력
-x, --decode : facility와 level(priority) 메세지 출력
-T, --ctime : 보기 좋은 타임 스탬프로 출력
-t, --notime : 타임 스탬프를 출력하지 않음

위와 같은 dmesg에 대한 옵션의 정보들은 man dmesg 혹은 dmesg -help로 더 자세하게 볼 수 있다. 또한, 지원되는 log facilities와 log levels (priorities) 목록은 다음과 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Supported log facilities:
    kern - kernel messages
    user - random user-level messages
    mail - mail system
  daemon - system daemons
    auth - security/authorization messages
  syslog - messages generated internally by syslogd
     lpr - line printer subsystem
    news - network news subsystem

Supported log levels (priorities):
   emerg - system is unusable
   alert - action must be taken immediately
    crit - critical conditions
     err - error conditions
    warn - warning conditions
  notice - normal but significant condition
    info - informational
   debug - debug-level messages

dmesg 분석

dmesg가 중요한 이유는 프로그램이 비정상적으로 종료되었을 때, 어떤 원인으로 종료가 되었는지 알 수 있게 한다.

dmesg

1
[66294.352667] target[434214]: segfault at 0 ip 0000000000000000 sp 00000000ffffd63c error 14 in target[8048000+1000]

위 사진은 target이라는 프로그램이 비정상적으로 종료되었을 때 나타나는 dmesg이다. 해당 메세지를 분석하면 다음과 같다.

  • [66294.352667]: 타임 스탬프
  • target[434214]: 프로그램의 이름과 pid
  • segfault: 비정상적으로 종료된 원인
  • at 0: 비정상적으로 종료되었을 때, 참조한 주소
  • ip 0000000000000000: 비정상적으로 종료되었을 때, 실행된 명령어 주소
  • sp 00000000ffffd63c: 비정상적으로 종료되었을 때, 스택 주소
  • error 14: 에러 코드
  • in target[8048000+1000]: 프로그램 이름과 Offset 정보

Ref

[1] dmesg의 Segfault 분석 방법