命令是干什么的
systemctl get-default 读出系统的默认启动目标(target),也就是开机不加特殊内核参数时 systemd 最终进入哪个 target。返回值实质是 /etc/systemd/system/default.target 这个软链接指向的单元名,作用等价于老体系的默认 runlevel。它只在 systemd 接管 PID 1 的发行版上有效(RHEL/CentOS 7 起、Ubuntu 16.04 起、Debian 9 起、SLES 12 起、openSUSE 12.3 起);SysV init 或无 systemd 的容器里这条命令没有意义。
基本信息
| 适用平台 | 所有由 systemd 引导的 Linux 发行版 |
|---|---|
| 查询语法 | systemctl get-default |
| 修改语法 | systemctl set-default <target>(永久);systemctl isolate <target>(只对本次运行生效) |
| 读取对象 | /etc/systemd/system/default.target 符号链接,指向 /usr/lib/systemd/system/ 下的目标单元 |
| 权限要求 | 查询不需要权限;set-default 与 isolate 需要 root |
| 相关命令 | systemctl list-units --type=target、systemctl list-dependencies <target> |
典型使用场景
- 装机或换镜像后核对默认进命令行还是图形界面,避免服务器白跑一套桌面组件
- 服务器瘦身:内存被桌面环境吃掉时,先确认是不是被切到了 graphical.target
- 云镜像与主机模板标准化:把默认目标写进云初始化脚本或配置管理,批量交付才一致
- 排查登录异常:判断系统是停在 rescue/emergency 目标,还是网络与认证出了问题
- 临时维护需要图形工具时用 isolate 切过去,重启后仍然回到命令行,不留后患
常用示例
常用示例
systemctl get-default # 查当前默认目标,常见返回 multi-user.target
systemctl set-default multi-user.target # 永久切到命令行模式(内部维护 default.target 软链接)
systemctl get-default # 复核返回值确实变了
systemctl isolate multi-user.target # 本次运行立即切换,停掉不在依赖链上的图形服务
readlink -f /etc/systemd/system/default.target # 等价查看软链接指向的真实单元文件
systemctl list-units --type=target --all # 列出全部 target 及加载/激活状态
ls -l /etc/systemd/system/default.target # 确认指向的单元文件确实存在,没有断链target 与旧 runlevel 对照
| 默认目标单元 | 含义 | 旧 runlevel |
|---|---|---|
| multi-user.target | 多用户命令行模式,基础服务全开但没有图形登录 | 3 |
| graphical.target | 在 multi-user 基础上再拉起图形登录管理器 | 5 |
| rescue.target | 单用户救援:挂载本地文件系统、只起基础服务 | 1 |
| emergency.target | 最小紧急 shell,根文件系统默认只读,需手动改挂载 | 无对应 |
| reboot.target / poweroff.target | 重启 / 关机这两个动作的目标 | 6 / 0 |
返回值的读法
返回值的读法
# 正常输出就一个单元名:multi-user.target
# 报 System has not been booted with systemd as init system (PID 1). Can't operate.
# 说明当前环境不是 systemd 引导(容器、chroot、init=/bin/bash),该值无参考价值
ps -p 1 -o comm= # 先确认 PID 1 是不是 systemd
systemctl get-default # 是 systemd 再看默认目标才有意义set-default 只改指向,不会改变当前正在运行的状态;要让改动立即生效必须用 isolate,而 isolate 会停掉不在目标依赖链上的服务,远程执行前想清楚会中断什么。
rescue 与 emergency 目标常用于改密码、修根文件系统。emergency 下根分区通常是只读挂载,改文件前要先 mount -o remount,rw /,否则会误判成磁盘写保护。
容器、chroot 与 systemd-nspawn 里这条命令可能直接报错:默认目标由容器运行时决定,改宿主的 default.target 对容器内进程无效。