我想查看
dmesg
的输出,因为它发生了变化。我该怎么做?
#1 楼
相对较新的dmesg
版本提供了一个跟随选项(-w
,--follow
),其作用类似于tail -f
。,因此,只需使用以下命令:
$ dmesg -wH
(
-H
,--human
启用了用户友好的功能,例如颜色,相对时间)这些选项例如在Fedora 19中可用。
评论
好发现! Gentoo不会抱怨-H,否则会发现
–mike3996
13-10-13在16:19
用户空间工具的版本必须为2.22+。 Ubuntu用户必须等待14.10版“ utopic”
–丹尼尔·奥尔德(Daniel Alder)
2014年8月25日在7:41
Ubuntu不会-w-需要使用watch(下)
–布伦特·浮士德
16-2-24在0:19
哇,系统管理员回答使用--descriptively-named-flags而不是神秘的单字符标志。布拉沃先生布拉沃
–allyourcode
16年4月2日在4:59
从Utopic(14.10)开始,-w应该可以在Ubuntu的每个版本中使用。 (launchpad.net/ubuntu/+source/util-linux/+publishinghistory建议早期的Utopic软件包适用于2.20,但在发行时已达到2.25。)
–mwfearnley
17年8月20日在13:58
#2 楼
您可以使用恰好适合此类操作的watch
命令watch -n 0.1 "dmesg | tail -n $((LINES-6))"
$((LINES-6))
部分应使其完全适合您的终端。评论
如果您使用单引号而不是双引号(或转义美元符号),则每次调用都会获得$ LINES的新值,因此如果更改终端大小,它将进行调整。
– P爸爸
16-3-31在15:22
单引号将抑制变量扩展。此外,在此示例中,变量只扩展了一次-调用watch时。因此,在dmesg调用之间它不会真正改变。人们将需要使用一种包装来查询终端状态。
–彼得
16年4月2日在14:29
这就是重点。当外壳程序将参数传递给watch时,单引号禁止变量扩展,因此watch将执行其中包含变量表达式的命令,该表达式将由其调用的shell扩展。每一次。试试吧,它有效。
– P爸爸
16年4月2日在14:37
嗯,您是对的-我假设watch使用popen(),这意味着会生成另一个shell,然后由它提供环境变量(并在每次执行运行时更新)。好发现。
–彼得
16年4月2日在15:14
这是macOS的唯一选项,因为它提供的dmseg不实现-w标志。
– ijoseph
20-09-27在20:59
#3 楼
您不能真正直接监视dmesg
的输出。但是,您的模块很可能没有直接打印到dmesg的环形缓冲区中,而是使用了内核日志记录工具(然后用
dmesg
显示)。如果您的syslog
具有一些合理的设置(例如默认设置),则这些消息很可能也会出现在kern.log
日志文件中。所以您可以执行以下操作:
tail -f /var/log/kern.log
评论
/var/log/kern.log是特定于Linux的。对于OpenBSD(可能还有其他),dmesg内容已记录在/ var / log / messages中。当然,还有其他一些东西。
–kurtm
13-10-13在14:27
通过超级用户通过-f / var / log / {messages,kernel,dmesg,syslog}结束:是否可以尾随f-dmesg的输出
–这里
2014年5月2日,7:55
#4 楼
您可以使用dmesg
获取内核的日志消息。内核本身登录到环形缓冲区,即仅在内存中。
现在,所有
dmesg
所做的就是输出该环形缓冲区的内容。 如果执行
dmesg -c
,也会随后删除环形缓冲区。因此,您可以执行类似
while true; do dmesg -c; sleep 1; done
的操作,使其具有与无法正常工作的dmesg|tail
相同的功能。但这会删除环形缓冲区,因此需要root用户权限。另一种方法是文件
/proc/kmsg
,该文件允许查看环形缓冲区。您可以执行tail -f /proc/kmsg
,但这仅允许一个进程,通常这是您的日志记录守护程序。 -读取消息并将其写入实际文件(通常在/ var / log中)以进行读取的工作。可以将其配置为将所有消息输出到单个文件,或将不同部分输出到不同文件。 (但是配置取决于系统的日志记录守护程序。)因此,请查看
/var/log
是否有适合您需要的文件,否则请配置日志记录守护程序。评论
//,在我正在使用的CEntOS 6系统上,拖尾和查看/ proc / kmsg不会产生任何输出。 [〜] $ sudo tail -f / proc / kmsg♥%[〜] $ sudo cat / proc / kmsg♥%[〜] $
– Nathan Basanese
2015年9月4日在19:36
/ dev / kmsg更好。 unix.stackexchange.com/a/294206/5132
– JdeBP
20年1月8日在16:22
#5 楼
如果您使用的是嵌入式系统(例如OpenWrt等系统上常见的BusyBox),则其功能非常有限,并且仅支持2-3个标志。如果您想要一种快速而肮脏的打印方式随着事件的变化,屏幕上的dmesg输出会不断变化,一个简单的Bash循环就可以正常工作。这并不理想,但是正如我提到的,BusyBox dmesg缺少许多功能。我发现在命令行中输入以下内容具有相同的效果:
$ while true; do dmesg -c ; sleep 1 ; done
您可以使用Ctrl + C退出循环。sleep1是停止它不必要地浪费CPU资源,并且-c标志清除每次调用时的缓冲区,因此您不会看到每秒重复的输出。
评论
对于调试android真的很有用。
–val说恢复莫妮卡
17年8月30日在11:22
#6 楼
在使用systemd
的系统上,您还可以:# journalctl -kf
评论
Ubuntu 14.10:➜〜journalctl -kf未找到日志文件。
– Nathan Basanese
15年5月6日在11:46
#7 楼
在单独的终端上使用以下两个命令:while true; do dmesg -c >> test.txt;sleep 1; done
tail -f test.txt
将实现类似的结果。
评论
//,这基本上指示dmesg将输出附加到test.txt,对吗?第二个命令只是监视那个test.txt文件?
– Nathan Basanese
2015年9月4日在19:31
谢谢..是的..第二个命令监视dmesg的更改。 cat / proc / kmsg可以实现类似的输出,但是不会将日志保存到文件中。
– K_K
2015年9月7日下午6:56
评论
superuser.com/questions/289239/…