Ubuntu启动流程
网上很多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启动流程的更多相关文章
- ubuntu启动流程和要读取相关文件
当前系统环境为:linux mint mate 17.1(基于ubuntu14.04的衍生版) 查阅资料后总结如下: 首先: /etc/rc.d链接目标为:/etc /etc/rc*.d文件夹中的脚本 ...
- ubuntu启动脚本一览分析
#rc--run command的意思[rc解释]harvey@ubuntu:/etc$ cat ./init/rc-sysinit.conf # rc-sysinit - System V init ...
- ubuntu upstart启动流程分析
ubuntu自从6.10版本之后就使用了较新的upstart机制来进行系统的初始化. upstart是一种基于事件驱动的服务启动机制,可以使多个系统任务在保持依赖关系的前提下并发启动(据说这样这样启动 ...
- ubuntu为什么没有/etc/inittab文件? 深究ubuntu的启动流程分析
Linux 内核启动 init ,init进程ID是1,是所有进程的父进程,所有进程由它控制. Ubuntu 的启动由upstart控制,自9.10后不再使用/etc/event.d目录的配置文件,改 ...
- Linux 的启动流程(转)
原文链接:http://blog.jobbole.com/46078/ 半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序 ...
- 【转】Linux 的启动流程
半年前,我写了<计算机是如何启动的?>,探讨BIOS和主引导记录的作用. 那篇文章不涉及操作系统,只与主板的板载程序有关.今天,我想接着往下写,探讨操作系统接管硬件以后发生的事情,也就是操 ...
- Linux 的启动流程
转载:http://www.ruanyifeng.com/blog/2013/08/linux_boot_process.html 更多文档参见:http://pan.baidu.com/s/1hqo ...
- 鸟哥的linux私房菜——第20章 启动流程、模块管理与loader
20.1 Linux启动流程分析 Linux启动过程: 按下开机电源后计算机硬件主动读取BIOS来加载硬件信息以及硬件系统的自我测试,之后系统会主动读取第一个可启动的设备(由BIOS设置),此时就可以 ...
- Jvm(jdk8)源码分析1-java命令启动流程详解
JDK8加载源码分析 1.概述 现在大多数互联网公司都是使用java技术体系搭建自己的系统,所以对java开发工程师以及java系统架构师的需求非常的多,虽然普遍的要求都是需要熟悉各种java开发框架 ...
随机推荐
- [Cypress] Get started with Cypress
Adding Cypress to a project is a simple npm install away. We won’t need any global dependencies beyo ...
- HDU2191_悼念512汶川大地震遇难同胞——珍惜如今,感恩生活(背包/多重背包)
解题报告 题目传送门 题意: 中文不多说; 思路: 基础多重背包,每一个物品有多个能够选.转换成01背包解. #include <iostream> #include <cstrin ...
- PL/SQL Developer自己主动补全SQL语句
快捷输入SQL语句,比如输入s,按下空格,自己主动替换成SELECT;再比如,输入se,按下空格, 自己主动替换成SELECT * FROM,很方便,节省了大量的时间去编写反复的SQL语句. 设置方法 ...
- 在linux下怎么安装.bin的文件
*.bin文件安装方法: 1.运行终端到文件目录下2.在终端输入:sudo chmod +x *.bin3.再输入:sudo ./*.bin可安装到任意目录,./*.bin可安装到当前用户有权限的目录
- Android系统之Recovery移植教程 【转】
本文转载自:http://luckytcl.blog.163.com/blog/static/14258648320130165626644/ recovery的移植,这方面的资料真实少之又少啊,谷歌 ...
- python spark 求解最大 最小 平均
rdd = sc.parallelizeDoubles(testData); Now we’ll calculate the mean of our dataset. 1 LOGGER.info( ...
- 院校-国外-美国:斯坦福大学( Stanford)
ylbtech-院校-国外-美国:斯坦福大学( Stanford) 斯坦福大学(Stanford University),全名小利兰·斯坦福大学(Leland Stanford Junior Univ ...
- Hdu-6230 2017CCPC-哈尔滨站 A.Palindrome Manacher 主席树
题面 题意:给你一个字符串,问你满足s[i]=s[2n-i]=s[2n+i-2]的子串(这子串长度为3n-2)有多少个,原字符串长度<=5e5 题解:对于这种子串,其实要满足2个回文,跑过一次M ...
- Redis五种数据类型及应用场景
MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加 ...
- WinForm导出DataSet到Excel
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...