如何在 Linux 系统上使用“dmesg”命令

dmesg 命令 习惯于 显示内核相关消息 在类 Unix 系统上。 dmesg 代表“显示消息或显示驱动程序“。 dmesg 命令 通过读取内核环形缓冲区来检索其数据。 在 Linux 系统上进行故障排除时,dmesg 命令变得非常方便,它可以帮助我们识别与硬件相关的错误和警告,此外它还可以在屏幕上打印与守护程序相关的消息。
让我们通过下面讨论的实际示例来了解最着名的工具“dmesg”命令。 dmesg 的确切语法如下。

# dmseg [options...]

以下是可以在 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  -E, --console-on            enable printing messages to console  -F, --file            use the file instead of the kernel log buffer  -f, --facility        restrict output to defined facilities  -H, --human                 human readable output  -k, --kernel                display kernel messages  -L, --color[=]        colorize messages (auto, always or never)                                colors are enabled by default  -l, --level           restrict output to defined levels  -n, --console-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     buffer size to query the kernel ring buffer  -u, --userspace             display userspace messages  -w, --follow                wait for new messages  -x, --decode                decode facility and level to readable string  -d, --show-delta            show time delta between printed messages  -e, --reltime               show local time and time delta in readable format  -T, --ctime                 show human-readable timestamp (may be inaccurate!)  -t, --notime                don't show any timestamp with messages      --time-format   show timestamp using the given format:                                [delta|reltime|ctime|notime|iso] 

现在让我们进入提示部分。

1.列出内核中所有加载的驱动程序

打开终端并输入“dmesg”命令,然后按回车键。

我们可以通过 dmesg 命令使用文本操作工具,即“more”、“tail”、“less”或“grep”。

# dmesg |more

示例输出:

2. 列出所有检测到的设备

要发现内核检测到哪些硬盘,您可以搜索关键字“sda”和“grep”,如下所示:

$ dmesg | grep sda [    4.989254] sd 0:0:0:0: [sda] 1250263728 512-byte logical blocks: (640 GB/596 GiB) [    4.989263] sd 0:0:0:0: [sda] Write Protect is off [    4.989265] sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 [    4.989280] sd 0:0:0:0: [sda] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [    5.053921]  sda: sda1 sda2 [    5.054436] sd 0:0:0:0: [sda] Attached SCSI disk [ 4266.344111] sd 0:0:0:0: [sda] Synchronizing SCSI cache [ 4266.344778] sd 0:0:0:0: [sda] Stopping disk [ 4268.621944] sd 0:0:0:0: [sda] Starting disk [ 6875.213393] sd 0:0:0:0: [sda] Synchronizing SCSI cache [ 6875.352287] sd 0:0:0:0: [sda] Stopping disk [ 6877.025739] sd 0:0:0:0: [sda] Starting disk 

‘sda’ 是第一个 SATA 硬盘,’sdb’ 是第二个 SATA 硬盘,依此类推。 如果是 IDE 硬盘,请使用 ‘hda’ 或 ‘hdb’ 搜索。

3. 显示内存、硬盘、USB 驱动器和串口相关信息

由于 dmesg 输出的长度,很难搜索特定的字符串。 因此,过滤具有像 ‘usb’ ‘dma’ ‘tty’ 和 ‘memory’ 等字符串的行。 ‘-i’ 选项指示 grep 命令忽略大小写(大写或小写字母)。

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

或者

# dmesg | grep -E "memory|dma|usb|tty"

4. 显示彩色消息(dmesg 命令输出)

如果要打印彩色消息,请在 dmesg 命令中使用“-L”选项,

# dmesg -L

示例输出:

5.查看以太网链接状态(UP/DOWN)

在下面的示例中,dmesg 指示 eth0 链接在引导期间处于活动状态。

#  dmesg  | grep eth
留言 | 以太坊

6.读取和清除dmesg缓冲区日志

如果您想在读取 dmesg 日志后清除它们,那么您可以在 dmesg 命令中使用选项 -C,

# dmesg -C

7.实时监控dmesg

在 dmesg 命令中使用 ‘–follow’ 选项查看实时 dmesg 日志,示例如下所示,

# dmesg --follow

某些发行版允许命令 ‘tail -f /var/log/dmesg‘ 以及用于实时 dmesg 监控。

# watch "dmesg | tail -20"

8. 将 dmesg 输出限制为特定的工具,如守护进程

如果您想将 dmesg 输出限制为特定的工具,例如 daemon,请在 dmesg 命令中使用选项“–facility=daemon”。

# dmesg --facility=daemon

9. 在 dmesg 日志中启用时间戳

有时,您可能希望时间戳与 dmesg 产生的消息相关联。 这可以使用 -T 命令行选项来完成,该选项会生成人类可读的时间戳。

# dmesg -T

以防万一,如果您需要时间图以及 dmesg 命令输出中的解码工具和级别,请使用“-Tx”选项,

# dmesg -Tx

默认情况下,来自 dmesg 输出的时间戳不是人类可读的。 为了使其易于人类阅读,您可以使用 – -ctime 参数。

# dmesg  - -ctime

10.使用’-r’选项显示原始消息缓冲区

在 dmesg 命令中使用“-r”选项来显示原始消息缓冲区。

# dmesg -r

11.强制dmesg命令使用syslog

在某些情况下,我们希望 dmesg 从 syslog 而不是 /dev/kmsg 获取其数据。 这可以使用选项“-S”轻松实现,示例如下所示:

# dmesg -S

dmesg 命令日志存储在文件“/var/log/dmesg”中

12.只打印前20行,只打印后20行

‘head’ 和 dmesg 将显示起始行,即 ‘dmesg | head -20’ 将从起点仅打印 20 行。

# dmesg | head  -20

‘tail’ 和 dmesg 命令将只打印最后 20 行,这在我们插入可移动设备时很有用。

# dmesg | tail -20

13.打印日志级别

dmesg 还可以根据级别打印日志。 要打印这样的输出,请使用 – -level 参数

# dmesg - -level=err

示例输出:

[ 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

此选项将仅打印错误消息。

结论

dmesg 命令很有用,因为 dmesg 实时记录所有已完成或发生的系统更改。 与往常一样,您可以使用 man dmesg 来获取更多信息。