Linux系统启动过程可以分为5个阶段:
- 内核的引导
- 运行init
- 系统初始化
- 建立终端
- 用户登录系统
内和引导
计算机接通电后,首先是BIOS开机自检,按照BIOS中设置的启动设置(通常是硬盘)来启动。操作系统接管硬件之后,首先读入/boot目录下的内核文件
运行init
Init程序是所有进程的起点,没有这个进程,系统中任何进程都不会启动。
Init程序首先需要读取配置文件/etc/inittab
运行级别
许多程序开机启动。在Windows叫做“服务”service,在Linux中叫做“守护进程”daemon。
Init的一大任务就是运行这些开机启动的程序。但是不同的场合需要不同的程序。Linux为不同的场合分配不同的开机启动程序,这就叫做运行级别。也就是说,启动时根据运行级别确定要运行哪些程序。
Linux有7个运行级别
- 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动。
- 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
- 运行级别2:多用户状态,没有NFS(网络文件系统)
- 运行级别3:完全多用户状态,有NFS,登录后进入控制台命令模式
- 运行级别4:系统未用,保留
- 运行级别5:X11控制台,登录后进入图形GUI模式
- 运行级别6:系统正常关闭并重启,默认不能设置为6,否则不能正常启动。
系统初始化
在init配置文件中有一行:si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc./rc.sysinit,而rc.sysinit是一个bash shell的脚本,它主要完成一系列系统初始化的工作,rc.sysinit是每一个运行级别都要首先运行的重要脚本。 他主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其他一些需要优先执行任务。
建立终端
Rc执行完毕之后,返回init。这是基本系统环境已经设置好了,各守护进程已经启动了。
Init接下来会打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
1:2345:respawn:/sbin/mingetty tty1
2::2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6