target 是什么
target 是 systemd 里的一组单元,用来替代传统 SysV 的 runlevel:multi-user.target 相当于多用户文本模式(runlevel 3),graphical.target 相当于图形模式(runlevel 5),rescue.target 相当于单用户救援模式(runlevel 1)。target 本身几乎不做具体工作,它是依赖关系的锚点与分组:把一批服务挂到某个 target 的 WantedBy 下,启动该 target 就会连带拉起它们。
基本信息
| 适用平台 | Linux(systemd) |
|---|---|
| 常用命令 | systemctl get-default / set-default / isolate / list-units --type=target |
| 默认目标 | /etc/systemd/system/default.target,通常是指向 multi-user.target 或 graphical.target 的符号链接 |
| 常见 target | poweroff、rescue、emergency、multi-user、graphical、reboot |
| 权限说明 | set-default 与 isolate 需要 root |
典型使用场景
- 服务器统一为文本模式:set-default multi-user.target,避免不必要的图形栈占用资源
- 系统救援:系统不可达时从控制台切 rescue.target 做最小化维护
- 确认启动链:用 list-dependencies 看某个 target 到底会拉起哪些单元
- 排查服务不自启:确认单元的 WantedBy 目标是否与默认 target 一致
- 无人值守设备:把图形与不必要的服务从启动链里摘掉,缩短启动时间
常用示例
常用示例
systemctl get-default # 查看当前默认启动目标
systemctl set-default multi-user.target # 设为文本模式,服务器常用
systemctl isolate rescue.target # 临时切救援模式,谨慎使用
systemctl list-units --type=target # 列出已加载的 target
systemctl list-dependencies multi-user.target | head -30 # 看依赖链里有哪些单元
ls -l /etc/systemd/system/default.target # 直接看默认目标的软链接指向runlevel 对照
| target | 传统 runlevel | 用途 |
|---|---|---|
| poweroff.target | 0 | 关机 |
| rescue.target | 1 | 单用户救援,需要 root 口令 |
| multi-user.target | 3 | 多用户文本模式,服务器默认 |
| graphical.target | 5 | 图形界面模式 |
| reboot.target | 6 | 重启 |
| emergency.target | 无对应 | 最小环境,几乎不挂载文件系统 |
get-default 看的就是 /etc/systemd/system/default.target 这个符号链接,set-default 做的是重建该链接,所以手工改链接也能达到同样效果,只是用命令更不容易出错。别把它和 grub 的默认启动项混淆:后者决定引导菜单选哪个内核,systemd 的默认目标是在内核起来之后才生效,两层各管一段。
isolate 会停掉不在目标依赖链里的单元:远程 isolate rescue.target 会连带断开 SSH,务必先确认有控制台或带外管理可用。isolate 与重启不同,它不会清理与系统单元无关的普通用户进程。
判断一个服务是否会开机自启,看的是它有没有被某个 target 或其它已启用单元 WantedBy;systemctl is-enabled 只能说明单元自身的启用状态,不等于它在启动链里真的会被拉起。排查自启问题要顺着 systemctl list-dependencies default.target 这条链看。
切到 graphical.target 只是启动图形相关的单元,并不会替你安装图形栈;反过来从图形切回文本模式,isolate 会停掉 display-manager 之类的单元,但已经打开的图形会话进程不一定立刻退出。