如何在 Linux 上使用 dmesg 命令 |
您所在的位置:网站首页 › 虚拟机运行程序命令是什么 › 如何在 Linux 上使用 dmesg 命令 |
看到一篇讲解 dmesg 很好的英文文章,这里翻译一下,以下是译文。 dmesg 命令可以让你更深入的了解 Linux 启动的潜在过程,可以从内核的环形缓冲区(ring buffer)查看并监视硬件设备和驱动消息。 一、Linux 环形缓冲区是如何工作的呢 ? 在 Linux 和类 Unix 系统中,引导和启动是计算机开机后,事件序列中两个不同的阶段。 引导过程(BIOS或UEFI,MBR和GRUB)会初始化系统,这时内核被加载进内存,并且连接到初始 ramdisk(initrd或initramfs),然后,systemd被启动。 然后,启动过程继续完成初始化操作系统的工作。在初始化阶段的早期,日志记录 daemons(例如:syslogd或rsyslogd)尚未启动及运行。为了避免在初始化阶段丢失明显的错误消息和警告,内核包含了一个可以储存消息的环形缓冲区。 环形缓冲区是用于存储消息的内存空间,它设计简单,固定大小。当存储满时,最新的消息会覆盖最旧的消息,所以被称作是“环形缓冲区”。 内核环形缓冲区能够存储消息,比如:设备驱动程序的初始化消息,硬件消息以及内核模块消息。因为它包含低等级的启动消息,所以环形缓冲区非常适合于查看硬件错误或其它启动问题。 二、dmesg 命令 dmesg 命令可以查看环形缓冲区中的消息。默认情况下,执行 dmesg 需要添加 sudo。 $ sudo dmesg环形缓冲区中的所有消息都被显示到终端窗口中。 通常会输出很多的消息,这可以通过 less 命令来解决: $ sudo dmesg | less这样,我们就可以滚动查找我们需要的内容。 你可以使用搜索功能来定位并高亮你想要搜索的内容,在 less 命令中使用 “/” 来进行搜索。 三、不使用 sudo 如果你不想每次执行命令都要添加 sudo,可以进行如下设置。但是,要注意的是:这会让你计算机上的任何账户都不必使用 sudo 来执行 dmesg。 $ sudo sysctl -w kernel.dmesg_restrict=0四、输出中添加颜色 默认情况下,dmesg 的输出带有颜色,如果不是这样,你可以在执行命令时添加 -L 参数。 $ sudo dmesg -L为了强制执行 dmesg 命令时,默认有颜色输出,使用如下命令: $ sudo dmesg --color=always五、人性化时间戳 默认情况下,内核启动后,dmesg 使用时间戳记录秒和纳秒,如果想要更人性化的输出,可以使用 -H (human) 参数。 $ sudo dmesg -H这会带来两个问题。 六、人们可读的时间戳 如果你并不需要十亿分之一秒的精度,但是你希望时间戳比默认时间戳更易于阅读,那就使用 -T (human readable) 参数(这里可能让你有点困惑,-H 是 “human” 参数,-T 是“human readable” 参数)。 $ sudo dmesg -T时间戳显示为标准日期和时间,但分辨率降低到一分钟。 一分钟内发生的所有事件都具有相同的时间戳。如果你只关心事件顺序,那这就足够了。另外,请注意,你将在命令提示符处转储回去,此操作不会自动减少调用。 七、查看活动的事件 为了查看到达内核环形缓冲区中的消息,可以使用 --follow(等待消息) 参数。这可能看起来有点陌生。如果使用环形缓冲区来存储启动序列期间事件的消息,那么,一旦计算机启动并运行,实时消息如何到达环形缓冲区中呢? 连接到计算机的硬件产生的任何变化都被发送到内核环形缓冲区中。在更新或添加内核模块时,你将会在环形缓冲区中看到相应事件的消息。 如果插入USB驱动器、连接或断开蓝牙设备,都会看到 dmesg 消息输出。甚至虚拟硬件也将导致新消息出现在环形缓冲区中。 启动虚拟机,您将看到环形缓冲区中产生新消息。 $ sudo dmesg --follow请注意:执行命令后不会返回到命令提示符下。当新消息出现时,它们将显示在 dmesg 终端窗口的底部。 甚至挂载一个 CD-ROM 磁盘也会产生日志,因为挂载后,CD-ROM磁盘的内容就会进入到目录树中。 要退出 dmesg 实时消息,请使用 Ctrl+C。 八、检索最近的 10 条消息 使用 tail 命令检索最后十个内核环形缓冲区消息。当然,你也可以检索任意数量的消息。 检索十个只是一个例子。 $ sudo dmesg | tail -10检索最后十条消息并在终端窗口中列出。 九、搜索特定术语 使用 grep 将 dmesg 的输出通过管道传输以搜索特定的字符串或模式。在这里,我们使用 -i(忽略大小写)参数,以便忽略匹配字符串的大小写。 我们的结果将包括“usb”和“USB”以及任何其他大小写组合,如下所示: $ sudo dmesg | grep -i usb高亮显示了搜索出的结果: 我们可以隔离包含对系统sda上第一个SCSI硬盘的引用的消息。(实际上,现在第一个SATA硬盘和USB驱动器也使用sda) $ sudo dmesg | grep -i sda所有关于sda的消息都将被检索,并在终端窗口中列出。 想要使用 grep 一次搜索多个关键词,请使用 -E(扩展正则表达式)参数。 你必须在带引号的字符串中使用管道“ |”符号分隔不同的搜索词,如下所示: $ sudo dmesg | grep -E "memory|tty|dma"终端窗口中会列出与任意搜索词相匹配的内容,如下所示: 十、使用日志级别 记录到内核环形缓冲区的每个消息都有一个附加的级别。 级别表示信息的重要性。 包含的级别有: emerg : 系统无法使用;alert : 必须立即采取措施;crit : 严重的情况;err : 错误;warn : 警告;notice : 正常但是重要的情况;info : 消息;debug : 调试信息;通过使用 -l(level)参数并将级别的名称作为命令行参数传递,可以提取与特定级别匹配的消息。 如果查看“informational”级别的消息,请使用如下命令: $ sudo dmesg -l info列出的所有消息都是"info"消息。 它们不包含错误或警告,仅包含有用的通知。 可以在一个命令中组合两个或多个日志级别,以检索多个日志级别的消息: $ sudo dmesg -l debug,noticedmesg的输出是所查询日志级别的消息的混合: 十一、设备类别 dmesg消息分可以根据“设备”的类别分成多个组“设备”。 设备的清单是: kern : 内核消息;user : 用户级别的消息;mail : 邮件系统;daemon : 系统守护程序;auth : 安全/授权消息;syslog : 内部 syslogd 消息;lpr : 行式打印机子系统;news : 网络消息子系统;我们可以要求 dmesg 过滤其输出,以仅显示特定设备中的消息。为此,我们必须使用-f(功能)选项: $ sudo dmesg -f daemondmesg 在终端窗口中列出了与守护程序有关的所有消息。 正如我们对级别所做的那样,我们可以要求dmesg一次列出多个设施的消息: $ sudo dmesg -f syslog,daemon输出是syslog和daemon日志消息的混合。 十二、设施与等级相结合 -x(解码)选项使dmesg将设备和级别显示为人性化可读的每行的前缀。 $ sudo dmesg -x在每一行的开头可以看到具体的设备和级别: 在上图中,第一行突出显示的部分是来自“kernel”设备的消息,级别为“notice”。 第二行突出显示的部分是来自“kernel”设备的消息,级别为“info”。 这太好了,但是为什么呢? 简而言之,就是发现故障。 如果你遇到某个硬件无法识别或行为不正常的问题,则dmesg可能会对该问题有所帮助。 使用 dmesg 可以查看从最高级别到每个较低级别的消息,以查找涉及硬件的任何错误或警告,或者可能的相关问题;使用 dmesg 搜索命令列出的设备,以查看它们是否包含任何有用的信息;将 dmesg 产生的消息通过管道传递给命令 grep,以便查找相关的字符串或标识符,例如产品制造商或型号;将 dmesg 产生的消息通过管道传递给命令 grep,以便查找通用术语,比如:“ gpu”、“ storage”、“ failure”、“ failed”或“ unable”;使用 --follow 参数,实时查看 dmesg 消息。声明:以上为译文,如若侵权请联系作者删除! 原文链接:How to Use the dmesg Command on Linux |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |