在老的 Linux 发行版本中, 系统运行分成不同的运行级别(run level), 不同的级别所启动的服务搭配有所不同. 较新的 Linux 发行版本, 比如 CentOS 7+, 已经将运行级别替换成另一个新的概念 -- 目标(target). 本文会为大家做一个比较, 并对两者间的区别做以诠释.
运行级别 Run Level
大家都知道 Windows 有安全模式, 它是 Windows 的最小模式, 和普通模式相比, 安全模式可以让用户更好地进行系统检测以及错误修复. Linux 的运行级别是个类似的机制, 不同的运行级别有不同的作用:
我们通常用到的是级别 3 和 5, 一般服务器不需要安装图形界面, 并且需要支持用户远程连接, 所以运行级别会选择 3; 个人电脑一般需要 GUI, 所以会选择运行级别 5.
想查看当前系统的运行级别可以使用命令用到命令
#runlevel
N 5
上面的结果表示当前的运行级别是 5. 在不同级别间切换可以使用命令
#init [运行级别]
比如当前运行在级别 3, 是多用户字符界面, 想要启动 GUI 图形界面, 只需要输入 init 5
虽然运行级别可以实时切换, 如果想修改系统启动时默认的运行级别, 在 CentOS 5 和 6 中也可以修改 /etc/inittab 文件来进行配置.
系统初始化进程 systemd vs. init
在 CentOS 7 之前, 系统的初始化进程是 init, 它的 PID 是 1, 初始化进程就是系统第一个被执行的程序, 所有其他进程都是它的子进程, 所以我们切换运行级别用到的命令是 init, 系统启动默认运行级别的配置文件是 /etc/inittab.
从 CentOS 7 开始, 系统初始化进程采用了全新的 systemd. 从它的名字可以看出, 它是一个服务, 由系统自动在后台运行. 和 init 相比, systemd 有一些明显的优势:
1) systemd 在系统启动时使用了并发的启动机制, 而 init 是按顺序依次启动每项服务. 实际上很多服务之间没有依赖关系, 不需要依次等待. 在 Linux 早期, 计算机的 CPU 是单核的, 一次只能处理一项任务, 所以 init 的设计有它的合理性. 但随着硬件技术发展, 现在的服务器 CPU 大多是多核心的, 可以同时处理多项任务, systemd 可以并发启动那些不相关的服务, 所以系统启动速度得到了极大的提升.
2) systemd 是按需启动服务, 而 init 是将所有后台服务统统启动, 全部完成后才允许用户登录. init 的这种方式会使得系统启动比较慢, 另外也会占用比较多的系统资源. systemd 采用的方式是只有某个服务被请求时才会启动它, 使用完成后会动态将该服务关闭, 所以不管是启动速度, 还是系统资源的使用, systemd 都有很大的优势.
systemd 有两个核心的概念, 单元 (unit) 和 目标(target).systemd 进程对系统的管理就是通过一个个的单元来实现的. 比如服务, 每一个服务都有一个对应的单元, 而且每个单元都有一个配置文件, 配置文件通常以 .service 作为文件名后缀, 像 sshd 服务, 它的配置文件就是 /usr/lib/systemd/system/sshd.service
有一类比较重要的单元叫目标单元(target unit), 或者简称目标(target), 它们的配置文件名后缀为 .target. 在 systemd 中, 我们用 target 来模拟实现系统不同的运行级别.
通过目标 (Target) 来实现运行级别
上面提到, CentOS 7 将系统初始化进程从 init 改为了 systemd,init 的运行级别 (runlevels) 也改成了用目标 (target) 来实现, 不同的运行级别和目标之间是什么对应关系呢, 我们用下面这张图来做了一个总结:
常用的运行级别是 3 (多用户字符模式)和 5(多用户图形界面模式), 它们分别对应的目标就是 multi-user.target 和 graphical.target. 设置和切换不同的运行级别, CentOS 7 还是向前支持 init 命令, 但是更建议我们使用 systemd 的管理工具 systemctl 来完成.
1) 查看当前系统默认运行, 可以使用 systemctl get-default 命令
- #systemctl get-default
- multi-user.target
2) 切换不同运行级别, 以管理员身份使用 systemctl [目标名称] 命令
#systemctl isolate graphical.target 切换到图形界面
3) 设置系统启动默认运行级别
在 CentOS 5 和 6 中, 系统启动默认的运行级别可以在 /etc/inittab 文件中进行配置, 但在 CentOS 7 中, 我们打开这个配置文件看一下:
从配置文件内容可以看到,"在这里做任何的配置对系统都是没有作用的, systemd 用目标来取代运行级别. 默认有两个主要的目标, multi-user.target 相当于运行级别 3,graphical.target 相当于运行级别 5. 使用 systemctl get-default 来看当前使用目标, 使用 systemctl set-default Target.target 来设置系统默认目标".
所以我们用下面的命令来试一下, 将系统启动目标设置为 graphical
#systemctl set-default graphical.target
设置成功后, 重启电脑, 发现果然进入了 GUI 图形界面模式.
最后
到这里, systemd 如何使用 target 来替换 init 的 runlevels 就介绍完了. 可能很多老 Linux 用户还是比较习惯于用 init, 但毕竟 systemd 是更一种更先进的技术和方式, 大家还是应该更积极地去接受并学习它.
来源: https://www.cnblogs.com/jfzhu/p/12961694.html