在 Debian(以及大多数现代 Linux 发行版)上,dmesg 没有输出,通常不是命令坏了,而是权限或内核环形缓冲区被清空导致。下面按常见原因逐一说明和对策。
从 Linux 4.4+ 开始,默认限制了 dmesg 的访问权限。
$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
或直接没有任何输出(不同版本表现不同)
/proc/sys/kernel/dmesg_restrict = 1
sudo dmesg
或临时允许:
sudo sysctl kernel.dmesg_restrict=0
永久允许(不推荐服务器):
echo "kernel.dmesg_restrict=0" | sudo tee /etc/sysctl.d/dmesg.conf
sudo sysctl -p
sudo dmesg -C
loglevel=0 启动参数cat /proc/kmsg
(若也为空,基本说明缓冲区已被清)
Debian 使用 systemd 后,很多日志转到 journald。
journalctl -k
或:
journalctl -k -b
检查:
cat /proc/cmdline
常见问题:
quietloglevel=0initcall_debug 没开以下环境 dmesg 本就可能无输出:
验证:
ls -l /proc/kmsg
sudo dmesg # 是否有权限
journalctl -k # systemd 日志
cat /proc/sys/kernel/dmesg_restrict
uname -a
如果你愿意,可以贴出:
cat /etc/debian_version)sudo dmesg 的完整输出或报错我可以更精确判断原因。