系统启动过程
总的来说,linux系统启动流程可以简单总结为以下几步:
1)开机BIOS自检,加载硬盘。
2)读取MBR,进行MBR引导。
3)grub引导菜单(Boot Loader)。
4)加载内核kernel。
5)启动init进程,依据inittab文件设定运行级别
6)init进程,执行rc.sysinit文件。
7)启动内核模块,执行不同级别的脚本程序。
8)执行/etc/rc.d/rc.local
9)启动mingetty,进入系统登陆界面。
linux系统安装时,如果要想设置开启启动项,可以:
开机到BIOS提醒界面,按键F11(Dell服务器的做法)进入BIOS设置BOOT MENU,继而设置启动项:硬盘HD启动,光盘CD/DVD启动,还是U盘USB启动。
下面就linux操作系统的启动过程做一详细解析记录:
加载内核
操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。
启动初始化进程
内核文件加载以后,就开始运行第一个程序 /sbin/init,它的作用是初始化系统环境
操作系统 》/boot》init进程
确定运行级别
许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做"守护进程"(daemon)。
init进程的一大任务,就是去运行这些开机启动的程序。
但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
Linux允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。
操作系统》/boot》init进程》运行级别
Linux预置七种init运行级别(0-6):
0:关机模式 (相当于poweroff)
1:单用户模式(破解root密码的方法:linux系统root密码遗忘的情况下的解决办法)
2:无网络支持的多用户模式
3:有网络支持的多用户模式(也就是文本模式,工作中最常用的模式)
4:保留,未使用
5:有网络支持的X-windows支持多用户模式(也就是桌面图形模式)
6: 重新引导系统,即重启 (相当于reboot)
init进程首先读取文件 /etc/inittab,它是运行级别的设置文件。
加载开机启动程序
七个 /etc/rcN.d 目录里列出的程序,都设为链接文件,指向另外一个目录 /etc/init.d ,
真正的启动脚本都统一放在这个目录中。init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。
操作系统》/boot》init进程》运行级别》/etc/init.d
用户登录
开机启动程序加载完毕以后,就要让用户登录了。
操作系统》/boot》init进程》运行级别》/etc/init.d》用户登录
进入 login shell
所谓shell,简单说就是命令行界面,让用户可以直接与操作系统对话。
用户登录时打开的shell,就叫做login shell。
操作系统》/boot》init进程》运行级别》/etc/init.d》用户登录》Login shell
打开 non-login shell
上一步完成以后,Linux的启动过程就算结束了,用户已经可以看到命令行提示符或者图形界面了。
但是,为了内容的完整,必须再介绍一下这一步。
用户进入操作系统以后,常常会再手动开启一个shell。
这个shell就叫做 non-login shell,意思是它不同于登录时出现的那个shell,不读取/etc/profile和.profile等配置文件。
操作系统》/boot》init进程》运行级别》/etc/init.d》用户登录》Login shell》Non-Login shell