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 来获取更多信息。