当前位置: 首页 > news >正文

为什么说Ubuntu的运行级别为2

继上一篇文章http://www.cnblogs.com/EasonJim/p/7163069.html深入研究了Linux的运行级别之后,发现网上大部分都说Ubuntu的运行级别默认为2,那么下面就深入分析以下为什么是2而不是其它。

分析过程:

首先从http://forum.ubuntu.org.cn/viewtopic.php?f=97&t=221304这篇文章了解到Debian系的运行级别2~5都是一样的。并通过

cd /etc/init
less rc-sysinit.conf

发现里面有句:env DEFAULT_RUNLEVEL=2,所以在这个发现上,可以说明Ubuntu的默认运行级别为2。

而且从以下网站内容中也很多人普遍说明这个问题:

https://debian-administration.org/article/212/An_introduction_to_run-levels

http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html

https://stackoverflow.com/questions/16227792/runlevel-2-and-5-works-the-same-on-ubuntu

https://unix.stackexchange.com/questions/39411/why-does-debian-and-ubuntu-default-to-runlevel-2

https://wiki.debian.org/RunLevel

http://www.pathbreak.com/blog/ubuntu-startup-init-scripts-runlevels-upstart-jobs-explained

https://askubuntu.com/questions/686700/no-difference-between-runlevel-3-and-5-in-ubuntu-15-04

所以总结上面所说的,应该是这样:根据Debian策略手册,默认情况下,运行级别2到5之间没有区别。如下所示:

0 : System halt.
1 : Single-User mode.
2 : Graphical multi-user plus networking (DEFAULT)
3 : Same as "2", but not used.
4 : Same as "2", but not used.
5 : Same as "2", but not used.
6 : System reboot.

也就是说,在Debian系的系统上,2为默认级别,其余的3~5都没有使用。且官方介绍也是从2开始说起。

但是奇怪的发现,如果在Ubuntu 16.04的系统上运行runlevel命令,得到的是N 5,这于下面所示的级别上对应的就是GUI:

运行级别名称描述
0关闭系统
1单用户模式管理任务模式。
2多用户模式不配置网络接口,不导出网络服务
3多用户模式与网络正常启动系统
4未使用/用户可定​​义为了特殊目的
5使用GUI显示管理器正常启动系统运行级别3 +显示管理器
6重启重新启动系统
s或S单用户模式不配置网络接口或启动后台进程。

或者会不会这样,在Server版本里面才会显示2,其实不是,经过测试,在Server 16.04版本上同样是N 5。

那么这样就奇怪了,会不会是随着版本的升级,这个启动级别同样也升级了。

从http://forum.ubuntu.org.cn/viewtopic.php?t=474412,发现Ubuntu系统级别的变更历史:

1、Ubuntu 6.10及以前版本使用Sysvinit。

2、Ubuntu 14.10及以前版本使用Upstart但是还留着Sysvinit并存。

https://wiki.ubuntu.com/Upstart

https://help.ubuntu.com/community/UpstartHowto

3、Ubuntu 15.04开始预设使用Systemd,但是可以在开机选项选择使用Systemd或Upstart,但是不可同時使用Sysvinit或Upstart并存。

https://wiki.ubuntu.com/SystemdForUpstartUsers

而Systemd不再使用runlevel进行代表,而是使用target进行展示,对照的表格如下:

   Mapping between runlevels and systemd targets
   ┌─────────┬───────────────────┐
   │Runlevel │ Target            │
   ├─────────┼───────────────────┤
   │0        │ poweroff.target   │
   ├─────────┼───────────────────┤
   │1        │ rescue.target     │
   ├─────────┼───────────────────┤
   │2, 3, 4  │ multi-user.target │
   ├─────────┼───────────────────┤
   │5        │ graphical.target  │
   ├─────────┼───────────────────┤
   │6        │ reboot.target     │
   └─────────┴───────────────────┘

这个表格出自:https://askubuntu.com/questions/788323/change-runlevel-on-16-04

