正确答案为使用systemctl list-units --type=target --state=active可查看当前实际运行模式,如multi-user.target或graphical.target;systemctl get-default仅显示默认启动目标,不反映实时状态。
Linux 已经没有传统意义上的“运行级别”了,systemd 用 target 替代它;直接看和就能知道当前系统实际在跑什么模式。
怎么查当前运行模式(不是 runlevel)
在 systemd 系统里,
命令只是个兼容性包装,输出的数字(比如
)不反映真实状态,只表示历史映射关系。真正起作用的是 target。
:查默认启动目标,比如
或
:列出当前**激活中**的 target,重点关注带
状态的那个(如
),它才是当前运行模式的权威标识
:能看到数字 runlevel 到 target 的软链映射,比如
,这说明“3”只是别名,不是独立机制
为什么
显示 N 3 却没进命令行?
常见于桌面环境误配或服务冲突。现象是:终端里执行
返回
,但 GUI 正常运行,
却显示 active。
根本原因:
只读取 /var/run/utmp 中的“上一次 init 调用参数”,而 systemd 不依赖这个字段做决策
典型诱因:
依赖
,所以后者必然 active,但前者才是主导模式;
抓到的是依赖链里的中间态
验证方法:运行
,常能看到
在其中 —— 这说明它被更高层 target 拉起来了
切换运行模式必须用
或
在 systemd 系统里已失效(除非启用了 sysvinit 兼容层,但不推荐)。强行调用可能卡住或触发不可预期的服务启停。
Docker Desktop(linux)
当前 Docker 最新稳定版本之一,主要针对稳定性和兼容性进行了修复优化,适合生产环境与日常开发使用。该版本继续强化 AI 开发支持、容器日志管理以及 Docker Engine 的安全能力,对 Windows/macOS/Linux 平台兼容性进行了进一步优化。
下载
安全切换命令:
(进纯命令行)或
(进桌面)
注意:
会停止所有不属于目标依赖树的服务,比
更彻底;不要在远程 SSH 会话里对
执行 isolate,否则图形会话可能断连
临时生效:加
避免命令阻塞,但不改变服务实际状态顺序
修改默认启动模式要改 target,不是编辑 /etc/inittab
/etc/inittab 在 CentOS/RHEL 7+、Ubuntu 16.04+ 等主流发行版中已被忽略。改它完全无效。
设默认命令行:
设默认桌面:
执行后会自动创建 /etc/systemd/system/default.target 软链接,指向对应 target 文件
若 GRUB 启动时想临时覆盖,默认 target 仍有效;需在内核参数加
(不是数字 3)
真正容易被忽略的是:target 之间不是互斥开关,而是依赖图谱。一个服务可能同时属于多个 target 的依赖链,
的行为取决于整个依赖拓扑,而不是简单“切换数字”。盯着
输出判断系统状态,等于看汽车仪表盘上的转速表判断油量。
systemctl get-defaultsystemctl list-units --type=targetrunlevelN 3systemctl get-defaultgraphical.targetmulti-user.targetsystemctl list-units --type=target --state=activeactivemulti-user.targetls -l /lib/systemd/system/runlevel*.targetrunlevel3.target → multi-user.targetrunlevelrunlevelN 3systemctl status graphical.targetrunlevelgraphical.targetmulti-user.targetrunlevelsystemctl list-dependencies --reverse multi-user.targetgraphical.targetsystemctl isolateinit 3telinit 5systemctl isolate multi-user.targetsystemctl isolate graphical.targetisolatestartgraphical.target--no-blocksystemctl set-default multi-user.targetsystemctl set-default graphical.targetsystemd.unit=multi-user.targetisolaterunlevel