网上很多Linux的启动流程图,也有Ubuntu早期版本的启动流程介绍,却少有近期版本的启动流程介绍(16.04)。这里作出总结归纳。

Linux系统采用的是RedHat启动方式,启动流程如下:

Ubuntu的启动流程与上面Linux的启动流程有很大区别。因为RedHat启动时穿行执行大量的脚本和启动各种需要的服务,所以Ubuntu(6.10-现在)用upstart的方式代替init,因此在Ubuntu下面/etc/下面是没有inittab的。

Ubuntu(6.10-现在) upstart可以说是在表象上保留了大部分原来init的特性,因此目前Ubuntu初始化进程名仍然叫init,而改变的核心,则是Event机制。init进程ID是1,是所有进程的父进程,所有进程由它控制。Event机制就是将进程的触发、停止都看成是Event。基于事件机制、系统的所有服务、任务都是由事件驱动的。

Ubuntu(6.10-9.10)的/etc/下有一个event.d,这个目录是upstart的核心。/etc/event.d/下面存放了目前upstart需要识别的各种event。这其中主要有三种:rc-default,rcX(X = 0,1,2,3,4,5,6,S),ttyX(X = 0,1,2,3,4,5,6,S)。其中rc-default就类似与inittab文件,用来设置默认运行级别的。ubuntu(9.10-目前)启动仍旧由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改为/etc/init/*.conf。

Ubuntu16.04关于系统启动的目录结构如下:

├── etc
├── ├── init
├── ├── ├── rc.conf
├── ├── ├── rc-sysinit.conf
├── ├── ├── rcS.conf
├── ├── ├── ttyX.conf # 系统的6个终端
├── ├── init.d
├── ├── ├── rc
├── ├── rc${runlevel}.d

Ubuntu16.04的启动流程图如下:

系统运行时会进入/etc/init目录(Upstart init会到该目录下读取配置文件),下面有三个相关的文件,rc.conf、rc-sysinit.conf、rcS.conf。rc-sysinit在startup事件发生时被启动,rc在系统runlevel变化时被启动,rcS在系统runlevel为S时启动。在配置文件的注释中说明了,这几个文件,正是Upstart init处理System V-style服务的关键。

rc-sysinit在startup事件发生时被启动,即,Upstart init会首先读取rc-sysinit.conf并执行相关配置和脚本。rc-sysinit.conf的主要工作是设置系统默认runlevel,检测是否存在/etc/inittab或内核命令行,若存在,则按内核命令行>/etc/inittab>默认runlevel的顺序设置系统 runlevel。最后,调用telinit进入设置的runlevel。能看到默认的runlevel是2。

>>> cat /etc/init/rc-sysinit.conf
......
# Default runlevel, this may be overriden on the kernel command-line
# or by faking an old /etc/inittab entry
env DEFAULT_RUNLEVEL=2
......
telinit "${DEFAULT_RUNLEVEL}"
......

由于调用了telinit进入了设定的runlevel,runlevel改变的事件发生,此时rc服务启动(当然其他服务也会)。那么,我们就有必要来看看rc.conf中到底有什么东西。打开rc.conf,注意到下面:

>>> cat /etc/init/rc.conf
......
start on runlevel [0123456]
stop on runlevel [!$RUNLEVEL]
......
/etc/init.d/rc $RUNLEVEL
......

上面的start on runlevel [0123456];stop on runlevel [!$RUNLEVEL]就是来设置服务何时启动,何时终止的。倒数第二行的/etc/init.d/rc $RUNLEVEL,就是运行init.d/下面的rc文件了,RUNLEVEL是运行级别。

很明显,/etc/init.d/rc被调用了,并且传入了早前设置好的系统runlevel作为参数。rc脚本有这么一段:

>>> cat /etc/init.d/rc
# Now run the START scripts for this runlevel.
# Run all scripts with the same level in parallel
......
for s in /etc/rc$runlevel.d/S*
......

/etc/init.d/rc会根据传入 的runlevel参数调用/etc/rc${runlevel}.d/下的脚本(以S开头)以启动服务,终止在前次runlevel启动而当前在 runlevel需要终止的服务。S表示在启动时运行,数字则表示执行的先后顺序。其中有一个链接叫做S30gdm,gdm的意思是gnome display management,也就是用来启动gnome桌面的。

至此系统启动完毕。

Reference:

http://www.cnblogs.com/bigben0123/p/3173826.html

Ubuntu启动流程的更多相关文章

  1. ubuntu启动流程和要读取相关文件

    当前系统环境为:linux mint mate 17.1(基于ubuntu14.04的衍生版) 查阅资料后总结如下: 首先: /etc/rc.d链接目标为:/etc /etc/rc*.d文件夹中的脚本 ...

  2. ubuntu启动脚本一览分析

    #rc--run command的意思[rc解释]harvey@ubuntu:/etc$ cat ./init/rc-sysinit.conf # rc-sysinit - System V init ...

  3. ubuntu upstart启动流程分析

    ubuntu自从6.10版本之后就使用了较新的upstart机制来进行系统的初始化. upstart是一种基于事件驱动的服务启动机制,可以使多个系统任务在保持依赖关系的前提下并发启动(据说这样这样启动 ...

  4. ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析

    Linux 内核启动 init ,init进程ID是1,是所有进程的父进程,所有进程由它控制. Ubuntu 的启动由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改 ...

  5. Linux 的启动流程(转)

    原文链接:http://blog.jobbole.com/46078/ 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序 ...

  6. 【转】Linux 的启动流程

    半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操 ...

  7. Linux 的启动流程

    转载:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 更多文档参见:http://pan.baidu.com/s/1hqo ...

  8. 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader

    20.1 Linux启动流程分析 Linux启动过程: 按下开机电源后计算机硬件主动读取BIOS来加载硬件信息以及硬件系统的自我测试,之后系统会主动读取第一个可启动的设备(由BIOS设置),此时就可以 ...

  9. Jvm(jdk8)源码分析1-java命令启动流程详解

    JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...

随机推荐

  1. hdu1203--D - I NEED A OFFER!(转化01背包)

    D - I NEED A OFFER! Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  2. Linux命令(七)——网络配置和网络通信

    在使用网络前,需要对linux主机进行基本的网络配置,配置后可以使该主机能够同其他主机进行正常的通信. 一.网络配置 1.ifcfg-ethn网络配置文件 所有的网络接口配置文件均存放在/etc/sy ...

  3. PL SQL Developer client 连接server

    安装完Oracle,PLSQL之后,在server中打开监听. 计算机右键-管理-服务和应用程序-服务-打开以Oracle开头的服务,特别是监听,这个最重要.详细如图所看到的. (1)配置监听的位置 ...

  4. luogu1403 约数研究

    题目大意:给出n,求1~n所有数的约数个数的和. 将“1~n所有数的约数”的模板中的factor[i*j].push_back(i)改为FactorCnt[i*j]++,最后再求一次和即可. #inc ...

  5. PHP 比 Java 的开发效率高在哪?

    PHP 比 Java 的开发效率高在哪? 现在很多互联网应用都是php开发的,在很多人的观念里已经把php与java分到了两个开发领域,php是互联网,java是企业应用. 都说php的开发效率高,更 ...

  6. xss 记录cookie

    <p> <img src="http://act.ci123.com/global/ueditor_new/php/upload/98591403834900.jpg&qu ...

  7. springboot与mybatis集成

    1)添加依赖 <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId& ...

  8. ROS-TF-广播

    前言:将海龟的坐标系变换广播到TF. URDF文件的描述是在相对坐标上进行的,运动起来就需要考虑机器人各个连杆的相对位置关系.TF的诞生就是为了自动管理这些相对关系下的坐标变换的,而我们需要做的就是给 ...

  9. POJ 1416 DFS

    题目翻译: 公司现在要发明一种新的碎纸机,要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值.比如,target的值是50,而纸条上的数字是12346,应该把数字切成四部分,分别是1.2 ...

  10. java selenium手动最大化chrome浏览器的方法

    package my_automation; import java.awt.Dimension; import org.openqa.selenium.Capabilities; import or ...