systemctl set-default是唯一可靠的永久修改方式:CentOS 7中,/etc/inittab已被废弃,必须通过该命令将default.target符号链接修改为multi-user.target(命令行)或graphical.target(图形界面),修改后需重启才能生效。

systemctl set-default 是唯一推荐的永久修改方式
CentOS 7 已经将 /etc/inittab 彻底废弃,任何对该文件的编辑都是徒劳无功的。systemd 的 target 取代了运行级别,要想永久生效,必须通过 systemctl set-default 来修改符号链接 /etc/systemd/system/default.target。
常见错误是误用 init 3 或 systemctl isolate multi-user.target —— 这些只能临时切换当前会话的 target,重启后立即还原。
systemctl set-default multi-user.target:设为类 runlevel 3(纯命令行,无图形)systemctl set-default graphical.target:设为类 runlevel 5(带 GUI)- 执行后会自动删除旧链接、创建新软链,目标路径固定为
/usr/lib/systemd/system/xxx.target(不是/lib/,尽管两者常为同义挂载) - 修改后无需手动重启,但新 default 要等下次 boot 才生效
runlevel 命令还能用,但输出含义变了
runlevel 命令在 CentOS 7 中仍可用,但输出不再是传统两位数字(如 3 5),而更可能是 N 3 或 3 5 —— 第一个字符表示「上一次运行级别」,N 表示「未定义(None)」,第二个才是当前实际 target 对应的 runlevel 数字。
真正可靠的方式是:
- 查当前默认:
systemctl get-default(返回multi-user.target或graphical.target) - 查当前已激活的 target:
systemctl list-units --type=target --state=active - 不要依赖
runlevel判断默认设置,它不读取default.target
手动 ln -sf 操作风险高,不建议直接用
虽然 ln -sf /usr/lib/systemd/system/multi-user.target /etc/systemd/system/default.target 理论上可行,但容易出错:
- 路径写错(比如用了
/lib/而非/usr/lib/,某些最小化安装中/lib不是 symlink 到/usr/lib) - 权限不足导致软链创建失败,且无提示
- 绕过
systemctl set-default会跳过 systemd 内部校验,可能引发后续systemctl daemon-reload异常 systemctl set-default会自动执行systemctl daemon-reload,手动 ln 不会
multi-user.target 和 graphical.target 的关键区别
这两个 target 不只是“有没有桌面”的区别,底层服务集差异明显:
multi-user.target默认不启动gdm、gnome-session、plymouth-quit-wait.service等图形相关单元graphical.target依赖multi-user.target,额外拉起显示管理器和桌面环境,内存占用多 200–400MB- 即使装了 GNOME 包,若 default 是
multi-user.target,开机也不会自动进图形界面 - 服务器场景强烈建议用
multi-user.target:减少攻击面、缩短启动时间、避免 X11 相关日志刷屏
target 之间没有隐式层级关系,runlevel3.target 只是 multi-user.target 的别名软链,改任何一个都不会影响另一个。