GNU/Linux >> Linux の 問題 >  >> Linux

Linuxdmesgコマンド-カーネルリングバッファの印刷

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 を使用して、指定された形式(ctime、reltime、delta、iso)を使用してタイムスタンプを出力することもできます。

タイムスタンプが有効になっていない場合 その場合、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コマンドを使用する方法を学びました。


Linux
  1. Linuxmvコマンド

  2. Linuxduコマンド

  3. Linuxipコマンド

  1. Linuxcdコマンド

  2. Linux での awk コマンドの例

  3. Linux でパイプ容量を設定する

  1. dmesgLinuxコマンドの使用方法

  2. Linux での dmesg コマンドの例

  3. Linux での lpr コマンドの例