dmesg命令是用来在Unix-like系统中显示内核的相关信息的。dmesg全称是display message (or display driver),即显示信息。
实际上,dmesg命令是从内核环形缓冲区中获取数据的。当我们在Linux上排除故障时,dmesg命令会十分方便,它能很好地帮我们鉴别硬件相关的error和warning。除此之外,dmesg命令还能打印出守护进程相关的信息,已帮助我们debug。
本文中,我们会讨论一下比较实用的几个dmesg具体命令。
默认显示选项
dmesg
这个是Mac下的dmesg命令:
这是Linux(树莓派)下的dmesg命令:
需要注意的是,某些情况下(如在Mac下),需要sudo。
如果太长了可以像以上一样后接管道和head命令,或后接管道和less或more。
显示和内存、硬盘、USB、TTY相关的信息
dmesg | grep -i memory
dmesg | grep -i dma
dmesg | grep -i usb
dmesg | grep -i tty
好吧,这个不应该算是dmesg的技巧,应该算是linux管道的技巧。
如果全都要,可以:
dmesg | grep -E "memory|dma|usb|tty"
然后输出大概如下:
读后删选项
如果想要在读取dmesg后,删除已读的日志,可以加上-C
选项:
dmesg -C
输出日志显示颜色
如果输出的日志是纯白或纯黑的,就会显得很不友善,想要colorful就可以加上-L
选项:
dmesg -L
实际情况是,我试了一下根本没有显示颜色,而help里面还说color是默认开启的,迷惑中。
只输出特定类型的信息
比如说,我只想输出守护进程的信息:
dmesg --facility=daemon
效果如下:
其中facility选项还可以填入,kern、user、mail、daemon、auth、syslog、lpr、news。
奇怪,现在倒是默认地显示出颜色来了。
只输出特定级别的信息
有的时候我们只要要error以及warning,不要别的等级的信息,可以使用如下命令:
dmesg --level=err,warn
然后系统的error以及程序员都不看的warning就展示了出来:
level选项还可以填入别的等级,例如emerg、alert、crit、err、warn、notice、info、debug。
显示时间戳
需要注意到的是,dmesg命令默认的时间显示是从开机到log记录的时间,说实话,这样对于人类来说真的不方便,我们需要时间:
dmesg -T
相信我,舒服多了。
更进一步,把级别也显示出来:
dmesg -Tx
显示原始数据
dmesg默认输出的信息是处理过的,想要显示原始数据(raw data):
dmesg -r
根据原始数据,我们不难猜出,<6>就是info级别、<5>就是notice级别等等的转译细节。
先这样吧
若有错误之处请指出,更多地关注煎鱼。