dmesg란 무엇인가?
dmesg는 'display message' 또는 'driver message'의 약자로, 리눅스 커널의 링 버퍼(Ring Buffer)에 저장된 메시지를 출력합니다. 시스템이 부팅될 때부터 현재까지 하드웨어가 어떻게 인식되고, 드라이버가 어떻게 로드되었는지, 또는 어떤 오류가 발생했는지 시간순으로 보여줍니다.
핵심 기능 및 용도
dmesg는 시스템의 가장 낮은 수준(커널)에서 일어나는 일을 진단할 때 사용됩니다.
- 부팅 메시지 확인: 시스템 시작 시 출력되는 모든 커널 메시지를 봅니다.
- 하드웨어 진단: 새로운 하드웨어(USB, 디스크 등)가 연결되거나 제거될 때의 로그를 확인합니다.
- 드라이버 오류: 드라이버 로딩 실패나 커널 수준의 오류(Kernel Panic) 원인을 추적합니다.
- 링 버퍼: 버퍼 크기가 정해져 있어, 오래된 로그는 새 로그에 의해 덮어쓰입니다.
주요 옵션 (Shell)
dmesg는 종종 다른 명령어(grep, less)와 파이프(|)로 연결해 사용하지만, 자체적으로 유용한 옵션들을 가지고 있습니다.
1. 출력 형식 및 시간
2. 필터링 및 실시간 모니터링
3. 버퍼/콘솔 제어 (주의 필요)
생성된 명령어:
명령어를 조합해 보세요.
설명:
`dmesg` 명령어를 실행합니다.
위 옵션들을 조합하여 AI와 함께 가상으로 명령어를 실행해 보세요.
사용 시나리오 예시 (Shell)
dmesg는 grep과 함께 사용하여 원하는 정보만 필터링하는 경우가 많습니다.
모든 메시지 보기 (페이징)
dmesg | less
가장 기본적인 사용법. less로 편하게 스크롤합니다.
실시간으로 새 메시지 확인 (읽기 편하게)
dmesg -wH
-w (실시간)와 -H (사람 읽기 편한 시간)를 조합합니다.
USB 관련 메시지만 필터링
dmesg | grep -i usb
grep의 -i 옵션은 대소문자를 무시합니다.
디스크(SATA/NVMe) 관련 메시지 필터링
dmesg | grep -iE 'sd[a-z]|nvme'
grep -E(확장 정규식)로 'sd[a-z]' 또는 'nvme'를 포함하는 로그를 찾습니다.
오류(Error) 또는 경고(Warn)만 필터링
dmesg -H -l err,warn
-l 옵션으로 로그 레벨을 지정합니다.
최근 10줄의 메시지만 보기
dmesg | tail -n 10
tail을 조합해 최근 메시지만 빠르게 확인합니다.
facility/level 태그 포함해 보기
dmesg -xT | less
-x 옵션으로 facility/level을 디코딩해 이해를 돕습니다.
로그를 파일로 저장
dmesg -T > ~/dmesg-$(date +%F-%H%M).log
부팅 직후 전체 dmesg를 보관합니다.
설치
dmesg는 util-linux 패키지에 포함되어 있으며, 대부분의 리눅스 배포판에서 기본 제공됩니다.
기본 설치됨
별도 설치가 필요하지 않습니다. 만약 없다면 배포판의 'util-linux' 패키지를 설치하세요.
팁 & 주의사항
dmesg vs journalctl
- systemd 환경: 최신 systemd 시스템에서는 'journalctl -k'(커널 로그) 또는 'journalctl -b'(이번 부팅 로그)로 dmesg 수준을 넘어선 시스템 로그 통합 열람이 가능합니다.
- 시간 형식: 기본 dmesg 출력의 시간은 [부팅 후 경과 시간(초)]입니다. 실제 시간을 보려면 '-H' 또는 '-T' 옵션을 사용하세요.
- 버퍼 덮어쓰기: 링 버퍼 특성상 오래된 메시지는 사라질 수 있습니다. 부팅 초기 로그 보존이 필요하면 'journalctl -b 0'로 확인하거나 dmesg 출력을 파일에 저장하세요.
- 권한/보안: 일부 배포판은 '/proc/sys/kernel/dmesg_restrict=1'로 일반 사용자 dmesg 접근을 제한합니다. 이 경우 'sudo dmesg' 또는 'sudo journalctl -k'를 사용하세요.
- 로그 지우기(-c, -C): 'dmesg -c'와 '-C'는 디버깅에는 유용하지만, 한 번 지우면 복구할 수 없습니다. 운영 환경에서는 신중히 사용하세요.