最可靠方式是直接读取/proc/cmdline,它原样保存本次启动实际使用的内核参数;其次可用dmesg | grep "command line"排查initramfs阶段问题;还可比对/boot/grub/grub.cfg确认grub配置是否生效。

直接读取 /proc/cmdline 是最可靠方式
系统启动后,内核会把实际用到的引导参数原样保存在 /proc/cmdline 里,这是唯一能 100% 反映“这次启动到底用了什么”的来源。它不依赖 GRUB 配置是否被修改、也不受 initramfs 阶段干扰。
执行:cat /proc/cmdline
输出是一行空格分隔的字符串,例如:BOOT_IMAGE=/vmlinuz-6.8.0-45-generic root=UUID=9f3c2a1e-... ro quiet splash vt.handoff=7
如果想逐行查看便于识别,可用:cat /proc/cmdline | tr ' ' '\n'
注意:/proc/cmdline 是只读虚拟文件,不能写入;路径拼错(比如写成 /proc/cmdline/ 带斜杠)会报 No such file or directory。
dmesg | grep "Command line" 适合 initramfs 场景排查
当系统卡在早期启动阶段(比如还没挂载 /proc)、或你怀疑当前运行的内核和预期不符时,dmesg 日志里的记录是第二手但依然可信的来源。
命令:dmesg | grep "Command line"
输出形如:[ 0.000000] Command line: BOOT_IMAGE=/vmlinuz-6.8.0-45-generic root=UUID=9f3c2a1e-... ro
要点:
• 方括号内数字是内核启动时间戳,不是错误
• 如果没输出,说明日志缓冲区已被轮转覆盖,或内核未打印该行(极少见)
• 此方法无法用于容器环境(dmesg 权限受限或无访问)
比对 /boot/grub/grub.cfg 确认是否按预期启动
/proc/cmdline 显示“实际用了什么”,而 /boot/grub/grub.cfg 记录的是 GRUB 当前默认菜单项的配置——两者应一致,不一致说明可能手动选了其他内核、或 GRUB 更新后未生效。
提取默认启动项的 linux 行:grep -A1 "linux.*root" /boot/grub/grub.cfg | grep "linux" | head -n1
常见坑:
• 普通用户无权读 /boot/grub/grub.cfg,需加 sudo
• grub.cfg 是自动生成的,手动编辑会被覆盖,应改 /etc/default/grub 后运行 sudo update-grub
• 输出中的 linux 后面才是参数,开头的路径(如 /vmlinuz-...)不属于内核参数
systemd-analyze info 提供结构化输出但有局限
如果你用的是 systemd 系统,systemd-analyze info 会把引导参数作为字段单独列出,格式清晰,适合脚本解析。
命令:systemd-analyze info | grep "Kernel command line"
输出示例:Kernel command line: BOOT_IMAGE=/vmlinuz-6.8.0-45-generic root=UUID=9f3c2a1e-... ro quiet splash
限制:
• 仅适用于 systemd 系统(CentOS 7+/Ubuntu 16.04+/Debian 8+)
• 若 systemd 启动失败或未接管 init,该命令不可用
• 它本质上也是从 /proc/cmdline 读取,只是做了封装,不提供额外信息
真正关键的不是“怎么查”,而是理解:所有方法都依赖内核已成功启动并挂载 /proc。如果系统根本起不来、卡在黑屏或 panic,/proc/cmdline 就不可达,此时只能靠 GRUB 菜单按 e 编辑临时参数,或查物理控制台日志——那已经超出“查看”范畴,属于故障诊断了。











