SysV 运行级别和目标单元的比较
Run Level | Target Units | 说明 |
---|---|---|
0 | runlevel0.target, poweroff.target | 关机并关闭电源 |
1 | runlevel1.target, rescue.target | 设置救援shell |
2,3,4 | runlevel[234].target, multi- user.target | 设置非图形多用户shell |
5 | runlevel5.target, graphical.target | 设置图形多用户shell |
6 | runlevel6.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 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
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