7 ví dụ lệnh dmesg trên Centos / Ubuntu / Debian / Fedora

Lệnh 'dmesg' hiển thị các tin nhắn từ bộ nhớ đệm vòng của kernel. Hệ thống đi qua nhiều runlevel từ đó có thể thu thập được nhiều thông tin như kiến trúc hệ thống, cpu, thiết bị kết nối, RAM, v.v. Khi máy tính khởi động, kernel (nhân hệ điều hành) được tải vào bộ nhớ. Trong thời gian đó, nhiều tin nhắn được hiển thị, cho phép chúng ta xem các thiết bị phần cứng được kernel phát hiện. 

Cú pháp chính xác của lệnh dmesg như sau:

# dmseg [options...]

Liệt kê tất cả các Driver đã tải trong Kernel bằng lệnh dmesg

Sử dụng kết hợp với các công cụ xử lý văn bản như 'more', 'tail', 'less' hoặc 'grep'. Vì lưu trữ dmesg không hiển thị trên một trang duy nhất, việc sử dụng dmesg với lệnh pipe more hoặc less sẽ hiển thị log trên một trang duy nhất.

# dmesg | more
# dmesg | less

Ví dụ đầu ra:

[    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

Liệt kê tất cả các thiết bị được phát hiện bằng lệnh dmesg

Để tìm ra các ổ cứng đã được kernel phát hiện, bạn tìm kiếm từ khóa "sda" kết hợp với "grep" như sau:

# 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 < sda5 sda6 sda7 sda8 >
[    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)

LƯU Ý: 'sda' là ổ cứng SATA đầu tiên, 'sdb' là ổ cứng SATA thứ hai và cứ tiếp tục như vậy. Tìm kiếm với 'hda' hoặc 'hdb' trong trường hợp ổ cứng IDE.

Dùng lệnh dmesg để chỉ in ra 20 dòng đầu tiên

Sử dụng kết hợp với 'head' để hiển thị các dòng đầu tiên, ví dụ 'dmesg | head -20' sẽ chỉ in ra 20 dòng từ điểm bắt đầu.

# dmesg | head  -20
[    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

Chỉ in ra 20 dòng cuối cùng bằng câu lệnh dmesg đơn giản

Kết hợp 'tail' chỉ in ra 20 dòng cuối cùng, điều này hữu ích khi chúng ta chèn thiết bị có thể gỡ bỏ được.

# 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

Lệnh dmesg tìm kiếm thiết bị được phát hiện hoặc chuỗi cụ thể

Việc tìm kiếm chuỗi cụ thể trong lưu trữ dmesg khá khó do độ dài của đầu ra dmesg. Vì vậy, hãy lọc các dòng chứa chuỗi như 'usb', 'dma', 'tty' và 'memory' v.v. Tùy chọn '-i' chỉ định cho lệnh grep để bỏ qua phân biệt chữ hoa chữ thường.

# dmesg | grep -i usb
# dmesg | grep -i dma
# dmesg | grep -i tty
# dmesg | grep -i memory

Đầu ra ví dụ:

[    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

Xóa bộ nhớ đệm dmesg

Có thể xóa các lưu trữ dmesg nếu cần thiết bằng lệnh sau. Lệnh này sẽ xóa các tin nhắn trong bộ nhớ đệm dmesg cho đến khi bạn thực hiện lệnh dưới đây. Tuy vậy, bạn vẫn có thể xem các lưu trữ trong tệp '/var/log/dmesg'. Khi bạn kết nối một thiết bị, dmesg sẽ tạo ra đầu ra.

# dmesg -c

Giám sát dmesg theo thời gian thực

Một số bản phân phối cho phép sử dụng 'tail -f /var/log/dmesg' để giám sát dmesg theo thời gian thực.

# watch "dmesg | tail -20"

Mọi người cũng tìm kiếm: dmesg, dmesg ubuntu, dmesg tty, ubuntu dmesg, tail dmesg, kernel dmesg, initializing cgroup subsys cpuset