开机流程
加载BIOS
读取MBR
Boot Loader
加载内核
内核加载完成后第一个执行的程序是/sbin/init。用top命令查看,PID为1的就是这个程序。
用户层init依据inittab文件来设定运行等级
init首先查找启动等级(run-level)。因为启动等级不同,运行的启动脚本会不同。默认的等级有以下几项:
0 - halt (系统直接关机)
1 - single user mode (单人模式,用于系统维护时使用)
2 - Multi-user, without NFS (类似3模式,不过少了NFS服务)
3 - Full multi-user mode (完整模式,不过,是文本模式)
4 - unused (系统保留功能)
5 - X11 (与3模式类似,不过,是X终端显示)
6 - reboot (重新开机)
(不要选择0,4,6 ,否则进不了系统)init进程执行rc.sysinit
系统知道自己的启动等级后,接下来不是执行对应等级的启动脚本去启动服务,而是先设置好主机运行环境,执行的脚本文件是rc.sysinit,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。可以查看一下rc.sysinit文件得到更多内容。
执行不同运行级别的脚本程序
rc.d目录中,不同的level会有不同的目录。如启动 3模式,会有个rc3.d目录,里面就保存着需要启动的服务条目。其中S(start)开头的表明开机启动,K(kill)开头的表明开机不启动。数字表示启动顺序,数字越小,启动越早。
执行rc.local
启动服务后,接着就会执行rc.local脚本。所以,如果需要什么开机启动的话,可以写个脚本或命令到这里面来。
执行/bin/login程序,进入登录状态
进入shell
用户登录后的启动操作
用户登录后还会执行一些shell脚本(不同发行版本可能会有所不同)
/etc/profile.d/file
/etc/profile
/etc/bashrc
/root/.bashrc
/root/.bash_profile
备注说明
- Linux不同的发行版本中,rc.sysinit、rc.d、rc.local的名称和位置或许有所不同,但启动思想是一致的,在/etc目录下可以找到相应的文件。