在老的 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 是更一种更先进的技术和方式,大家还是应该更积极地去接受并学习它。

推荐阅读:

《软链接 vs. 硬链接》

《Linux 目录详解》

《虚拟机安装 Linux 最完整攻略》

《Xshell 与 Xftp 的安装与使用》

《Linux,Unix,GNU 到底有什么样的渊源?》

- The End -

Linux的运行等级与目标的更多相关文章

  1. linux系统启动过程及运行等级详解

    一.启动过程 1. 开机流程简述 1)加载BIOS硬件信息,并获取第一个启动设备的代号 2)读取第一个启动设备的MBR的引导加载程序的启动信息 3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试 ...

  2. telint---切换当前正在运行的Linux系统的运行等级

    telint命令用于切换当前正在运行的Linux系统的运行等级 Send control commands to the init daemon. --help Show this help --no ...

  3. Linux下面有7个运行等级  run level

    Linux下面有7个运行等级  run level run level 0  系统停机状态,系统默认运行级别不能设为0,否则不能正常启动 run level 1  单用户工作状态,root权限,用于系 ...

  4. 【无私分享:ASP.NET CORE 项目实战(第十章)】发布项目到 Linux 上运行 Core 项目

    目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win7)上用虚拟机建了个 CentOS7 ,来演示下 ...

  5. linux 系统运行级别及修改[转]

    Linux运行级别从0-6,共7个. 0:关机.不能将系统缺省运行级别设置为0,否则无法启动. 1:单用户模式,只允许root用户对系统进行维护. 2:多用户模式,但不能使用NFS(相当于Window ...

  6. Linux的运行级别和chkconfig用法

    Linux的运行级别和chkconfig用法        一.Linux的运行级别 在装MySQL的时候,才知道了Linux的运行级别这么一回事.汗…自己太水了…下面总结一下: 什么是运行级别呢?简 ...

  7. 在Linux上运行C#

    众所周知,C#是Microsoft推出的.NET语言,只能在.NET平台上运行,例如Win 9x.ME.NT.2000.XP和Win CE之类的操作系统.但是,现在却有了一个叫做Mono的项目,它的目 ...

  8. 发布项目到 Linux 上运行 Core 项目

    发布项目到 Linux 上运行 Core 项目 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 ASP.Net Core 给我们带来的最大的亮点就是跨平台,我在我电脑(win ...

  9. linux/unix运行级别

    在SYSTEM V 风格的UNIX系统中,系统被分为不同的运行级别,这和BSD分支的UNIX有所不同,常用的为0~6七个级别:0关机 1单用户 2不带网络的多用户 3带网络的多用户 4保留,用户可以自 ...

随机推荐

  1. Soldiers Sortie

    这部2006年上映的作品豆瓣评分9.3,时至今日仍然有人乐此不疲地讨论剧情和启发,我想称之为经典应该不算过分. 这部剧我至少完整看过3遍,随着阅历增加,对某些角色的体会也变得更深刻. 许三多 许三多是 ...

  2. Java大数据秋招面试题

    以下为整理的自己秋招遇到的面试题:主要是Java和大数据相关题型:根据印象整理了下,有些记不起来了. 死锁.乐观锁.悲观锁synchronized底层原理及膨胀机制ReetrantLock底层原理,源 ...

  3. ubuntu 15.04 的安装遇到的问题及其解决方法

    在Ubuntu15.04 的安装(U盘)中 遇到的问题1:安装后设置电脑从U盘启动,启动失败,屏幕上显示:Failed to load ldlinux.c32 解决方法:当时是参考这篇文章 http: ...

  4. Java中常用七个阻塞队列的总结

    Java队列总结 通过前面文章的学习,我们对Java中常用队列做了介绍.本文,咱们来对队列做个总结吧. 首先,我们介绍了现实生活中的实际场景(排队买票等),来告诉我们为什么需要使用队列. 队列是一种先 ...

  5. 第三章:Python高级编程-深入类和对象

    第三章:Python高级编程-深入类和对象 Python3高级核心技术97讲 笔记 3.1 鸭子类型和多态 """ 当看到一直鸟走起来像鸭子.游泳起来像鸭子.叫起来像鸭子 ...

  6. STM32 进行软件复位的方法

    platform:stm32f103xx include:core_cm3.h /** \brief System Reset \details Initiates a system reset re ...

  7. Linux文件操作命令并举例说明其作用

    ls ,常用于查看当前文件下有工作中需要的文件 cd, 常用于进行切换文件的位置 vim,常用于编辑软件系统相关的配置文件 ps –ef|grep jdk,常用语显示跟jdk有关的进程   |:表示 ...

  8. [hdu4436 str2int]后缀自动机SAM(或后缀数组SA)

    题意:给n个数字串,求它们的所有不包含前导0的不同子串的值之和 思路:把数字串拼接在一起,构造SAM,然后以每个状态的长度len作为特征值从小到大排序,从前往后处理每个状态,相当于按拓扑序在图上合并计 ...

  9. springMVC的自定义annotation(@Retention@Target)详解

    自定义注解: 使用@interface自定义注解时,自动继承了java.lang.annotation.Annotation接口,由编译程序自动完成其他细节.在定义注解时,不能继承其他的注解或接口.@ ...

  10. linux --运行模式

    运行模式也可以称之为运行级别 在Linux中存在一个进程:init (initialize:初始化)init 的进程id 是1 ps -ef | grep init 该进程存在一个对应的配置文件 in ...