在 Debian 系统中 dmesg 没有输出(或只有很少内容),通常不是命令坏了,而是内核环形缓冲区为空或当前用户无权访问。下面按最常见原因逐一说明。
从 Linux 4.4+ / Debian 9+ 开始,默认限制了 dmesg 的访问:
dmesg
# 可能报:
dmesg: read kernel buffer failed: Operation not permitted
内核参数:
kernel.dmesg_restrict = 1
sudo dmesg
sudo sysctl kernel.dmesg_restrict=0
echo "kernel.dmesg_restrict=0" | sudo tee /etc/sysctl.d/99-dmesg.conf
sudo sysctl --system
dmesg 显示的是 内核环形缓冲区(ring buffer),容量有限:
旧日志会被新日志覆盖。
sudo dmesg | wc -l
看持久化日志更可靠:
journalctl -k # 内核日志
journalctl -b # 本次启动全部日志
Debian(尤其是桌面/服务器版)使用 systemd-journald:
dmesgjournalctlsudo journalctl -k
sudo journalctl -k -b -1 # 上一次启动
GRUB 中常见:
linux /vmlinuz root=... quiet
效果:
可去掉 quiet:
sudo vim /etc/default/grub
# 删除 quiet
sudo update-grub
以下情况 dmesg 可能:
为空
或直接被禁止
Docker(默认无权限)
LXC
某些 VPS(OpenVZ 等)
示例:
docker run --privileged
sudo dmesg -C
会清空 ring buffer(一般人为操作)
whoami
sudo dmesg # 是否有权限
sudo journalctl -k # 是否有日志
uname -a
cat /proc/sys/kernel/dmesg_restrict
Debian 下
dmesg无输出,90% 是因为dmesg_restrict=1,用sudo dmesg或journalctl -k即可。
如果你愿意,可以贴一下:
sudo dmesg 的输出或报错cat /proc/sys/kernel/dmesg_restrict我可以更精准判断。