细说 linux 开机及服务启动

原文:细说 linux 开机及服务启动 后续若是变更,在原文更新。html

电源接通。

这个没得说。linux

加载 BIOS,自检,并取得启动设备

BIOS(Basic Input/Output System的缩写、中文:基本输入输出系统),在IBM
PC兼容系统上,是一种业界标准的固件接口。[1]。BIOS这个字眼是在1975年第一次由CP/M操做系统中出现。BIOS是我的电脑启动时加载的第一个软件。

BIOS用于电脑开机时运行系统各部分的的自我检测(Power On Self
Test),并加载引导程序(IPL)或存储在主存的操做系统。此外,BIOS还向操做系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代操做系统会忽略BIOS提供的抽象层并直接控制硬件组件。ubuntu

上面的内容取自维基百科,BIOS(Basic Input Output System) 是一个软件,这个软件已经成为业界标准。通常运行在主板中,通电后会首先启动这个软件,根据设置(主要保存在 COMS 中) 取得各类硬件信息,并进行自我检测,并读取启动设备(即系统所在设备,通常为磁盘,U盘也能够)centos

读取并执行第一个启动设备内的装载程序

读取到启动设备以后就须要启动引导装载程序(BootLoader,由于各个操做系统的内核文件及格式不同,因此须要一个装载程序来处理各种操做系统的装载,gurp,spfdisk等)来加载操做系统和内核文件。而全部的操做系统的 BootLoader 都放在启动设备(磁盘)的第一个扇区内,也就是 MBR(Master Boot Record,主引导分区),BOIS 经过 INT13 中断功能便可读取到。服务器

经过 BootLoader 读取到的内核文件,加载驱动程序

深度截图_选择区域_20180311200342.png

读取到内核文件(通常在 /boot 下,如图所示)以后,linux 会将内核文件加压到内存中,利用内核功能,测试并驱动各类硬件(储存设备,cpu,网卡,声卡)。此时,操做系统以本身的需求从新检测了硬件,开始接管 BIOS。网络

内核调用 init(/sbin/init) 进程

20180310004434.png
能够看到,此进程的 pid 为1,init 最重要的做用就是准备软件执行环境,如:系统主机名、网络设置、语言、文件系统格式等,以及其余服务启动。全部的操做都会经过 init 的默认配置文件 /etc/inittab(部分操做系统不使用该文件,如 ubuntu) 来规划。而且 /etc/inittab (部分操做系统将各项配置分开) 能够设置 run level(执行级别)。测试

部分操做系统(centos7/ubuntu)将 init 换为 systemd ,其功能大体同样,可是作了许多优化和修改。
深度截图_选择区域_20180311201005.png字体

执行级别0:系统停机状态,系统默认执行级别不能设为0,不然不能正常启动
执行级别1:单用户工做状态,root权限,用于系统维护,禁止远程登录
执行级别2:多用户状态(没有NFS服务)
执行级别3:彻底的多用户状态(有NFS),登录后进入控制台命令行模式,通常 vps 及云服务器都运行在这个级别
执行级别4:系统未使用,保留
执行级别5:X11控制台,登录后进入图形GUI模式,通常桌面版系统都运行在这个级别
执行级别6:系统正常关闭并重启,默认执行级别不能设为6,不然不能正常启动

run level是什么?就是经过设置 run level 来规定系统使用不一样的服务启动。好比设置 run level 为3,系统将会启动命令行模式。runlevel命令能够查看当前的运行级别。init 命令能够切换当前系统的模式,好比 init 0就会关机,init 6会重启。修改配置文件 /etc/inittab 能够设置默认执行级别,下次启动后直接以某种执行级别启动,可是切记不能设置0和6。优化

init进程处理系统初始化

此时,操做系统中只有 init 进程,其 pid 为1,后续全部进程都是经过 init 启动,因此全部进程都是init的子进程。init 会先设置系统的基础环境,主要利用 /etc/rc.d/rc.sysinit 这个脚原本进行系统初始化的各项操做。好比设置时间,磁盘,文件系统,字体等等

启动系统服务(/etc/rc.d/rc)

系统初始化以后,整个操做系统核心功能已经正常了,可是为了用户正常使用,还要启动一些服务,这时候就要根据执行级别来执行对应的脚原本开启服务器。
深度截图_选择区域_20180311202142.png
深度截图_选择区域_20180311202235.png
通常在 /etc/rc.d 目录下面会有各个级别的配置,而 /etc/rc*.d/ 下面就是脚本的映射centos7

用户自定义开机启动程序(/etc/rc.d/rc.local)

启动完各项服务以后,意味着整个系统的功能均可以正常使用了,用户若是有其余操做想完成的话,就能够建立脚本,或者编写命令,放在 /etc/rc.d/rc.local 中执行,这样开机启动以后就会执行这个脚本或命令。为何不是直接放在启动级别中目录下,而后修改启动脚本呢?第一是由于服务没启动完以前,某些功能或命令是没法使用的。第二是麻烦。固然若是用户本身编写的程序想以系统服务模式启动,也能够放到里面。

加载终端机或桌面环境

启动各项服务以后就会加载终端或界面等待用户登陆,也就是出现登陆界面/登陆提示。

图示

整个过程整理后,以下图所示
151005477923197.png

相关文章
相关标签/搜索