正确答案为使用systemctl list-units --type=target --state=active查看当前实际运行模式,如graphical.target;systemctl get-default仅显示默认启动目标,不反映实时状态。

Linux 用 systemd 后,不再有传统 runlevel,取而代之的是 target(目标)。查看“默认运行级别”实际就是查默认启动目标;而“目标状态”指的是当前真正生效的运行模式,两者不一定相同。
查默认启动目标
这是系统开机时自动进入的 target,不随当前运行状态变化:
-
systemctl get-default:直接输出默认目标,比如
graphical.target或multi-user.target -
读取配置文件:
ls -l /etc/systemd/system/default.target,它是个软链接,指向真正的默认 target 文件
查当前实际运行的目标
这个反映系统此刻真实在跑什么模式,比 runlevel 更准确:
-
systemctl list-units --type=target --state=active:列出所有激活中的 target,重点关注带
active状态的那个(如graphical.target或multi-user.target) - 注意:
runlevel和who -r显示的是历史映射值(比如 N 5),它们读的是/var/run/utmp,不是实时决策依据
看 runlevel 到 target 的对应关系
方便你理解数字编号的含义(只是别名,不是机制):
-
ls -l /usr/lib/systemd/system/runlevel*.target:能看到runlevel3.target → multi-user.target这类软链 - 常见映射:
runlevel0.target(关机)、runlevel1.target(救援模式)、runlevel3.target(命令行多用户)、runlevel5.target(图形界面)
为什么默认是 graphical.target,却显示 runlevel N 3?
这不是矛盾,而是依赖关系导致的表象:
-
graphical.target依赖multi-user.target,所以后者必然 active,但主导模式仍是前者 - 用
systemctl list-dependencies --reverse multi-user.target能看到graphical.target在其中,说明它被上层拉起 - 此时真正生效的是图形界面,
runlevel显示的 3 只是兼容性映射,不可当作当前模式判断依据











