温馨提示×

linux dmesg日志为何不显示

小樊
40
2026-10-18 04:44:32
栏目: 智能运维

在 Linux 中 dmesg 不显示日志,通常有下面几类原因,从最常见到较少见逐一说明,并给出对应解决办法。


一、最常见原因

1. 当前用户没有权限(最常见)

从较新内核(约 4.4+)开始,普通用户默认不能读取 dmesg,需要 CAP_SYSLOG 权限。

现象

dmesg
Permission denied

解决

sudo dmesg

或永久放开限制:

sysctl -w kernel.dmesg_restrict=0

(写入 /etc/sysctl.conf 可持久化)


2. 日志被 journald 接管(systemd 系统)

在使用 systemd 的发行版(Ubuntu / CentOS / Debian 等)中,内核日志可能只进 journald。

现象

dmesg
(空或很少)

解决

sudo journalctl -k

或:

sudo journalctl -k -b

二、内核 / 启动相关原因

3. 使用了 quiet 启动参数

GRUB 中如果加了:

quiet

内核不会把日志打印到控制台,但 dmesg 通常仍可看。
如果同时有:

loglevel=0

则几乎不记录。

检查

cat /proc/cmdline

4. 日志缓冲区太小,被覆盖

早期启动日志可能被后续日志冲掉。

查看缓冲区大小

dmesg | wc -l

可增大

sudo dmesg -C   # 清空

或调整内核参数:

log_buf_len=1M

三、系统配置问题

5. /proc/kmsg 被占用

dmesg 本质是读 /proc/kmsg,若被其他进程占用:

lsof /proc/kmsg

通常是 rsyslog / systemd-journald


6. 内核未启用 dmesg 支持(极少)

检查:

zcat /proc/config.gz | grep DMESG

或:

grep CONFIG_PRINTK /boot/config-$(uname -r)

需要:

CONFIG_PRINTK=y

四、容器 / 虚拟化环境

7. 在容器中执行 dmesg

容器通常:

  • 没有 /dev/kmsg
  • 没有 CAP_SYSLOG

现象

dmesg
klogctl: Operation not permitted

结论 容器内一般看不到宿主机 dmesg,需要在宿主机查看。


五、快速排查清单(建议顺序)

sudo dmesg            # 是否权限问题
sudo journalctl -k    # systemd 环境
cat /proc/cmdline     # 启动参数
sysctl kernel.dmesg_restrict
lsof /proc/kmsg

如果你愿意,可以告诉我:

  • 发行版(Ubuntu / CentOS / Alpine?)
  • 是否物理机 / 虚拟机 / 容器
  • sudo dmesg 的具体输出(或报错)

我可以更精确地判断原因。

0 踩