Dmesgコマンド カーネルのメッセージバッファを出力します。 Dmesgコマンドは主に、障害が発生したデバイス、USBなどのホットプラグされたデバイス、I/Oデバイスのエラーを識別するために使用されます。
システムが、関連するハードウェアデバイスを使用してカーネルセットアップに存在するデバイスドライバーを起動するとき。その時点で、カーネルを備えたドライバーやその他の要素がメッセージを生成します。これらのメッセージは小さなバッファスペースに保存されます 新しいメッセージが来るとそれぞれ上書きされます。ほとんどのLinuxディストリビューションは、これらのメッセージを/ var / log/dmesgに保存します。 Dmesgは、/ var / log / dmesgからではなく、カーネルリングバッファから直接読み取ります。デフォルトのSyslog(Linuxディストリビューションによって異なります)またはメッセージをキャプチャするように構成されています。
Dmesgストア 起動中および起動後のカーネルメッセージ。起動後、ioエラーが発生したり、デバイスが接続されたりした場合に、カーネルがメッセージを生成することがあります。これらのメッセージは、システムコンソールにも送信されます。 Dmesgの出力は多くの場合大きく、more、tail、またはgrepコマンドを使用してフィルタリングできます。
dmesgコマンドの使用方法
Dmesgコマンドは、デフォルトでカーネルリングバッファからN個のメッセージを出力します。
$ dmesg
サンプル出力:
[ 1.230638] kernel: Run /init as init process
[ 1.336492] kernel: scsi host0: Virtio SCSI HBA
[ 1.338612] kernel: scsi 0:0:0:0: Direct-Access QEMU QEMU HARDDISK 2.5+ PQ: 0 ANSI: 5
[ 1.338727] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input4
[ 1.342266] kernel: input: VirtualPS/2 VMware VMMouse as /devices/platform/i8042/serio1/input/input3
[ 1.345242] kernel: lpc_ich 0000:00:1f.0: I/O space for GPIO uninitialized
[ 1.346920] kernel: ahci 0000:00:1f.2: version 3.0
[ 1.350864] kernel: scsi host1: Virtio SCSI HBA
[ 1.358377] kernel: scsi host2: Virtio SCSI HBA
[ 1.359317] kernel: PCI Interrupt Link [GSIA] enabled at IRQ 16
[ 1.359718] kernel: scsi 1:0:1:2: Direct-Access QEMU QEMU HARDDISK 2.5+ PQ: 0 ANSI: 5
[ 1.361478] kernel: ahci 0000:00:1f.2: AHCI 0001.0000 32 slots 6 ports 1.5 Gbps 0x3f impl SATA mode
[ 1.363039] kernel: i801_smbus 0000:00:1f.3: SMBus using PCI interrupt
Dmesgの出力は主に3つの部分に分かれています:
- 時間: 起動時間からの秒数を表示します。 20.091730を見つけた場合。これは、メッセージが起動時間の20秒後に作成されることを意味します。
- Device_name: デバイス名を表示する
- メッセージ: 実際のメッセージ。ここから、何が起こったのかを分析できます。
1)dmesgの読み方
オプションなしのDmesgコマンドは、大きな出力を生成します。読みやすくするために、grep以下のコマンドを使用して出力をフィルタリングします。いくつかの例を確認しましょう。
ページごとにdmesg出力を印刷
$ dmesg | less
サンプル出力:
[ 0.000000] Initializing cgroup subsys cpuset
[ 0.000000] Initializing cgroup subsys cpu
[ 0.000000] Linux version 3.8.0-31-generic (buildd@aatxe) (gcc version 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) ) #46-Ubuntu SMP Tue Sep 10 19:56:49 UTC 2013 (Ubuntu 3.8.0-31.46-generic 3.8.13.8)
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[ 0.000000] NSC Geode by NSC
[ 0.000000] Cyrix CyrixInstead
[ 0.000000] Centaur CentaurHauls
[ 0.000000] Transmeta GenuineTMx86
[ 0.000000] Transmeta TransmetaCPU
[ 0.000000] UMC UMC UMC UMC
ethに関連する情報を印刷する
$ dmesg | grep eth
サンプル出力:
[ 1.972418] e1000 0000:00:03.0 eth0: (PCI:33MHz:32-bit) 08:00:27:d2:c1:16
[ 1.972430] e1000 0000:00:03.0 eth0: Intel(R) PRO/1000 Network Connection
[ 18.867656] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.733138] e1000: eth0 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ 21.737967] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 21.738052] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
USBに関連する情報を印刷する
$ dmesg | grep usb
サンプル出力:
[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
grepコマンドは大文字と小文字を区別することに注意してください 。つまり、上記の例から、「usb」と「USB」は異なる結果をもたらします。大文字と小文字を区別する機能を無視するには、grepコマンドの後に-iパラメータを使用します 。このコマンド出力を上記のUSBケースと比較してください。
$ dmesg | grep -i usb
サンプル出力:
[ 0.131874] ACPI: bus type usb registered
[ 0.131910] usbcore: registered new interface driver usbfs
[ 0.131921] usbcore: registered new interface driver hub
[ 0.131955] usbcore: registered new device driver usb
[ 0.997759] ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
[ 0.997783] ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
[ 0.997929] ohci_hcd 0000:00:06.0: new USB bus registered, assigned bus number 1
[ 1.091722] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001
[ 1.091727] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[ 1.091730] usb usb1: Product: OHCI Host Controller
[ 1.091731] usb usb1: Manufacturer: Linux 3.8.0-31-generic ohci_hcd
[ 1.091733] usb usb1: SerialNumber: 0000:00:06.0
[ 1.091856] hub 1-0:1.0: USB hub found
[ 1.093110] uhci_hcd: USB Universal Host Controller Interface driver
ヘッド/テールを使用して目的の出力を表示する
たとえば、リムーバブルデバイスを挿入したり、ディスクボリュームに変更を加えたりしました。 tailを使用してdmesgの最新のエントリを確認するには コマンド。
dmesgログの最後のN行を表示するには:
$ dmesg | tail -15
同様に、dmesgログから最初の数行を見つけるには、headコマンドを使用します。これは、起動直後に発生した変更を見つけるのに役立ちます。
$ dmesg | head -15
リアルタイム監視
リアルタイムの継続的な監視には、オプション -fを使用します 。
$ tail -f /var/log/dmesg
別の方法として、watch dmesgを使用します:
$ watch "dmesg | tail -15"
一部のLinuxシステムは、新しいメッセージを待機するdmesg-wの使用をサポートしています。
2)人間が読める形式で印刷する
dmesg出力を人間が読める形式で印刷するには、オプション-Hを使用します。
$ dmesg -H
3)タイムスタンプをカスタムの日付形式に変換する
デフォルトでは、dmesg出力からのタイムスタンプは人間が読める形式ではありません。タイムスタンプをカスタムの日付形式に変更するには、オプション--ctimeまたは-Tを使用します。
$ dmesg --ctime
サンプル出力:
[Tue Dec 10 16:34:33 2013] 131MB HIGHMEM available.
[Tue Dec 10 16:34:33 2013] 891MB LOWMEM available.
[Tue Dec 10 16:34:33 2013] mapped low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] low ram: 0 - 37bfe000
[Tue Dec 10 16:34:33 2013] Zone ranges:
[Tue Dec 10 16:34:33 2013] DMA [mem 0x00010000-0x00ffffff]
[Tue Dec 10 16:34:33 2013] Normal [mem 0x01000000-0x37bfdfff]
[Tue Dec 10 16:34:33 2013] HighMem [mem 0x37bfe000-0x3ffeffff]
[Tue Dec 10 16:34:33 2013] Movable zone start for each node
[Tue Dec 10 16:34:33 2013] Early memory node ranges
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00010000-0x0009efff]
[Tue Dec 10 16:34:33 2013] node 0: [mem 0x00100000-0x3ffeffff
--time-format
タイムスタンプが有効になっていない場合 その場合、dmesgコマンドは出力にタイムスタンプを表示しない場合があります。
タイムスタンプが有効になっているかどうかを確認するには、ファイル/ sys / module / printk / parameters/timeを開きます。
$ cat /sys/module/printk/parameters/time
N
ファイルの内容がNの場合、タイムスタンプは有効になっていません。次のコマンドを実行して、タイムスタンプを有効にできます。
$ echo Y > /sys/module/printk/parameters/time
4)dmesgをクリア
カーネルリングバッファからメッセージをクリアするには、オプション-Cを使用します。
$ dmesg -C
内容を印刷した後にリングバッファをクリアするには、オプション-cを使用します。
$ dmesg -c
-cまたは-Cパラメータを使用してdmesgをクリアした場合でも、/ var / log / kern.log でログを表示できます。 または/var/ log/dmesg。
5)Dmesgによるコンソールへのログ記録を停止します
コンソールへのメッセージの印刷を無効にするには、オプション-Dを使用します。
$ dmesg -D
別のオプションは、-n 1を使用して、緊急(パニック)メッセージを除くすべてのメッセージがコンソールに表示されないようにすることです。
コンソールへのメッセージの印刷を有効にするには、-Eを使用します。
$ dmesg -E
6)施設に固有のメッセージを表示する
特定のカテゴリまたは施設からのメッセージを印刷します。この目的を達成するには、オプション--facilityを使用します。
例からメールに固有のメッセージを印刷するには、次のように入力します。
$ dmesg --facility=daemon
サポートされているログ機能 は:
kern-カーネルメッセージ
user-ランダムなユーザーレベルのメッセージ
メール-メールシステム
デーモン-システムデーモン
auth-セキュリティ/承認メッセージ
syslog-syslogdによって内部的に生成されたメッセージ
lpr-ラインプリンターサブシステム
ニュース-ネットワークニュースサブシステム
7)ログレベルの印刷
ログレベルに固有のメッセージを出力するには、オプション--levelを使用します。たとえば、すべての警告メッセージを出力するには、次のコマンドを実行します。
$ dmesg --level=warn
サンプル出力:
[ 0.000000] tsc: Fast TSC calibration failed
[ 19.595760] piix4_smbus 0000:00:07.0: SMBus base address uninitialized - upgrade BIOS or use force_addr=0xaddr
サポートされているログレベル は:
emerg-システムは使用できません
警告-アクションはすぐに実行する必要があります
クリティカル-重大な状態
エラー-エラー状態
警告-警告条件
注意-正常ですが重大な状態
情報-情報
debug-デバッグレベルのメッセージ
8)人間が読める形式の表示機能とレベル
人間が読める形式で機能とログレベルを印刷するには、オプション-xを使用します。
$ dmesg -x
サンプル出力:
kern :debug : [ 0.000000] e820: remove [mem 0x000a0000-0x000fffff] usable
kern :info : [ 0.000000] e820: last_pfn = 0x3fff0 max_arch_pfn = 0x1000000
kern :debug : [ 0.000000] MTRR default type: uncachable
kern :debug : [ 0.000000] MTRR variable ranges disabled:
kern :info : [ 0.000000] x86 PAT enabled: cpu 0, old 0x7040600070406, new 0x7010600070106
kern :info : [ 0.000000] CPU MTRRs all blank - virtualized system.
9)カーネルメッセージを出力する
カーネル固有のメッセージを出力するには、オプション-kを使用します。
$ dmesg -k
10)タイムスタンプを無視する
カーネルのタイムスタンプを出力したくない場合は、オプション-tを使用します。
$ dmesg -t
結論
Dmesgは、システムに関連する問題の診断に非常に役立ちます。このチュートリアルでは、Linuxでdmesgコマンドを使用する方法を学びました。