- 1 dmesgコマンドとは?
- 2 検証環境
- 3 オプション一覧
- 3 基本的な使い方
- 4 時刻に関するオプションの使い方
- 5 メッセージの出力元、重要度別に出力する方法
- 6 バッファーをクリアする方法(-C)
- 7 メッセージ出力を待つ方法(-w)
- 8 メッセージに色を付ける方法(-H)
- Z 参考情報
1 dmesgコマンドとは?
Linuxカーネル起動時、カーネルやユーザプロセスが出力するメッセージはリングバッファに保存されます。dmesgコマンドは、このリングバッファに保存されているメッセージを表示するコマンドです。このリングバッファのサイズは上限が決まっていて、サイズを超えたら先頭から上書きされるリング構造になっています。
2 検証環境
CentOS版数は以下のとおりです。
[root@server ~]# cat /etc/redhat-release CentOS Linux release 7.9.2009 (Core)
カーネル版数は以下のとおりです。
[root@server ~]# uname -r 3.10.0-1160.el7.x86_64
dmesg コマンドの版数は以下のとおりです。
[root@server ~]# dmesg -V dmesg from util-linux 2.23.2
3 オプション一覧
オプションは以下のとおりです。
[root@server ~]# dmesg -h Usage: dmesg [options] オプション: -C, --clear clear the kernel ring buffer -c, --read-clear read and clear all messages -D, --console-off disable printing messages to console -d, --show-delta show time delta between printed messages -e, --reltime show local time and time delta in readable format -E, --console-on enable printing messages to console -F, --file <file> use the file instead of the kernel log buffer -f, --facility <list> restrict output to defined facilities -H, --human human readable output -k, --kernel display kernel messages -L, --color colorize messages -l, --level <list> restrict output to defined levels -n, --console-level <level> set level of messages printed to console -P, --nopager do not pipe output into a pager -r, --raw print the raw message buffer -S, --syslog force to use syslog(2) rather than /dev/kmsg -s, --buffer-size <size> buffer size to query the kernel ring buffer -T, --ctime show human readable timestamp (could be inaccurate if you have used SUSPEND/RESUME) -t, --notime don't print messages timestamp -u, --userspace display userspace messages -w, --follow wait for new messages -x, --decode decode facility and level to readable string -h, --help display this help and exit -V, --version output version information and exit 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 For more details see dmesg(q).
3 基本的な使い方
オプションなしで実行すると、カーネル起動時からのメッセージが表示されます。メッセージの左端は、カーネル起動時からの相対時刻が表示されます。最後のメッセージ(e1000)は、カーネルが起動されてから、約22秒で表示されていることがわかります。
[root@server ~]# dmesg -snip- [ 16.810965] NET: Registered protocol family 40 [ 20.673855] ip6_tables: (C) 2000-2006 Netfilter Core Team [ 21.010477] Ebtables v2.0 registered [ 21.195274] Netfilter messages via NETLINK v0.30. [ 21.260242] ip_set: protocol 7 [ 21.657456] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready [ 21.668697] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None -snip-
4 時刻に関するオプションの使い方
4.1 人間が読みやすいかたちで表示する方法(-T)
人間が読みやすいかたちで時刻を表示します。manによると、表示される時刻は正確ではない可能性があるようです。
[root@server ~]# dmesg -T -snip- [木 2月 24 19:16:26 2022] NET: Registered protocol family 40 [木 2月 24 19:16:30 2022] ip6_tables: (C) 2000-2006 Netfilter Core Team [木 2月 24 19:16:31 2022] Ebtables v2.0 registered [木 2月 24 19:16:31 2022] Netfilter messages via NETLINK v0.30. [木 2月 24 19:16:31 2022] ip_set: protocol 7 [木 2月 24 19:16:31 2022] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready [木 2月 24 19:16:31 2022] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None -snip-
4.2 メッセージ出力時刻の差分を表示する方法(-d)
メッセージと次のメッセージ出力時刻の差分を表示します。左端はカーネル起動時からの相対時刻です。2列目が、直前のメッセージとの時刻の差分を表しています。
[root@server ~]# dmesg -d -snip- [ 16.810965 < 1.320734>] NET: Registered protocol family 40 [ 20.673855 < 3.862890>] ip6_tables: (C) 2000-2006 Netfilter Core Team [ 21.010477 < 0.336622>] Ebtables v2.0 registered [ 21.195274 < 0.184797>] Netfilter messages via NETLINK v0.30. [ 21.260242 < 0.064968>] ip_set: protocol 7 [ 21.657456 < 0.397214>] IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready [ 21.668697 < 0.011241>] e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None -snip-
4.3 時刻を表示しない方法(-t)
[root@server ~]# dmesg -t -snip- NET: Registered protocol family 40 ip6_tables: (C) 2000-2006 Netfilter Core Team Ebtables v2.0 registered Netfilter messages via NETLINK v0.30. ip_set: protocol 7 IPv6: ADDRCONF(NETDEV_UP): ens33: link is not ready e1000: ens33 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: None -snip-
5 メッセージの出力元、重要度別に出力する方法
メッセージは、メッセージの出力元(facility)、および重要度(Level)に分類できます。メッセージ出力元は、以下のようなものがあります。
- メッセージ出力元
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
- メッセージの重要度
emergが一番緊急度が高いメッセージです。
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
5.1 メッセージ出力元、重要度を表示する方法(-x)
メッセージ出力元、重要度は以下のフォーマットで表示されます。
<メッセージ出力元(facility)>:<重要度(level)>
以下の実行結果では、メッセージ出力元はkern,daemon,syslogであることがわかります。また、重要度がdebug,info,notice,errのメッセージが出力されていることがわかります。
[root@server ~]# dmesg -x -snip- kern :debug : [ 7.426760] SELinux: Setting up existing superblocks. kern :notice: [ 7.442885] type=1403 audit(1645697775.556:3): policy loaded auid=4294967295 ses=4294967295 daemon:info : [ 7.465689] systemd[1]: Successfully loaded SELinux policy in 397.286ms. kern :info : [ 7.921225] ip_tables: (C) 2000-2006 Netfilter Core Team daemon:info : [ 7.921670] systemd[1]: Inserted module 'ip_tables' daemon:info : [ 7.957822] systemd[1]: Relabelled /dev, /run and /sys/fs/cgroup in 31.279ms. syslog:info : [ 9.669316] systemd-journald[397]: Received request to flush runtime journal from PID 1 kern :err : [ 11.131201] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled! kern :info : [ 11.150750] vmw_vmci 0000:00:07.7: Found VMCI PCI device at 0x11080, irq 16 kern :info : [ 11.150925] vmw_vmci 0000:00:07.7: Using capabilities 0x8000001c -snip-
5.2 カーネルが出力するメッセージを表示する方法(-k)
"-k"は、カーネルが出力するメッセージだけを表示するオプションです。5.1と同じ範囲のログを抽出してみると、daemonやsyslogが出力するメッセージが表示されていないことがわかります。
[root@server ~]# dmesg -k -snip [ 7.426760] SELinux: Setting up existing superblocks. [ 7.442885] type=1403 audit(1645697775.556:3): policy loaded auid=4294967295 ses=4294967295 [ 7.921225] ip_tables: (C) 2000-2006 Netfilter Core Team [ 11.131201] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled! [ 11.150750] vmw_vmci 0000:00:07.7: Found VMCI PCI device at 0x11080, irq 16 [ 11.150925] vmw_vmci 0000:00:07.7: Using capabilities 0x8000001c -snip-
5.3 ユーザプロセスが出力するメッセージを表示する方法(-u)
"-u"は、ユーザプロセスが出力するメッセージだけを表示するオプションです。
[root@server ~]# dmesg -u -snip- [ 4.590218] systemd[1]: Started Journal Service. [ 6.512113] systemd-journald[106]: Received SIGTERM from PID 1 (systemd). [ 7.465689] systemd[1]: Successfully loaded SELinux policy in 397.286ms. [ 7.921670] systemd[1]: Inserted module 'ip_tables' [ 7.957822] systemd[1]: Relabelled /dev, /run and /sys/fs/cgroup in 31.279ms.
5.4 重要度を指定する方法(-l)
"-l"は重要度を指定するオプションです。"-l"のパラメータとしてerrを指定すると、重要度がerrのメッセージだけを表示することができます。
[root@server ~]# dmesg -l err [ 5.528244] sd 2:0:0:0: [sda] Assuming drive cache: write through [ 11.131201] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled!
パラメータとしてerrとwarnを指定すると、重要度がerrとwarnのメッセージだけを表示することができます。
[root@server ~]# dmesg -l err,warn -snip- [ 5.528244] sd 2:0:0:0: [sda] Assuming drive cache: write through [ 11.131201] piix4_smbus 0000:00:07.3: SMBus Host Controller not enabled! [ 116.547524] IPv6: MLD: clamping QRV from 1 to 2! [ 241.575763] IPv6: MLD: clamping QRV from 1 to 2! -snip-
5.5 メッセージ出力元を指定する方法(-f)
"-f"は、メッセージの出力元を指定するオプションです。まず、syslogが出力したメッセージだけを表示してみます。
[root@server ~]# dmesg -f syslog [ 6.512113] systemd-journald[106]: Received SIGTERM from PID 1 (systemd). [ 9.669316] systemd-journald[397]: Received request to flush runtime journal from PID 1
次に、daemonが出力したメッセージだけを表示してみます。
[root@server ~]# dmesg -f daemon [ 4.403590] systemd[1]: Detected architecture x86-64. -snip-
6 バッファーをクリアする方法(-C)
"-C"は、リングバッファのメッセージをクリアするオプションです。
[root@server ~]# dmesg -C
dmesgコマンドを実行します。バッファがクリアされているので、dmesgコマンドを実行してもメッセージは表示されません。
[root@server ~]# dmesg [root@server ~]#
7 メッセージ出力を待つ方法(-w)
次のメッセージが出力されるのを待ちます。
[root@server ~]# dmesg -w
もう1つターミナルを開きます。ここでは、ip_setモジュールのアンインストール、インストールをしてみます。
[root@server ~]# rmmod ip_set [root@server ~]# modprobe ip_set
モジュールをインストールすると、下記メッセージが出力されます。
[root@server ~]# dmesg -w [ 2890.979858] ip_set: protocol 7
8 メッセージに色を付ける方法(-H)
”-H”は、色を付けてメッセージを表示するオプションです。ここでは、-Pオプションも指定して、ページャ機能を無効にしてみました。ページャ機能が有効の場合は、スペースキーを押下して、次のページを表示します。
[root@server ~]# dmesg -HP
メッセージに色を付けて、さらに、メッセージ出力元および重要度も一緒に表示してみます。
Z 参考情報
私が業務や記事執筆で参考にした書籍を以下のページに記載します。
Linux技術のスキルアップをしよう! - hana_shinのLinux技術ブログ