who -r 最可靠,因它不依赖 init 系统类型,直接读取 utmp 记录当前实际运行级别,输出明确标出 run-level X;runlevel 易误读首字段,systemctl get-default 仅显示默认目标而非当前状态。

直接看当前运行级别,用 who -r 最可靠;runlevel 次之,但输出格式容易误读;systemctl get-default 查的是默认目标,不是当前状态。
为什么 who -r 是首选
它不依赖 init 系统类型(sysvinit 或 systemd),也不管你是否改过默认 target,只反映系统此刻实际处于哪个运行级别。输出里明确标出 run-level X,一眼就能确认。
- 执行
who -r后若看到run-level 3,说明当前就是运行级别 3(多用户文本模式) - 如果系统刚启动、尚未切换过级别,
who -r仍能正确显示当前值,不像runlevel那样返回N 3容易让人困惑“N 是啥” - 某些容器环境或精简系统可能没装
runlevel,但只要用了标准的 login + utmp 记录机制,who -r就能工作
runlevel 输出格式容易踩坑
它返回两个字段:“上一个 运行级别”,中间空格分隔。第一个字段常是 N(Not set),不代表错误,只是说明系统自启动后没切换过级别。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
-
runlevel输出N 5→ 当前是 5,之前没设过 -
runlevel输出3 5→ 刚从 3 切到 5 - 别把第一个字段当“当前”,这是最常见误读点
- 在部分 systemd 系统上,
runlevel可能返回unknown或直接报错,因为它本质是兼容层命令
systemctl get-default 查的是默认,不是当前
这个命令只告诉你开机时会进哪个 target(比如 graphical.target),和当前实际状态无关。系统可能手动切到了别的级别,但 get-default 完全不体现这点。
-
systemctl get-default返回multi-user.target→ 默认对应运行级别 3,但当前可能是 1 或 5 - 想确认当前状态时,拿这个结果去推断是危险的,尤其在运维排查中
- 真正需要查“当前”就别碰它,留着改默认设置用就行
真正关键的不是记几个命令,而是分清“当前状态”和“默认配置”的区别——who -r 唯一忠实反映前者,其余都带干扰项。服务器出问题时,第一反应该敲的只有这一条。

















