Linux开机流程

Linux开机流程
1.BIOS: Linux开机时首先加载BIOS的硬件信息,众所周知BIOS即Basic Input/Output Setup的意思,每次你按下开机键,计算机首先就会加载BIOS的信息,开机时按del键可以进入BIOS进行设置,比如最常用的就是设置从硬盘启动还是从光驱启动或其他,相信装过操作系统的人都知道这个。当然BIOS里面还有相当多的信息,比如硬盘大小,电压等。
2. MBR( master boot record ):LILO 取得控制权. 如果BIOS是设置从硬盘启动的话,那么读完BIOS后会先去读取第一个开机硬盘的头一个扇区,就是MBR,估计有人听过,即master boot record。引导程序如grub,lilo都装在这里。为什么要读取这些信息呢?想想你机器里装的多系统,如果没有引导程序,机器就不知道他该启动哪个系统,引导程序的作用正是提供几个操作系统的选项,然后各个选项都指向了操作系统的启动地址。
3.载入 kernel ,内核执行/sbin/init程序,而这个程序会根据/etc/inittab文件里的信息选择登入模式,一共有7种模式,分别以0--6数字表示。etc/rc.d 中包含:

目录 script 档案  
/etc/rc.d/init.d  
/etc/rc.d/rc0.d  
/etc/rc.d/rc1.d  
/etc/rc.d/rc2.d  
/etc/rc.d/rc3.d  
/etc/rc.d/rc4.d  
/etc/rc.d/rc5.d  
/etc/rc.d/rc6.d  
rc  
rc.local  
rc.sysinit  
  

rc0.d 便是 run-level 0 起动 script 存放的目录, rc3.d 是 run-level 3, 其它依此类推

不过, rc0.d ~ rc6.d 中的 script 并不是各自独立的, 其实它们都是 symbolic file, 连结到 /etc/rc.d/init.d 中的 script.

4.init
   init 执行第一支 script : /etc/rc.d/rc.sysinit
rc.sysinit 会设定许多系统变数, 如:

设定 PATH  
设定网路: 读取 /etc/sysconfig/network, 以设定 NETWORKING, FORWARD_IPV4, HOSTNAME, DOMAINNAME, GATEWARY, GATEWAYDEV(eth0)  
设定 NIS domain name  
并且执行 run-level 启动之前所需的许多准备动作, 如:

起动 swapping  
checking root filesystems : 检查 root 档案系统  
检查系统参数 (/proc), 设定 PNP  
清除 /etc/mtab  
mount root 及 /proc 档案系统  
决定是否使用模组, 载入模组  
检查档案系统 (使用 fsck)  
挂上其它档案系统  
设定 console 字型  
打开 quota  
清除不必要的档案, 如 lock, pid  
设定 clock  
serial port 初始化  
将开机讯息经由 dmesg 放入 /var/log/dmesg 中  
  

5. init 执行预设的 run-level 目录中所有的 scripts

正常情况下就是 rc3.d, 因为 /etc/inittab 中有一行设定是: id:3:initdefault: 表示预设要执行的 run-level 是 level 3. 因此, 刚刚上面各位看到的 rc3.d 中的 Sxx 及 Kxx 都会被执行.

6. 最後 init 执行 /etc/rc.d/rc.local 这支 script.

rc.local 会在各 run-level 的 script 执行完之後再执行. 您可以将自己想在开机时处理的动作加在这个 script 之中.

7. init 执行完之後, 接着执行 /bin/login 程式

login 程式会提示使用者需输入帐号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell.

8. shell  

假设预设的 shell 是 bash, 则 bash 会先寻找 /etc/profile, 执行其中的指令, 然後搜寻使用者目录中, 是否有 .bash_profile, .bash_login, 或 .profile, 执行其中一个, 接着命令提示符号 $ 便出现在萤幕上, 等待您输入命令.

你可能感兴趣的:(Linux开机流程)