天天看點

Linux系統中‘dmesg’指令處理故障和收集系統資訊的7種用法Linux系統中‘dmesg’指令處理故障和收集系統資訊的7種用法

‘dmesg’指令顯示linux核心的環形緩沖區資訊,我們可以從中獲得諸如系統架構、cpu、挂載的硬體,ram等多個運作級别的大量的系統資訊。當計算機啟動時,系統核心(作業系統的核心部分)将會被加載到記憶體中。在加載的過程中會顯示很多的資訊,在這些資訊中我們可以看到核心檢測硬體裝置。

Linux系統中‘dmesg’指令處理故障和收集系統資訊的7種用法Linux系統中‘dmesg’指令處理故障和收集系統資訊的7種用法

dmesg command examples

dmesg 指令的使用範例

‘dmesg’指令裝置故障的診斷是非常重要的。在‘dmesg’指令的幫助下進行硬體的連接配接或斷開連接配接操作時,我們可以看到硬體的檢測或者斷開連接配接的資訊。‘dmesg’指令在多數基于linux和unix的作業系統中都可以使用。

下面我們展示一些最負盛名的‘dmesg’指令工具以及其實際使用舉例。‘dmesg’指令的使用文法如下。

# dmesg [options...]

<a target="_blank"></a>

我們可以使用如‘more’。 ‘tail’, ‘less ’或者‘grep’文字處理工具來處理‘dmesg’指令的輸出。由于dmesg日志的輸出不适合在一頁中完全顯示,是以我們使用管道(pipe)将其輸出送到more或者less指令單頁顯示。

[[email protected] ~]# dmesg | more

[[email protected] ~]# dmesg | less

[ 0.000000] initializing cgroup subsys cpuset

[ 0.000000] initializing cgroup subsys cpu

[ 0.000000] initializing cgroup subsys cpuacct

[ 0.000000] linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (ubuntu/linaro 4.8.1-10ubuntu8) ) #20-ubuntu smp wed oct 23 17:26:33 utc 2013

(ubuntu 3.11.0-13.20-generic 3.11.6)

