用于 Linux 系统故障排除和收集信息的 7 个“dmesg”命令(打印内核日志)

本文详细介绍了dmesg命令在Linux系统中的作用,包括查看内核加载信息、设备检测、内存映射、实时监控等方面,以及其在硬件故障诊断中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dmesg '命令显示来自内核环形缓冲区的消息。系统会经过多个运行级别,从中我们可以获得大量信息,例如系统架构、CPU、附加设备、RAM 等。当计算机启动时,内核(操作系统的核心)会加载到内存中。在此期间,会显示大量消息,我们可以在其中看到内核检测到的硬件设备。

dmesg 命令示例

这些消息对于设备故障时的诊断目的非常重要。当我们连接或断开系统上的硬件设备时,借助 dmesg 命令,我们可以实时了解检测到或断开的信息。dmesg命令可在大多数基于Linux 和 Unix 的操作系统上使用。

让我们通过下面讨论的实际示例来了解最著名的工具“dmesg”命令。dmesg 的具体语法如下。

# dmseg [选项...]

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

我们可以使用文本操作工具,即“ more ”、“ tail ”、“ less ”或“ grep ”以及 dmesg 命令。由于 dmesg 日志的输出无法容纳在单个页面上,因此将 dmesg 与 pipe more 或 less 命令一起使用将在单个页面中显示日志。

