Linux的开机启动顺序
要想整明白后面的开机启动的设置方法,最好不要只知其然而不知其所以然,这里要先从Linux的开机启动顺序开始说起。
下面介绍三种添加开机自启脚本的方法,所测试的系统为 Ubuntu 20.04
Linux系统启动从你的设备接上电源按下开关开始到你登录系统结束,中间有一个复杂但很连贯的过程:
- 加载BIOS(Basic Input Output System,基本输入输出系统)。获取CPU相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息等信息
- 读取MBR(Master Boot Record,主引导记录)。MBR就是磁盘上第0磁道的第一个扇区,里面含有 boot loader 的代码。
- 运行 boot loader。Boot Loader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
- 加载内核。根据boot loader设定的内核映像所在的路径,读取内核映像并进行解压缩操作。
- 运行 init 程序。init永远是系统启动后运行的的第一个进程,PID(进程编号)为1。位置在sbin/init ,之后会按照设置执行一大堆系统启动时要启动的脚本、加载的驱动等功能,我们要设置的开机启动项就是在这一步执行的。
- 执行/bin/login程序,进入登录状态。
init 系统能够管理和控制 init 进程的行为,并负责组织和运行许多独立的或相关的工作,让系统进入一个用户设定的运行模式中。大多数Linux发行版的 init 系统是 system V 相兼容的,因此被称为 sysvinit,sysvinit 主要依赖于 shell 脚本,但是他一次一个串行的启动进程,决定了它最大的弱点:启动太慢。如果是服务器这类极少进行系统开关操作的话还好,但是如果是个人电脑这样需要经常开关机的话,开机时间太长就难以忍受了。
为了能够更快地启动系统,开发者们对 sysvinit 进行了改进,先后出现了 upstart 和 systemd 这两个主要的新一代 init 系统。目前最新的 Ubuntu 系统就是采用的 systemd 来管理系统,不过仍然兼容 init 系统的启动模式。可以看到 Ubuntu20 的 /sbin/init 是软链接到 /lib/systemd/systemd 上的。systemd 与 init 虽然启动过程不太一样,但最终的目的是一致的,都是要启动那一堆需要开机运行的脚本文件。
在 init 系统模式下,内核调用 init 进程后会首先获取系统运行级别(run-level)的信息,运行级别在这里不是启动优先级,可以理解为运行模式,运行级别共有 0~6 七种:
- 0:关机
- 1:单用户模式
- 2:多用户模式,没有网络支持
- 3:多用户模式,有网络支持
- 4:保留,未使用
- 5:X11,与运行级别 3 类似,但加载使用 X-windows 支持的图形界面
- 6:重启
这几种模式有什么用呢?举个例子,在Ubuntu的终端下,重启指令除了 reboot<

本文详细介绍Ubuntu20.04系统开机启动流程,重点讲解如何利用rc-local.service实现shell脚本开机自启动,包括配置步骤、注意事项及验证方法。

8136

被折叠的 条评论
为什么被折叠?



