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
这个命令解析位于 /etc/systemd/system/default.target
的符号链接并显示结果。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”。
例 10.10. 查看默认目标
要显示默认目标单元,键入:
~]$ systemctl get-default
graphical.target
10.3.2. 查看当前目标
要列出所有当前载入的目标单元,在 shell 提示下键入以下命令:
systemctl list-units --type target
对于每个目标单元,这个命令会显示其全名(UNIT
),后跟一个备注,该单元是否已加载(LOAD
)、其高级(ACTIVE
)和低级(SU
B)单元激活状态,以及简短描述(DESCRIPTION
)。
默认情况下,systemctl list-units
命令只显示活跃的单位。如果您想列出所有载入的单元,无论它们的状态如何,请使用 --all
或 -a
选项。
systemctl list-units --type target --all
有关如何显示默认目标的详情,请查看 第 10.3.1 节 “查看默认目标”。有关如何更改当前目标的详情请参考 第 10.3.4 节 “更改当前目标”。
例 10.11. 查看当前目标
要列出所有当前载入的目标单元,请运行以下命令:
~]$ systemctl list-units --type target
UNIT LOAD ACTIVE SUB DESCRIPTION
basic.target loaded active active Basic System
cryptsetup.target loaded active active Encrypted Volumes
getty.target loaded active active Login Prompts
graphical.target loaded active active Graphical Interface
local-fs-pre.target loaded active active Local File Systems (Pre)
local-fs.target loaded active active Local File Systems
multi-user.target loaded active active Multi-User System
network.target loaded active active Network
paths.target loaded active active Paths
remote-fs.target loaded active active Remote File Systems
sockets.target loaded active active Sockets
sound.target loaded active active Sound Card
spice-vdagentd.target loaded active active Agent daemon for Spice guests
swap.target loaded active active Swap
sysinit.target loaded active active System Initialization
time-sync.target loaded active active System Time Synchronized
timers.target loaded active active Timers
LOAD = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB = The low-level unit activation state, values depend on unit type.
17 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
10.3.3. 更改默认目标
要将系统配置为默认使用不同的目标单元,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl 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 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
使用您要使用的目标单元的名称替换 name(例如: multi-user
)。这个命令启动名为 name 的目标单元 以及所有依赖的单元,并立即停止所有其它单元。有关如何更改默认目标的详情请参考 第 10.3.3 节 “更改默认目标”。有关如何列出所有当前载入的目标单元的详情请参考 第 10.3.2 节 “查看当前目标”。
例 10.13. 更改当前目标
要关闭图形用户界面并改为当前会话中的 multi-user.target
单元,以 root
用户身份运行以下命令:
~]# systemctl isolate multi-user.target
10.3.5. 进入救援模式
救援模式提供了一个方便的单用户环境,它可让您在无法完成常规引导过程时修复您的系统。在救援模式中,系统会尝试挂载所有本地文件系统并启动一些重要的系统服务,但不激活网络接口或者同时允许更多的用户登录到该系统。在 Red Hat Enterprise Linux 7 中,救援模式等同于单用户模式,需要 root 密码。
要改变当前目标并在当前会话中进入救援模式,以 root
用户身份在 shell 提示符后输入以下内容:
systemctl rescue
这个命令和 systemctl isolate rescue.target
类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall
命令行选项运行这个命令:
systemctl --no-wall rescue
有关如何进入紧急模式的详情请参考 第 10.3.6 节 “进入紧急模式”。
例 10.14. 进入救援模式
要在当前会话中进入救援模式,以 root
以用户身份运行以下命令:
~]# 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 isolate emergency.target
类似,但它也会向所有当前登录到系统的用户发送一个信息信息。要防止 systemd 发送这个信息,使用 --no-wall
命令行选项运行这个命令:
systemctl --no-wall emergency
有关如何进入救援模式的详情请参考 第 10.3.5 节 “进入救援模式”。
例 10.15. 进入紧急模式
要进入紧急模式而不向目前登录到该系统的所有用户发送信息,以 root
用户身份运行以下命令:
~]# systemctl --no-wall emergency