SysV 运行级别和目标单元的比较

Run LevelTarget Units说明
0runlevel0.target, poweroff.target关机并关闭电源
1runlevel1.target, rescue.target设置救援shell
2,3,4runlevel[234].target, multi- user.target设置非图形多用户shell
5runlevel5.target, graphical.target设置图形多用户shell
6runlevel6.target, reboot.target关机并重启系统

每个运行级别[0123456].target 文件都是到系统启动目标等效项的符号链接。
例如:

# cd /usr/lib/systemd/system
# ls -l runlevel*
lrwxrwxrwx. 1 root root 15 Sep 23 19:52 runlevel0.target -> poweroff.target
lrwxrwxrwx. 1 root root 13 Sep 23 19:52 runlevel1.target -> rescue.target
lrwxrwxrwx. 1 root root 17 Sep 23 19:52 runlevel2.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Sep 23 19:52 runlevel3.target -> multi-user.target
lrwxrwxrwx. 1 root root 17 Sep 23 19:52 runlevel4.target -> multi-user.target
lrwxrwxrwx. 1 root root 16 Sep 23 19:52 runlevel5.target -> graphical.target
lrwxrwxrwx. 1 root root 13 Sep 23 19:52 runlevel6.target -> reboot.target
CentOS/RHEL 7:systemd target 教程

以前版本的 CentOS/RHEL Linux 使用 SysV init 运行级别。
这些运行级别提供了将系统用于不同目的的能力,并且仅在特定运行级别启动特定目的所需的服务。

在 RHEL 7 中,运行级别(run level)已替换为 systemd target unit(systemd 目标单元)。
目标单元有一个 .target 扩展名,类似于运行级别,目标单元允许我们仅使用特定目的所需的服务来启动系统。

RHEL 7 分发有一组预定义的目标,这些目标类似于以前版本的 RedHat Linux 中的运行级别。
以下命令返回这些预定义的 systemd 运行级别目标单元的绝对路径名:

# find / -name "runlevel*.target"
/usr/lib/systemd/system/runlevel5.target
/usr/lib/systemd/system/runlevel0.target
/usr/lib/systemd/system/runlevel6.target
/usr/lib/systemd/system/runlevel1.target
/usr/lib/systemd/system/runlevel2.target
/usr/lib/systemd/system/runlevel3.target
/usr/lib/systemd/system/runlevel4.target
on  it road.com

2. 列出当前活动的目标

要查看系统上当前活动的目标单元,请使用以下命令。

# 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
...
sockets.target         loaded active active Sockets
swap.target            loaded active active Swap
sysinit.target         loaded active active System Initialization
timers.target          loaded active active Timers
LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, for example:generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.
19 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

1. 查看默认/当前目标单元

使用以下命令查看默认使用的目标单元:

# systemctl get-default
graphical.target

graphics.target 目标单元指示系统在图形化、多用户状态下运行。
这类似于 SysV 初始化系统中的运行级别 5.
我们可以使用旧命令 runlevel 验证这一点:

# runlevel
N 5

默认目标单元由 /etc/systemd/system/default.target 文件表示。
此文件是指向当前默认目标单元的符号链接。
例如 :

# ls -lrt /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 36 Sep 23 20:01 /etc/systemd/system/default.target -> /lib/systemd/system/graphical.target

3.更改默认目标单位

使用以下命令更改默认目标单位(例如,将默认更改为 multi-user.target 单位):

# systemctl set-default multi-user.target
Removed symlink /etc/systemd/system/default.target.
Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target.

请注意, default.target 符号链接已更改,现在指向 multi-user.target 单元:

# ls -lrt /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 41 Sep 24 11:58 /etc/systemd/system/default.target -> /usr/lib/systemd/system/multi-user.target

4. 改变当前活跃的系统目标单位

set-default 命令不会更改系统的当前状态。
要更改当前活动的系统目标(例如,将当前活动的系统目标更改为 multi-user.target):

# systemctl isolate multi-user.target

此命令类似于使用 telinit [runlevel] 更改当前运行级别。
此 telinit 命令仍然存在,但仅出于兼容性原因才包含在内。

也可以使用以下命令输入默认目标单位:

# systemctl default

这等效于以下命令:

# systemctl isolate default.target
日期:2020-09-17 00:12:50 来源:oir作者:oir