10.3. 使用 systemd 目标
之前版本的 Red Hat Enterprise Linux(使用 SysV init 或 Upstart 发布)实施了一组代表特定操作模式的预定义运行级别。这些运行级别从 0 到 6,由系统管理员启用特定运行级别时要运行的系统服务选择定义。在 Red Hat Enterprise Linux 7 中,运行级别的概念已被 systemd 目标替代。
systemd 目标由目标单元表示。目标单元以 .target
文件扩展名结尾,它们的唯一用途是通过依赖项链将其他 systemd 单元分组在一起。例如,用于启动图形会话的 graphical.target
单元将启动系统服务,如 GNOME 显示管理器(gdm.service
)或帐户服务(accounts-daemon.service
),还激活 multi-user.target
单元。同样,multi -user.target
单元会启动其他基本系统服务,如 NetworkManager(NetworkManager.service
)或 D-Bus(dbus.service
),并激活另一个名为 basic.target
的目标单元。
Red Hat Enterprise Linux 7 发布有多个预定义目标,它们与之前系统版本中的标准运行级别集类似。出于兼容性的原因,它还为这些目标提供了别名,可将其直接映射到 SysV 运行级别。表 10.6 “SysV 运行级别与 systemd 目标比较” 提供 SysV 运行级别的完整列表及其相应的 systemd 目标。
运行级别 | 目标单元 | 描述 |
---|---|---|
|
| 关闭系统。 |
|
| 设置救援 shell。 |
|
| 设置一个非图形化的多用户系统。 |
|
| 设置一个非图形化的多用户系统。 |
|
| 设置一个非图形化的多用户系统。 |
|
| 设置图形化多用户系统。 |
|
| 关闭并重启系统。 |
要查看、更改或配置 systemd 目标,请使用 systemctl
工具,如 表 10.7 “SysV init 命令与 systemctl 的比较” 和以下部分所述。运行级别
和 telinit
命令仍可在系统中使用,并可按预期工作,但只出于兼容性原因被包括在内,因此应该尽量避免使用。
旧命令 | 新命令 | 描述 |
---|---|---|
|
| 列出当前载入的目标单元。 |
|
| 更改当前目标。 |
10.3.1. 查看默认目标 复制链接链接已复制到粘贴板!
要确定默认使用哪个目标单元,运行以下命令:
systemctl get-default
systemctl get-default
这个命令解析位于 /etc/systemd/system/default.target
的符号链接并显示结果。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”。
例 10.10. 查看默认目标
要显示默认目标单元,键入:
systemctl get-default
~]$ systemctl get-default
graphical.target
10.3.2. 查看当前目标 复制链接链接已复制到粘贴板!
要列出所有当前载入的目标单元,在 shell 提示下键入以下命令:
systemctl list-units --type target
systemctl list-units --type target
对于每个目标单元,这个命令会显示其全名(UNIT
),后跟一个备注,该单元是否已加载(LOAD
)、其高级(ACTIVE
)和低级(SU
B)单元激活状态,以及简短描述(DESCRIPTION
)。
默认情况下,systemctl list-units
命令只显示活跃的单位。如果您想列出所有载入的单元,无论它们的状态如何,请使用 --all
或 -a
选项。
systemctl list-units --type target --all
systemctl list-units --type target --all
有关如何显示默认目标的详情,请查看 第 10.3.1 节 “查看默认目标”。有关如何更改当前目标的详情请参考 第 10.3.4 节 “更改当前目标”。
例 10.11. 查看当前目标
要列出所有当前载入的目标单元,请运行以下命令:
10.3.3. 更改默认目标 复制链接链接已复制到粘贴板!
要将系统配置为默认使用不同的目标单元,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl set-default name.target
systemctl set-default name.targetsystemctl set-default name.targetsystemctl set-default name.target
将 name 替换为您要默认使用的目标单元的名称(例如: multi-user
)。这个命令将 /etc/systemd/system/default.target
文件替换为指向 /usr/lib/systemd/system/name.target
的 符号链接,其中 name 是您要使用的目标单元的名称。有关如何更改当前目标的详情请参考 第 10.3.4 节 “更改当前目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”。
例 10.12. 更改默认目标
要将系统配置为默认使用 multi-user.target
单元,以 root
用户身份运行以下命令:
systemctl set-default multi-user.target
~]# systemctl set-default multi-user.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/multi-user.target' '/etc/systemd/system/default.target'
10.3.4. 更改当前目标 复制链接链接已复制到粘贴板!
要切换到当前会话中的不同目标单元,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl isolate name.target
systemctl isolate name.targetsystemctl isolate name.targetsystemctl isolate name.target
使用您要使用的目标单元的名称替换 name(例如: multi-user
)。这个命令启动名为 name 的目标单元 以及所有依赖的单元,并立即停止所有其它单元。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”。
例 10.13. 更改当前目标
要关闭图形用户界面并改为当前会话中的 multi-user.target
单元,以 root
用户身份运行以下命令:
systemctl isolate multi-user.target
~]# systemctl isolate multi-user.target
10.3.5. 进入救援模式 复制链接链接已复制到粘贴板!
救援模式提供了一个方便的单用户环境,它可让您在无法完成常规引导过程时修复您的系统。在救援模式中,系统会尝试挂载所有本地文件系统并启动一些重要的系统服务,但不激活网络接口或者同时允许更多的用户登录到该系统。在 Red Hat Enterprise Linux 7 中,救援模式等同于单用户模式,需要 root 密码。
要改变当前目标并在当前会话中进入救援模式,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl rescue
systemctl rescue
这个命令和 systemctl isolate rescue.target
类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall
命令行选项运行这个命令:
systemctl --no-wall rescue
systemctl --no-wall rescue
有关如何进入紧急模式的详情请参考 第 10.3.6 节 “进入紧急模式”。
例 10.14. 进入救援模式
要在当前会话中进入救援模式,以 root
以用户身份运行以下命令:
systemctl rescue
~]# systemctl rescue
Broadcast message from root@localhost on pts/0 (Fri 2013-10-25 18:23:15 CEST):
The system is going down to rescue mode NOW!
10.3.6. 进入紧急模式 复制链接链接已复制到粘贴板!
紧急模式 提供最小的环境,并可在系统无法进入救援模式的情况下修复您的系统。在紧急模式中,系统仅挂载用于读取的 root 文件系统,不会尝试挂载任何其他本地文件系统,不激活网络接口,并且仅启动几个必要的服务。在 Red Hat Enterprise Linux 7 中,紧急模式需要 root 密码。
要改变当前目标并进入紧急模式,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl emergency
systemctl emergency
这个命令和 systemctl isolate emergency.target
类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall
命令行选项运行这个命令:
systemctl --no-wall emergency
systemctl --no-wall emergency
有关如何进入救援模式的详情请参考 第 10.3.5 节 “进入救援模式”。
例 10.15. 进入紧急模式
要进入紧急模式而不向目前登录到该系统的所有用户发送信息,以 root
用户身份运行以下命令:
systemctl --no-wall emergency
~]# systemctl --no-wall emergency