dmesg 명령어: 사용법과 -T 시각, -l 등급, 권한 오류

공정위 광고 문구 Ver 3.1
공정위 광고 문구 Ver 3.2(모바일 전용)
테스트 환경RHEL 계열AlmaLinux 9.8util-linux 2.37root 계정Debian 12 · util-linux 2.38.1 일반 계정
시스템 정보 · 설정 명령어dmesg위치/usr/bin/dmesg2026-10-29 확인

리눅스 커널이 부팅할 때부터 남긴 메시지는 dmesg 명령어로 커널 링 버퍼에서 읽어 터미널에 출력합니다. AlmaLinux 9 서버의 root 계정과 Debian 12 서버의 일반 계정에서 같은 dmesg를 실행해 본 결과, root 계정에서는 -T와 -l 옵션으로 시각과 등급을 고르고 grep으로 디스크 메시지를 찾았고 일반 계정에서는 dmesg_restrict 설정 때문에 버퍼를 읽지 못했습니다.

AlmaLinux 9.8 서버의 출력은 커널 버전 번호와 빌드 정보, util-linux 패치 버전, 파일 시스템 UUID, 호스트 이름, 부팅 시각과 메시지 시각, 프로세스 번호, 장치 이름을 예시 값으로 바꿨고, 시각은 UTC로 출력했습니다. Debian 12 서버의 출력은 실행한 그대로입니다.

1️⃣ dmesg 명령어 기본 사용법

  • ↪️ 커널 링 버퍼와 부팅 뒤 지난 시간

커널이 남기는 메시지는 리눅스 시스템 로그 가운데 커널 로그에 속합니다. dmesg는 이 메시지를 로그 파일 대신 메모리에 있는 커널 링 버퍼에서 읽습니다.

옵션 없이 실행하면 버퍼에 남은 메시지를 오래된 것부터 모두 출력합니다. 출력이 길어 head로 앞의 두 줄만 잘라 출력하자, 첫 줄에 부팅한 커널의 버전과 빌드 정보가 나왔습니다.

dmesg | head -n 2
[    0.000000] Linux version 5.14.0-687.10.1.el9_8.x86_64 (mockbuild@x64-builder01.almalinux.org) (gcc (GCC) 11.5.0 20250224 (Red Hat 11.5.0-9), GNU ld version 2.35.2-58.el9) #1 SMP PREEMPT_DYNAMIC Tue Jun 2 10:15:42 EDT 2026
[    0.000000] The list of certified hardware and cloud instances for Red Hat Enterprise Linux 9 can be viewed at the Red Hat Ecosystem Catalog, https://catalog.redhat.com.

줄 앞 대괄호 안의 숫자는 커널이 부팅을 시작한 순간부터 지난 시간을 초 단위로 센 값입니다. 커널 버전 줄은 부팅 직후라 0.000000이고, 아래 줄로 갈수록 값이 커집니다.

AlmaLinux 9.8 서버의 버퍼에는 662줄이 남아 있었습니다.

dmesg | wc -l
662

마지막 세 줄은 대괄호 숫자가 59만~128만 초로, 부팅하고 일주일에서 보름쯤 지난 뒤에 기록된 메시지였습니다.

dmesg | tail -n 3
[598306.625939] systemd-rc-local-generator[1203516]: /etc/rc.d/rc.local is not marked executable, skipping.
[1286540.203158] systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
[1287332.871409] systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

dmesg는 util-linux 패키지에 들어 있는 명령입니다. 버전은 [dmesg --version]으로 확인하며, AlmaLinux 9.8 서버는 2.37, Debian 12 서버는 2.38.1이었습니다.

dmesg --version
dmesg from util-linux 2.37.2
dmesg --version
dmesg from util-linux 2.38.1

🔲 dmesg 명령어 시뮬레이터

아래 시뮬레이터에서 dmesg에 -T, -H, -l, -f를 붙이거나 grep으로 걸러 보면서 출력이 어떻게 바뀌는지 확인할 수 있습니다. 가상 버퍼에는 실측한 줄의 꼴을 따라 예시 값으로 24줄을 담았습니다.

