跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Linux怎么查看系统的运行模式 Linux下Systemd运行级别管理详解

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

相关文章