systemctl isolate 是 systemd 中用于动态切换运行目标(target)的命令,它激活指定 target 并停用所有与其冲突的非依赖服务,实现状态收敛,类似传统 init 的 runlevel 切换但更精确安全。

systemctl isolate 是 systemd 中用于瞬时切换运行目标(target)的命令,它不重启系统、不终止当前会话,而是按需启动或停止服务,使系统“进入”指定 target 所定义的状态。这种切换是动态的、可逆的,适用于日常运维和调试。
什么是 isolate?它和普通启动/停止的区别在哪?
isolate 的本质是:
- 激活目标 target(如
graphical.target),同时停用所有与该 target 冲突的、非依赖的服务和 target; - 它不是简单地
start一个 target,而是执行一次“状态收敛”——确保系统只运行该 target 及其依赖链中的单元,其余无关单元被停止; - 类似于传统 init 系统中
init 3或init 5的效果,但更精确、更安全。
⚠️ 注意:
isolate不会杀死当前登录的 shell 或 SSH 会话(只要这些会话不依赖被停用的服务),但图形界面进程(如gdm,sddm)或终端管理器(如getty实例)可能被启停,从而影响当前交互环境。
常用 target 切换命令及效果
-
切换到字符界面(多用户模式)
sudo systemctl isolate multi-user.target
效果:关闭图形显示管理器(如 GDM)、桌面环境;保留网络、SSH、systemd-journald 等核心服务;TTY 终端保持可用。
-
切换到图形界面
sudo systemctl isolate graphical.target
效果:启动显示管理器(如
gdm.service)、桌面会话服务;若此前未启用图形相关服务,此时会自动拉起依赖链。 -
切换到救援模式(单用户)
Kadence Theme Design System下载使用 Kadence 主题作为 WordPress 项目的设计系统,涵盖设计令牌、布局系统、页头/页脚/导航设置以及页面/归档/单篇文章模板。
sudo systemctl isolate rescue.target
效果:停用大多数服务,仅保留基础系统、本地文件系统、root shell;适合紧急修复。
-
切换到应急模式(minimal)
sudo systemctl isolate emergency.target
效果:仅挂载根文件系统、启动
sysinit.target后即进入 root shell;无网络、无用户登录。
切换过程的关键行为说明
- systemd 会比较当前 active 的 target 和目标 target 的依赖图,自动 stop 不属于新 target 依赖树的服务(如
gdm.service在切到multi-user.target时会被 stop); - 属于新 target 的 required 或 wanted 服务会被 start(如
getty@tty1.service在multi-user.target下默认启用); - 已激活但非冲突的服务(例如你手动 start 的
nginx.service)通常保持运行,除非它明确 Conflicts= 或被 target 的 unit 文件禁用; - 切换后,
systemctl get-default返回值不变——它只决定开机默认 target,不影响当前 isolate 行为。
如何确认当前 target 和切换结果?
-
查看当前活跃的 target:
systemctl list-units --type=target --state=active
-
查看默认启动 target(开机目标):
systemctl get-default
-
查看上次运行级别(兼容性输出):
runlevel
输出形如
N 3:N表示无前级(首次启动或未记录),3表示当前处于multi-user.target(即 runlevel 3)。
小心这些常见问题
- 如果你在图形界面下执行
isolate multi-user.target,桌面会直接退出,但你的 SSH 连接通常不受影响(前提是sshd.service仍在multi-user.target范围内); - 某些发行版(如 Ubuntu Desktop)将
graphical.target设为默认,但multi-user.target仍完全可用,无需修改默认设置; - 不建议在生产服务器上频繁 isolate 到
rescue.target或emergency.target,除非明确需要隔离环境; -
isolate是幂等操作:重复执行同一 target 不会报错,也不会重复启动已运行的服务。
不复杂但容易忽略。

