[ 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

[ 0.000000] e820: bios-provided physical ram map:

[ 0.000000] bios-e820: [mem 0x0000000000000000-0x000000000009fbff] usable

[ 0.000000] bios-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved

[ 0.000000] bios-e820: [mem 0x0000000000100000-0x000000007dc08bff] usable

[ 0.000000] bios-e820: [mem 0x000000007dc08c00-0x000000007dc5cbff] acpi nvs

[ 0.000000] bios-e820: [mem 0x000000007dc5cc00-0x000000007dc5ebff] acpi data

[ 0.000000] bios-e820: [mem 0x000000007dc5ec00-0x000000007fffffff] reserved

[ 0.000000] bios-e820: [mem 0x00000000e0000000-0x00000000efffffff] reserved

[ 0.000000] bios-e820: [mem 0x00000000fec00000-0x00000000fed003ff] reserved

[ 0.000000] bios-e820: [mem 0x00000000fed20000-0x00000000fed9ffff] reserved

[ 0.000000] bios-e820: [mem 0x00000000fee00000-0x00000000feefffff] reserved

[ 0.000000] bios-e820: [mem 0x00000000ffb00000-0x00000000ffffffff] reserved

[ 0.000000] nx (execute disable) protection: active

.....

要顯示所有被核心檢測到的硬碟裝置,你可以使用‘grep’指令搜尋‘sda’關鍵詞,如下:

[[email protected] ~]# dmesg | grep sda

[ 1.280971] sd 2:0:0:0: [sda] 488281250 512-byte logical blocks: (250 gb/232 gib)

[ 1.281014] sd 2:0:0:0: [sda] write protect is off

[ 1.281016] sd 2:0:0:0: [sda] mode sense: 00 3a 00 00

[ 1.281039] sd 2:0:0:0: [sda] write cache: enabled, read cache: enabled, doesn't support dpo or fua

[ 1.359585] sda: sda1 sda2 &lt; sda5 sda6 sda7 sda8 &gt;

[ 1.360052] sd 2:0:0:0: [sda] attached scsi disk

[ 2.347887] ext4-fs (sda1): mounted filesystem with ordered data mode. opts: (null)

[ 22.928440] adding 3905532k swap on /dev/sda6. priority:-1 extents:1 across:3905532k fs

[ 23.950543] ext4-fs (sda1): re-mounted. opts: errors=remount-ro

[ 24.134016] ext4-fs (sda5): mounted filesystem with ordered data mode. opts: (null)

[ 24.330762] ext4-fs (sda7): mounted filesystem with ordered data mode. opts: (null)

[ 24.561015] ext4-fs (sda8): mounted filesystem with ordered data mode. opts: (null)

注解 ‘sda’表示第一塊 sata硬碟,‘sdb’表示第二塊sata硬碟。若想檢視ide硬碟搜尋‘hda’或‘hdb’關鍵詞。

在‘dmesg’指令後跟随‘head’指令來顯示開始幾行,‘dmesg | head -20′指令将顯示開始的前20行。

[[email protected] ~]# dmesg | head -20

[ 0.000000] linux version 3.11.0-13-generic (buildd@aatxe) (gcc version 4.8.1 (ubuntu/linaro 4.8.1-10ubuntu8) ) #20-ubuntu smp wed oct 23 17:26:33 utc 2013 (ubuntu 3.11.0-13.20-generic 3.11.6)

在‘dmesg’指令後跟随‘tail’指令(‘ dmesg | tail -20’)來輸出‘dmesg’指令的最後20行日志,當你插入可移動裝置時它是非常有用的。

[[email protected] ~]# dmesg | tail -20

parport0: pc-style at 0x378, irq 7 [pcspp,tristate]

ppdev: user-space parallel port driver

ext4-fs (sda1): mounted filesystem with ordered data mode

adding 2097144k swap on /dev/sda2. priority:-1 extents:1 across:2097144k

readahead-disable-service: delaying service auditd

ip_tables: (c) 2000-2006 netfilter core team

nf_conntrack version 0.5.0 (16384 buckets, 65536 max)

net: registered protocol family 10

lo: disabled privacy extensions

e1000: eth0 nic link is up 1000 mbps full duplex, flow control: none

slow work thread pool: starting up

slow work thread pool: ready

fs-cache: loaded

cachefiles: loaded

cachefiles: security denies permission to nominate security context: error -95

eth0: no ipv6 routers present

type=1305 audit(1398268784.593:18630): audit_enabled=0 old=1 auid=4294967295 ses=4294967295 res=1

readahead-collector: starting delayed service auditd

readahead-collector: sorting

readahead-collector: finished

[[email protected] log]# dmesg | grep -i usb

[[email protected] log]# dmesg | grep -i dma

[[email protected] log]# dmesg | grep -i tty

[[email protected] log]# dmesg | grep -i memory

[ 0.000000] scanning 1 areas for low memory corruption

[ 0.000000] initial memory mapped: [mem 0x00000000-0x01ffffff]

[ 0.000000] base memory trampoline at [c009b000] 9b000 size 16384

[ 0.000000] init_memory_mapping: [mem 0x00000000-0x000fffff]

[ 0.000000] init_memory_mapping: [mem 0x37800000-0x379fffff]

[ 0.000000] init_memory_mapping: [mem 0x34000000-0x377fffff]

[ 0.000000] init_memory_mapping: [mem 0x00100000-0x33ffffff]

[ 0.000000] init_memory_mapping: [mem 0x37a00000-0x37bfdfff]

[ 0.000000] early memory node ranges

[ 0.000000] pm: registered nosave memory: [mem 0x0009f000-0x000effff]

[ 0.000000] pm: registered nosave memory: [mem 0x000f0000-0x000fffff]

[ 0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups

[ 0.000000] memory: 2003288k/2059928k available (6352k kernel code, 607k rwdata, 2640k rodata, 880k init, 908k bss, 56640k reserved, 1146920k highmem)

[ 0.000000] virtual kernel memory layout:

[ 0.004291] initializing cgroup subsys memory

[ 0.004609] freeing smp alternatives memory: 28k (c1a3e000 - c1a45000)

[ 0.899622] freeing initrd memory: 23616k (f51d0000 - f68e0000)

[ 0.899813] scanning for low memory corruption every 60 seconds

[ 0.946323] agpgart-intel 0000:00:00.0: detected 32768k stolen memory

[ 1.360318] freeing unused kernel memory: 880k (c1962000 - c1a3e000)

[ 1.429066] [drm] memory usable by graphics device = 2048m

我們可以使用如下指令來清空dmesg的日志。該指令會清空dmesg環形緩沖區中的日志。但是你依然可以檢視存儲在‘/var/log/dmesg’檔案中的日志。你連接配接任何的裝置都會産生dmesg日志輸出。

[[email protected] log]# dmesg -c

在某些發行版中可以使用指令‘tail -f /var/log/dmesg’來實時監控dmesg的日志輸出。

[[email protected] log]# watch "dmesg | tail -20"

結論:dmesg指令在系統dmesg記錄實時更改或産生的情況下是非常有用的。你可以使用man dmesg來擷取更多關于dmesg的資訊。

原文釋出時間:2014-08-11

本文來自雲栖合作夥伴“linux中國”

繼續閱讀