dmesg 명령어 시뮬레이터util-linux 2.37
[root@server work]#
브라우저 안에서만 동작합니다. 가상 링 버퍼는 실측한 줄의 꼴을 따라 예시 값으로 24줄을 담았고, [dmesg -C]로 비워도 새로고침하면 처음 상태로 돌아갑니다.

2️⃣ dmesg -T 시각 옵션

  • ↪️ -T 날짜와 시각, -H 읽기 쉬운 출력

부팅 뒤 지난 초만으로는 메시지가 언제 기록됐는지 바로 알기 어렵습니다. -T를 붙이면 부팅 시각에 그 초를 더해 요일과 날짜, 시각으로 바꿔 출력합니다.

dmesg -T | tail -n 3
[Mon Oct 12 04:24:26 2026] systemd-rc-local-generator[1203516]: /etc/rc.d/rc.local is not marked executable, skipping.
[Tue Oct 20 03:35:00 2026] systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
[Tue Oct 20 03:48:12 2026] systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

-T 시각은 실제로 기록된 시각과 몇 초 어긋날 수 있습니다. 같은 세 줄을 [journalctl -k]로 꺼내 시각을 견줘 보니, 저널에는 4~5초 늦은 시각으로 남아 있었습니다.

journalctl -k -n 3 --no-pager
Oct 12 04:24:30 server1 systemd-rc-local-generator[1203516]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 20 03:35:04 server1 systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
Oct 20 03:48:17 server1 systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

man 페이지는 -T 시각이 부팅 시각과 커널 시계의 차이로 계산한 값이라 정확하지 않을 수 있고, 절전 모드에서 깨어난 뒤에는 더 어긋난다고 설명합니다.

-H는 사람이 읽기 쉬운 꼴로 출력합니다. 분이 바뀐 줄에는 [Oct20 03:35]처럼 날짜와 시각이 나오고, 같은 분 안에서 이어진 줄에는 바로 앞 줄과의 간격이 [ +0.208914]처럼 초 단위로 나왔습니다.

dmesg -H | tail -n 4
[Oct12 04:24] systemd-rc-local-generator[1203448]: /etc/rc.d/rc.local is not marked executable, skipping.
[  +0.208914] systemd-rc-local-generator[1203516]: /etc/rc.d/rc.local is not marked executable, skipping.
[Oct20 03:35] systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
[Oct20 03:48] systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

man 페이지 기준으로 -H 출력은 기본으로 페이저를 거치므로, 파이프 없이 실행하면 less 같은 화면에서 넘겨 보게 됩니다. 페이저 없이 바로 출력하려면 -P를 함께 사용합니다.

3️⃣ dmesg 등급과 시설

  • ↪️ -l 등급 고르기와 -f 시설 고르기

커널 메시지마다 심각한 정도를 나타내는 등급과, 메시지를 남긴 쪽을 나타내는 시설이 붙어 있습니다. -x를 붙이자 줄 앞에 시설과 등급이 글자로 나왔습니다.

dmesg -x | tail -n 2
daemon:info  : [1286540.203158] systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
daemon:info  : [1287332.871409] systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

daemon은 시스템 데몬이 남긴 메시지라는 시설이고, info는 정보 등급입니다. 등급은 아래 표의 여덟 가지이고, 위쪽 등급일수록 심각한 메시지입니다. 표의 줄 수는 AlmaLinux 9.8 서버에서 등급마다 [dmesg -l 등급 | wc -l]로 센 값입니다.

등급뜻(--help 기준)AlmaLinux 9.8 서버 줄 수
emerg시스템을 사용할 수 없는 상태0
alert바로 조치해야 하는 상태0
crit치명적인 상태0
err오류2
warn경고15
notice정상이지만 눈여겨볼 상태43
info정보583
debug디버그19

-l 뒤에 등급을 쉼표로 이어 적으면 그 등급의 메시지만 출력합니다. 오류와 경고만 고르자 662줄 가운데 17줄이 남았습니다.

dmesg -l err,warn | wc -l
17

-l warn으로 고른 메시지의 마지막 줄은 타이머 인터럽트 처리에 약 3.96밀리초가 걸렸다는 커널 경고였습니다.