[ root@howtoing.com ~]# dmesg | 更多的
[ root@howtoing.com ~]# dmesg | 较少的
样本输出
[0.000000]初始化cgroup子系统cpuset
[0.000000]初始化cgroup子系统cpu
[0.000000]初始化cgroup子系统cpuacct
[ 0.000000] Linux 版本 3.11.0-13-generic (buildd@aatxe) (gcc 版本 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP 10 月 23 日星期三 17:26:33 UTC 2013
(Ubuntu 3.11.0-13.20-通用3.11.6)
[ 0.000000] 内核支持的CPU:
[ 0.000000] 英特尔正版英特尔
[ 0.000000] AMD 正品AMD
[ 0.000000] NSC Geode 由 NSC
[0.000000]西里克斯西里克斯代替
[ 0.000000] 半人马半人马拖车
[0.000000]全美达正品TMx86
[0.000000]全美达全美达CPU
[0.000000]联电联电联电联电
[ 0.000000] e820:BIOS 提供的物理 RAM 映射:
[0.000000]BIOS-e820:[mem 0x0000000000000000-0x000000000009fbff]可用
[0.000000]BIOS-e820:[mem 0x00000000000f0000-0x00000000000fffff]保留
[0.000000]BIOS-e820:[mem 0x0000000000100000-0x000000007dc08bff]可用
[0.000000]BIOS-e820:[mem 0x000000007dc08c00-0x000000007dc5cbff]ACPI NVS
[0.000000]BIOS-e820:[mem 0x000000007dc5cc00-0x000000007dc5ebff]ACPI数据
[0.000000]BIOS-e820:[mem 0x000000007dc5ec00-0x000000007fffffff]保留
[0.000000]BIOS-e820:[mem 0x00000000e0000000-0x00000000efffffff]保留
[0.000000]BIOS-e820:[mem 0x00000000fec00000-0x00000000fed003ff]保留
[0.000000]BIOS-e820:[mem 0x00000000fed20000-0x00000000fed9ffff]保留
[ 0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000feefffff] 保留
[0.000000]BIOS-e820:[mem 0x00000000ffb00000-0x00000000ffffffff]保留
[ 0.000000] NX(执行禁用)保护:活动
……

另请阅读使用命令 head、tail 和 cat 有效管理 Linux 文件

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

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

[ root@howtoing.com ~]# dmesg | grep sda

[ 1.280971] sd 2:0:0:0: [ sda ] 488281250 512 字节逻辑块:(250 GB/232 GiB)
[ 1.281014] sd 2:0:0:0: [ sda ] 写保护已关闭
[ 1.281016] sd 2:0:0:0: [ sda ] 模式检测: 00 3a 00 00
[ 1.281039] sd 2:0:0:0: [ sda ] 写入缓存:已启用,读取缓存:已启用,不支持 DPO 或 FUA
[1.359585]   sdasda 1 sda 2< sda 5 sda 6 sda 7 sda 8>
[ 1.360052] sd 2:0:0:0: [ sda ] 连接的 SCSI 磁盘
[2.347887]EXT4-fs(sda 1):使用有序数据模式安装的文件系统。选项:(空)
[22.928440]在/dev/ sda 6上添加3905532k交换。优先级:-1范围:1跨:3905532k FS
[23.950543]EXT4-fs(sda 1):重新安装。选择:errors=remount-ro
[24.134016] EXT4-fs(sda 5):使用有序数据模式安装的文件系统。选项:(空)
[24.330762] EXT4-fs(sda 7):使用有序数据模式安装的文件系统。选项:(空)
[24.561015] EXT4-fs(sda 8):使用有序数据模式安装的文件系统。选项:(空)

:“sda”是第一个 SATA 硬盘驱动器,“sdb”是第二个 SATA 硬盘驱动器,依此类推。如果是 IDE 硬盘,请使用“hda”或“hdb”进行搜索。

3. 仅打印前 20 行输出

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

[ root@howtoing.com ~]# dmesg | 头-20

[0.000000]初始化cgroup子系统cpuset
[0.000000]初始化cgroup子系统cpu
[0.000000]初始化cgroup子系统cpuacct
[ 0.000000] Linux 版本 3.11.0-13-generic (buildd@aatxe) (gcc 版本 4.8.1 (Ubuntu/Linaro 4.8.1-10ubuntu8) ) #20-Ubuntu SMP 10 月 23 日星期三 17:26:33 UTC 2013 ( Ubuntu 3.11.0-13.20-通用3.11.6)
[ 0.000000] 内核支持的CPU:
[ 0.000000] 英特尔正版英特尔
[ 0.000000] AMD 正品AMD
[ 0.000000] NSC Geode 由 NSC
[0.000000]西里克斯西里克斯代替
[ 0.000000] 半人马半人马拖车
[0.000000]全美达正品TMx86
[0.000000]全美达全美达CPU
[0.000000]联电联电联电联电
[ 0.000000] e820:BIOS 提供的物理 RAM 映射:
[0.000000]BIOS-e820:[mem 0x0000000000000000-0x000000000009fbff]可用
[0.000000]BIOS-e820:[mem 0x00000000000f0000-0x00000000000fffff]保留
[0.000000]BIOS-e820:[mem 0x0000000000100000-0x000000007dc08bff]可用
[0.000000]BIOS-e820:[mem 0x000000007dc08c00-0x000000007dc5cbff]ACPI NVS
[0.000000]BIOS-e820:[mem 0x000000007dc5cc00-0x000000007dc5ebff]ACPI数据
[0.000000]BIOS-e820:[mem 0x000000007dc5ec00-0x000000007fffffff]保留

4. 仅打印最后 20 行输出

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

[ root@howtoing.com ~]# dmesg | 尾-20

parport0:PC 风格,位于 0x378,irq 7 [PCSPP,TRISTATE]
ppdev:用户空间并行端口驱动程序
EXT4-fs (sda1):以有序数据模式挂载的文件系统
在 /dev/sda2 上添加 2097144k 交换。优先级:-1 范围:1 跨度:2097144k
readahead-disable-service:延迟服务auditd
ip_tables:(C) 2000-2006 Netfilter 核心团队
nf_conntrack 版本 0.5.0(16384 个存储桶,最多 65536 个)
NET:注册协议族 10
lo:禁用隐私扩展
e1000:eth0 NIC 链路已启动 1000 Mbps 全双工,流量控制:无
慢速工作线程池:正在启动
慢工作线程池:就绪
FS 缓存:已加载
缓存文件:已加载
CacheFiles:安全拒绝指定安全上下文的权限:错误 -95
eth0:不存在 IPv6 路由器
类型=1305审核(1398268784.593:18630):audit_enabled=0旧=1 auid=4294967295 ses=4294967295 res=1
readahead-collector:启动延迟服务auditd
预读收集器:排序
预读收集器:完成

5. 搜索检测到的设备或特定字符串

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

[ root@howtoing.com日志]# dmesg | grep -i USB
[ root@howtoing.com日志]# dmesg | grep -i DMA
[ root@howtoing.com日志]# dmesg | grep -i tty
[ root@howtoing.com日志]# dmesg | grep -i 内存
样本输出
[ 0.000000] 扫描 1 个区域是否存在低内存损坏
[0.000000]初始内存映射:[mem 0x00000000-0x01ffffff]
[ 0.000000] 基本内存蹦床位于 [c009b000] 9b000 大小 16384
[0.000000]init_内存_映射:[mem 0x00000000-0x000fffff]
[0.000000]init_内存_映射:[mem 0x37800000-0x379fffff]
[0.000000]init_内存_映射:[mem 0x34000000-0x377fffff]
[0.000000]init_内存_映射:[mem 0x00100000-0x33ffffff]
[0.000000]init_内存_映射:[mem 0x37a00000-0x37bfdfff]
[ 0.000000] 早期内存节点范围
[ 0.000000] PM:注册的 nosave内存:[mem 0x0009f000-0x000effff]
[ 0.000000] PM:注册的 nosave内存:[mem 0x000f0000-0x000fffff]
[ 0.000000]如果您不需要内存cgroup ,请尝试“cgroup_disable=内存”选项
[0.000000]内存:2003288K/2059928K可用(6352K内核代码,607K rwdata,2640K rodata,880K init,908K bss,56640K保留,1146920K highmem)
[0.000000]虚拟内核内存布局:
[0.004291]初始化cgroup子系统内存
[0.004609]释放SMP替代内存:28K(c1a3e000 - c1a45000)
[0.899622]释放initrd内存:23616K(f51d0000 - f68e0000)[0.899813]每 60 秒
扫描一次低内存损坏
[0.946323] agpgart-intel 0000:00:00.0:检测到32768K被盗内存
[1.360318]释放未使用的内核内存:880K(c1962000 - c1a3e000)
[1.429066][drm]图形设备可用的内存= 2048M

6.清除dmesg缓冲区日志

是的,如果需要,我们可以使用以下命令清除 dmesg 日志。它将清除 dmesg 环形缓冲区消息日志,直到您执行以下命令。您仍然可以查看存储在“ /var/log/dmesg ”文件中的日志。如果连接任何设备都会生成 dmesg 输出。

[ root@howtoing.com日志]# dmesg -c

7. 实时监控dmesg

某些发行版还允许使用命令“tail -f /var/log/dmesg”进行实时 dmesg 监控。

[ root@howtoing.com log]# watch "dmesg | tail -20"

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

### Linux 系统设置与故障排除常用命令 以下是常用的 Linux 系统设置故障排除命令及其功能说明: #### 1. **系统状态监控** - `top` 显示实时的系统进程信息,包括 CPU 使用率、内存占用等[^2]。 ```bash top ``` - `htop` 增强版的 `top` 工具,提供更友好的交互界面(需安装)。 ```bash htop ``` - `vmstat` 报告虚拟内存统计信息,可用于分析系统的整体性能表现[^1]。 ```bash vmstat 2 5 ``` - `dmesg` 查看内核环缓冲区中的消息,通常用于诊断硬件设备问题。 ```bash dmesg | less ``` #### 2. **网络故障排除** - `ping` 测试主机之间的连通性。 ```bash ping www.google.com ``` - `traceroute` 或 `tracepath` 跟踪数据包到达目标地址所经过的路由节点。 ```bash traceroute www.google.com ``` - `ss` 列出当前系统的套接字连接情况,类似于 `netstat` 的替代品[^3]。 ```bash ss -tuln ``` - `tcpdump` 捕获并分析网络流量的数据包。 ```bash tcpdump -i eth0 port 80 ``` #### 3. **磁盘与文件系统管理** - `df` 显示文件系统的磁盘空间使用情况。 ```bash df -h ``` - `du` 统计目录或文件的磁盘使用量。 ```bash du -sh /var/log/ ``` - `fdisk` 分区表操作工具,支持创建、删除修改磁盘分区[^4]。 ```bash fdisk -l ``` - `mount` `umount` 挂载卸载文件系统。 ```bash sudo mount /dev/sdb1 /mnt sudo umount /mnt ``` #### 4. **日志分析** - `journalctl` 查询 systemd 日志记录,适用于现代 Linux 发行版。 ```bash journalctl -xe ``` - `cat`, `less`, `tail` 读取浏览日志文件内容。 ```bash tail -f /var/log/syslog ``` #### 5. **服务管理启动配置** - `systemctl` 管理系统服务的状态服务单元的操作。 ```bash systemctl status sshd.service systemctl restart apache2.service ``` - `chkconfig` 或 `update-rc.d` 管理开机自启的服务(某些发行版可能不适用)。 #### 6. **其他实用工具** - `strace` 追踪程序执行过程中发出的系统调用。 ```bash strace ls ``` - `lsof` 列出打开的文件以及对应的进程信息。 ```bash lsof -i :80 ``` --- ### 示例代码片段 以下是一个简单的脚本,用于定期检查服务器的磁盘使用情况,并发送警报邮件。 ```bash #!/bin/bash THRESHOLD=90 DISK_USAGE=$(df / --output=pcent | grep -oE '[0-9]+') if [ "$DISK_USAGE" -gt "$THRESHOLD" ]; then echo "Warning: Disk usage is at $DISK_USAGE%" | mail -s "Disk Space Alert" admin@example.com fi ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值