那么我在测试时发现,在桌面版还是服务器版的Ubuntu 16.04获取默认的target时。都是显示graphical.target,也就是与N 5这个级别对应的。(命令:systemctl get-default

但似乎这个也没有多少结论说明默认级别为2的问题。

总结:

所以,我猜测,由于历史原因,在15.04之前,系统级别应该还是以2为默认,但是经过15.04,使用了Systemd的问题,默认级别上改为了5为默认,而经过上面的历史发展,无论在2~5之间,都是没有区别的。

或者是由于Systemd这个的使用,使以前的一些文章上如何修改系统运行级别的,在16.04不生效的问题。那么要修改运行级别,可以参考这篇文章进行修改:https://askubuntu.com/questions/788323/change-runlevel-on-16-04

其它发现:

如果16.04的系统以5为默认级别,那么我建立一个服务之后,放在2级别上面就不会运行吗?不是这样的,系统的运行级别是说从小到大的依次运行,要运行到5,那么会经过2;所以,我们在设置服务时,也就是直接在2上设置自动启动就行了,但是发现一些服务会在2~5都设置自动运行,所以我猜测,这样的做法应该是为了保险,无论在哪个运行级别都能启动这个服务。参考:https://askubuntu.com/questions/323374/run-levels-only-at-start-up;

还有一些做法是在2~4设置启动,然后到5就以K开头去杀死,我觉得这种做法可以实现效果,但是如果按照上面的总结,依次运行的运行级别,会不会有点浪费资源,要先启动再杀死,倒不如从一开始的2级别到5级别都不启动好一些。

 

参考:

https://unix.stackexchange.com/questions/170555/why-is-my-debian-jessie-always-in-runlevel-5

https://askubuntu.com/questions/788323/change-runlevel-on-16-04

https://askubuntu.com/questions/323374/run-levels-only-at-start-up

https://askubuntu.com/questions/686700/no-difference-between-runlevel-3-and-5-in-ubuntu-15-04

http://www.pathbreak.com/blog/ubuntu-startup-init-scripts-runlevels-upstart-jobs-explained

https://wiki.debian.org/RunLevel

https://unix.stackexchange.com/questions/39411/why-does-debian-and-ubuntu-default-to-runlevel-2

https://stackoverflow.com/questions/16227792/runlevel-2-and-5-works-the-same-on-ubuntu

http://www.debianadmin.com/debian-and-ubuntu-linux-run-levels.html

https://debian-administration.org/article/212/An_introduction_to_run-levels

==>如有问题,请联系我:easonjim#163.com,或者下方发表评论。<==

相关文章:

  • python网络编程1
  • Exchange 跨林迁移 Part7 配置密钥服务器
  • SQLserver行转列与列转行
  • d3js shape深入理解
  • 解决WordPress安装主题/插件提示输入FTP帐号的问题
  • jdk 7下载地址
  • leetcode Longest Common Prefix
  • Javascript之sort深入探究
  • Java中继承的规则
  • ExpandableListView(二级ListView)的使用
  • EventFiringWebDriver网页事件监听(一)
  • 为您的Android,iOS等应用加入声波传输功能
  • virtualbox测试k8s要注意的情况
  • 操蛋的面试题(更新)
  • 深入剖析Java中的装箱和拆箱
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • 【391天】每日项目总结系列128(2018.03.03)
  • C++类中的特殊成员函数
  • DataBase in Android
  • Druid 在有赞的实践
  • JavaScript对象详解
  • js ES6 求数组的交集,并集,还有差集
  • Js基础知识(一) - 变量
  • JS题目及答案整理
  • ubuntu 下nginx安装 并支持https协议
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 七牛云假注销小指南
  • 微信小程序开发问题汇总
  • 移动端唤起键盘时取消position:fixed定位
  • 原生 js 实现移动端 Touch 滑动反弹
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • (4) PIVOT 和 UPIVOT 的使用
  • (LeetCode) T14. Longest Common Prefix
  • (超详细)语音信号处理之特征提取
  • (二十三)Flask之高频面试点
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (三)elasticsearch 源码之启动流程分析
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)Dubbo快速入门、介绍、使用
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转载)OpenStack Hacker养成指南
  • .NET Core 项目指定SDK版本
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net/c# memcached 获取所有缓存键(keys)
  • .Net7 环境安装配置
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET轻量级ORM组件Dapper葵花宝典
  • ??javascript里的变量问题
  • @private @protected @public
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [CVPR2021]Birds of a Feather: Capturing Avian Shape Models from Images
  • [Linux] Boot分区满了的处理方法 The volume boot has only 0 bytes disk space remaining
  • [MZ test.16]P2 math 乘方e