dmesg -l warn | tail -n 1
[ 8185.504010] hrtimer: interrupt took 3962739 ns

-f는 시설로 고릅니다. 커널이 직접 남긴 kern은 562줄, 시스템 데몬이 남긴 daemon은 98줄이었고, 사용자 프로그램이 남기는 user는 0줄이었습니다.

dmesg -f kern | wc -l
562
dmesg -f daemon | wc -l
98
dmesg -f user | wc -l
0

4️⃣ dmesg 명령어로 오류 찾기

  • ↪️ grep으로 장치 메시지 찾기와 -w로 새 메시지 기다리기

등급으로 거르면 어느 장치나 기능의 메시지인지는 섞인 채로 남습니다. 장치나 기능 이름으로 찾을 때는 dmesg 출력을 grep으로 넘깁니다.

디스크 메시지는 파일 시스템 이름으로 찾습니다. -T와 함께 XFS를 대소문자 구분 없이 찾자, 부팅 때 두 파티션을 마운트한 줄이 시각과 함께 나왔습니다.

dmesg -T | grep -i xfs
[Mon Oct  5 06:12:42 2026] SGI XFS with ACLs, security attributes, scrub, quota, no debug enabled
[Mon Oct  5 06:12:42 2026] XFS (sda4): Mounting V5 Filesystem 1d2e3f40-5a6b-4c7d-8e9f-a0b1c2d3e4f5
[Mon Oct  5 06:13:43 2026] XFS (sda3): Mounting V5 Filesystem 6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d

네트워크 쪽에서는 커널이 부팅 때 프로토콜을 등록한 줄이 [NET: Registered]로 시작합니다. 이 글자로 찾자 PF_INET(IPv4)과 PF_INET6(IPv6)를 비롯한 7줄이 나왔습니다.

dmesg | grep 'NET: Registered'
[    0.297228] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[    0.362663] NET: Registered PF_INET protocol family
[    0.366679] NET: Registered PF_UNIX/PF_LOCAL protocol family
[    0.366691] NET: Registered PF_XDP protocol family
[    0.715254] NET: Registered PF_ALG protocol family
[    0.755193] NET: Registered PF_INET6 protocol family
[    0.760227] NET: Registered PF_PACKET protocol family

메모리가 모자라 커널이 프로세스를 끝낸 기록은 out of memory와 oom-kill 두 낱말로 찾았습니다.

dmesg | grep -i -E 'out of memory|oom-kill'

AlmaLinux 9.8 서버의 버퍼에는 그런 줄이 없어 아무것도 출력되지 않았고, 바로 이어서 확인한 grep의 종료 코드는 1이었습니다.

echo $?
1

-w는 버퍼를 끝까지 출력한 뒤 끝나지 않고 새 메시지를 기다립니다. 장치를 연결하거나 서비스를 다시 시작하면서 그 순간의 커널 메시지를 볼 때 맞는 옵션이고, 지나간 메시지는 grep으로 찾습니다.

5초 뒤 끝나도록 timeout을 앞에 붙여 실행하고 tail로 마지막 두 줄만 남기자, 버퍼 끝의 두 줄이 그대로 나왔습니다. 5초 동안 새 메시지는 들어오지 않았습니다.

timeout 5 dmesg -w | tail -n 2
[1286540.203158] systemd-rc-local-generator[1689021]: /etc/rc.d/rc.local is not marked executable, skipping.
[1287332.871409] systemd-rc-local-generator[1697354]: /etc/rc.d/rc.local is not marked executable, skipping.

-W는 지금까지의 버퍼를 건너뛰고, 실행한 뒤에 들어온 메시지만 출력합니다.

timeout 5 dmesg -W

같은 5초 동안 출력은 없었고, timeout이 dmesg를 끝냈을 때의 종료 코드는 124였습니다.

echo $?
124

124는 timeout이 시간이 다 되어 명령을 끝냈을 때 돌려주는 값입니다(timeout 매뉴얼 기준).

5️⃣ dmesg 권한 오류

  • ↪️ dmesg_restrict 값과 journalctl -k

