应使用systemctl list-units --type=target --state=active查看当前激活的target(如multi-user.target或graphical.target),它反映实时运行模式;systemctl get-default仅显示默认启动目标,不表示当前状态。

Linux 中没有统一、实时的“运行级别”概念,尤其在 systemd 系统(CentOS 7+、Ubuntu 16.04+、Debian 8+)上,runlevel 和 init N 只是兼容性接口,背后实际映射的是 target 单元。直接查 runlevel 或 who -r 可能显示过时值,尤其在图形会话已启动但未通过 display-manager 正常接管时。
怎么查当前生效的系统目标(替代 runlevel)
systemd 系统不维护传统 runlevel 状态,而是根据激活的 target 判断“等效级别”。最可靠的方式是看当前激活的 target:
-
systemctl list-units --type=target --state=active—— 查所有活跃 target,重点关注multi-user.target(等效 runlevel 3)或graphical.target(等效 runlevel 5)是否在列表中 -
systemctl get-default—— 只显示默认启动目标,**不代表当前状态**;比如你设了graphical.target为默认,但手动停掉 gdm3 后,当前其实是multi-user.target活跃,而get-default仍返回graphical.target -
systemctl is-active multi-user.target或systemctl is-active graphical.target—— 返回active或inactive,比runlevel更准确反映实际运行状态
为什么 runlevel 和 who -r 经常不准
这两个命令依赖 init 进程(PID 1)记录的“历史运行级别”,但 systemd 不强制更新该字段。常见失准场景:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 用
systemctl stop gdm3停掉桌面后,runlevel仍显示5,因为 PID 1 没被通知“降级” - 从图形界面切到 TTY2(
Ctrl+Alt+F2)再登录,who -r仍显示run-level 5,它只看初始启动时的设定,不感知会话切换 - 某些容器或云镜像里
/proc/1/cmdline是systemd,但runlevel命令根本没被编译进精简版 busybox,直接报 command not found
切换多用户(CLI)和图形界面的实操要点
不要依赖 init 3 或 init 5 —— 它们在 systemd 系统上只是调用 systemctl isolate 的包装,且可能被策略禁用(如 SELinux 或 display-manager 自保护)。正确做法是:
- 临时切到纯命令行:
sudo systemctl isolate multi-user.target—— 会终止图形会话、关闭 X/Wayland、停掉 gdm3/sddm,但保留网络、SSH、systemd-logind 等基础服务 - 临时切回图形界面:
sudo systemctl isolate graphical.target—— 要求 display-manager 服务(如gdm3.service)已启用且未被 mask;否则报错Failed to start graphical.target: Unit graphical.target failed to load: No such file or directory. - 永久设为命令行启动:
sudo systemctl set-default multi-user.target—— 修改/etc/systemd/system/default.target的软链接,重启后生效 - 注意:
isolate不等于start;systemctl start graphical.target无效,target 必须用isolate或switch-root激活
图形界面起不来?先确认 display-manager 服务状态
很多“切不到图形界面”的问题,根源不在 target,而在 display-manager 本身没跑起来:
- 查服务名:
systemctl list-unit-files | grep display-manager—— 常见有gdm3.service(GNOME)、sddm.service(KDE)、lightdm.service(轻量) - 查是否启用:
systemctl is-enabled gdm3—— 若返回disabled,需sudo systemctl enable gdm3 - 查是否运行中:
systemctl status gdm3—— 关键看 Active 行是否为active (running),以及日志里有没有X server failed或PAM authentication error - 若
isolate graphical.target后黑屏或卡住,大概率是 Xorg 配置错误或显卡驱动未加载,此时journalctl -u gdm3 -n 50 --no-pager比反复按init 5有用得多
真正要命的不是记不住 0–6 的含义,而是混淆“默认启动目标”“当前激活 target”“display-manager 服务状态”这三层。哪怕 systemctl get-default 显示 graphical.target,只要 gdm3 被 mask 了,或者 multi-user.target 正在被 isolate 锁定,图形界面就永远启不来。

















