linux系统启动详解
系统启动流程
1.BIOS(进行自检)
2.MBR:Boot Code(磁盘分区机制,引导代码,此时已经到硬盘或者设备)
3.执行引导程序-GRUB
4.加载内核(kernel,此时操作系统的底层已经启动)
5.执行Init(第一个进程,pid=1)
6.runlevel
1 BIOS
BIOS(basic input output system)我们称之为基本输入输出系统,一般保存在主板上的BIOS芯片中.
计算机启动的时候第一个运行的就是BIOS,BIOS负责检查硬件以及查找可启动设备.
可启动设备在BIOS设置中进行定义,如USB,CDROM,HD
2 MBR
BIOS找到可启动设备后执行其引导代码
引导代码为MBR的前446字节
3 GRUB
Grub是现在linux使用的主流引导程序
可以用来引导现在几乎所有的操作系统
Grub的相关文件保存在/boot/grub目录中
Grub配置文件/boot/grub/grub.cfg(ubuntu14.04)
例如可以看到:timeout=10,这个是加载的超时时间
4 kernel
MBR的引导代码将负责找到并加载内核
linux内核保存在/boot/vmlinuz-----
一般还会加载内核模块打包文件:/boot/initrd....
linux为保持kernel的精简将一些不常用的驱动,功能编译成成为模块,在需要的时候动态加载,而这些模块被打包保存为一个initramfs文件.
initramfs是initrd的替代优化版本,比initrd更节省空间更灵活.
命令dmesg可以查看本次启动时内核的输出信息
5 init
init是linux系统中运行的第一个进程
使用top命令可以看到
1 root 20 0 4524 2532 1424 S 0.0 0.1 0:01.66 init
PID=1的进程的名字为init
进程编号PID是按照系统启动顺序进行排列的,说明init是操作系统是第一个启动的进程,并且一直存在直到关键,init还是所有进程的父进程.
调用/etc/rc.d/rc.sysinit负责对系统进行初始化,挂载文件系统,并且根据运行级别启动相应服务,
推荐知乎上的一个回答Linux 中 init.d、init 文件有什么作用?。
linux运行级别:
0 关机
1 单用户模式
2 不带网络的多用户模式
3 多用户模式
4 未使用
5 X11图形化模式
6 重新启动
使用最多的linux运行级别是3和5,它们的区别就在于是否有图形界面.
可以通过/etc/inittab配置文件修改默认的运行级别
每个级别对应的启动服务保存在/etc/rc.d/rc[0123456].d中
命令runlevel可显示当前以及上一个运行级别
命令init可用以改变当前运行级别
单用户修改ROOT密码
为内核传递参数1或者single可系统进入单用户模式
单用户模式下不启动任何服务
单用户模式直接以模式登陆,不需要密码
可以使用passwd root修改root用户的密码
GRUB加密
通过在grub.conf中的启动配置中加入如下参数即可对grub进行加密:
password --md5 %**********
加密后的密码可以通过grub-md5-crypt生成