Debian 12 서버의 일반 계정에서 dmesg를 실행하자 커널 버퍼를 읽지 못했다는 오류가 나왔습니다. -T, -H, -l, -f를 붙여도 같은 오류였고, 종료 코드는 1이었습니다.

dmesg
dmesg: read kernel buffer failed: Operation not permitted

원인은 커널 설정 dmesg_restrict입니다. 커널 문서 기준으로 값이 1이면 CAP_SYSLOG 권한이 있는 계정만 dmesg로 커널 메시지를 읽을 수 있고, 0이면 제한이 없습니다. 같은 서버에서 /proc 아래의 값을 읽자 1이었습니다.

cat /proc/sys/kernel/dmesg_restrict
1

기본값은 커널을 빌드할 때의 CONFIG_SECURITY_DMESG_RESTRICT 설정으로 정해집니다(커널 문서 기준). 배포판 커널 설정 파일 기준으로 AlmaLinux 9 같은 RHEL 계열 커널은 이 설정을 사용하지 않아 기본값이 0이고, Debian 12 커널은 이 설정을 사용해 기본값이 1입니다.

관리자 권한이 있는 계정은 [sudo dmesg]처럼 실행합니다. 값을 0으로 바꾸려면 [sysctl -w kernel.dmesg_restrict=0]을 사용하며, 서버 전체의 커널 설정이 바뀝니다(커널 문서 기준).

커널 메시지는 systemd-journald의 저널에도 들어가며, [journalctl -k]로 꺼냅니다. 같은 Debian 12 일반 계정에서 실행하자 오류 대신 다른 사용자와 시스템의 메시지는 보이지 않는다는 안내와 함께 [– No entries --]가 나왔습니다.

journalctl -k -n 5 --no-pager
Hint: You are currently not seeing messages from other users and the system.
      Users in groups 'adm', 'systemd-journal' can see all messages.
      Pass -q to turn off this notice.
-- No entries --

안내 문구대로 adm이나 systemd-journal 그룹에 든 계정은 저널의 시스템 메시지까지 읽을 수 있습니다. dmesg가 지금 메모리에 남은 버퍼만 읽는 것과 달리, 저널은 설정에 따라 지난 부팅의 커널 메시지도 남깁니다(공식 문서 기준).

🔢 FAQ & 추천 콘텐츠

커널 링 버퍼는 메모리에 있어, 재부팅하면 새 부팅의 메시지부터 다시 쌓입니다. AlmaLinux 9.8 서버도 [dmesg -T]의 첫 줄 시각이 마지막으로 부팅한 시각이었습니다. 지난 부팅의 커널 메시지는 저널을 디스크에 남기는 서버에서 [journalctl -k -b -1]로 확인합니다(공식 문서 기준).

man 페이지 기준으로 -C는 링 버퍼를 비우기만 하고, -c는 버퍼의 내용을 한 번 출력한 뒤 비웁니다. 두 옵션 모두 버퍼를 지우며, 위 시뮬레이터의 가상 버퍼에서 결과를 확인할 수 있습니다.

--since에 날짜나 시각을 적으면 그 뒤의 메시지만 출력합니다. AlmaLinux 9.8 서버에서 [dmesg -T --since ‘2026-10-20’]을 실행하자 10월 20일에 기록된 두 줄만 나왔습니다. man 페이지 기준으로 --since도 -T와 같은 방식으로 시각을 계산하므로 몇 초 어긋날 수 있습니다.

ℹ️ 제휴 안내
본 사이트의 콘텐츠에는 제휴 링크가 포함되어 있습니다. 방문자가 이 링크를 통해 상품 또는 서비스를 구매하면 본 사이트는 판매처로부터 수수료를 지급받습니다. 이 과정에서 구매자가 지불하는 금액(이벤트 할인 시 금액이 내려갑니다↓)은 오르지 않습니다. 게시된 가격·할인·재고 정보는 작성 시점 기준이며 실제와 다를 수 있으므로, 구매 전 판매처에서 최종 확인하시기 바랍니다. 상품 선정과 평가는 자체 기준에 따라 작성되며, 수수료 지급 여부가 소개 순서나 평가 내용에 영향을 주지 않습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Prove your humanity: 7   +   3   =