Linux系统启动

1.系统启动流程大概
1)启动BIOS
    
2)MBR中的引导代码 BootCode
 
3)执行引导程序
    Linux中用的最多的是GRUB;引导程序的主要作用是用来加载内核;    
 
4)加载系统内核
    
5)执行init
 
6)runlevel
    init根据当前默认的运行级别来启动相关的程序及设备;
 
2.BIOS (basic input output system)
BIOS称为基本输入输出系统,一般保存在主板中的BIOS芯片中;
计算机启动后,执行的第一个程序就是BIOS;
BIOS负责检查硬件并且查找可启动设备;
可以在BIOS中定义可启动设备;例如USB、CDROM、HD;
所谓的可启动设备,就是设备上具有引导信息;
 
3.MBR
MBR分区机制中;设备前512个字节为启动信息;其中最后4个字节为55AA的表示可启动;
设备的前446个字节为其引导代码;
BIOS找到可启动设备后执行其引导代码;
引导代码的功能是引导不同的系统;不同的系统有不同的引导代码,比如windows和linux的引导代码就不同;
引导代码用来查找当前的引导程序;因为MBR的字节数有限,只能去用来加载比较复杂的引导程序;
Linux中常用的引导程序是GRUB;
 
4.GRUB
grub几乎可以用来引导所有的操作系统;
grub的相关文件保存在 /boot/grub 目录中;
/boot目录一般保存与系统启动相关的文件,比如linux内核就保存在这里;
其中 /boot/grub/grub.cfg是启动时的配置文件;可以修改该文件来添加需要引导的设备;
 
5.内核 KENREL
MBR的引导代码负责找到并加载Linux内核;
Linux的内核保存在 /boot/vmlinuz-版本号 ;
Linux一般还需要加载内核模块的打包文件:/boot/initramfs-版本号.img
Linux为了保持内核的精简,将一些不常用的驱动、功能编译成模块,在需要的时候加载;这些模块被打包成一个 initramfs文件;比如键盘、u盘驱动等;
早期Linux使用的是initrd文件;而initramfs 是 initrd 的优化版本,更加灵活且节省空间;
命令dmesg可以查看本次启动时内核的输出信息;
dmesg
这些信息包括:内核在加载驱动、给内存进行区域划分、初始化主板硬盘u盘usb设备等等;
在出现内核级的故障时需要看这些信息,比如有些设备驱动不起来;
/var/log/dmesg 文件中也保存了这些信息;
 
总的来说就是说根据grub的配置,来启动内核;
 
6.INIT
内核启动完后,系统将启动第一个进程,即init;
用 top 命令可以看到一个 pid 为1的进程就是 init;
top
init的作用是调用 /etc/rc.d/rc.sysinit 脚本,负责对系统进行初始化,挂载文件系统,并根据运行级别启动相应服务;
Linux的运行级别:
    0    ->关机
    1    ->单用户模式
    2    ->不带网络的多用户模式
    3    ->多用户模式
    4    ->未使用
    5    ->图形化模式
    6    ->重新启动
 
最常用的运行级别是3和5;它们之间的区别是一个有图形界面,一个只有命令行界面;
 
init的配置文件:
    可以通过 /etc/inittab 修改默认的运行级别;
    其它一些配置文件存放在 /etc/init 目录下;
    每个启动级别对应的启动服务保存在 /etc/rc.d/rc[0123456].d中;
    命令 runlevel 可显示当前及上一个运行级别;
    切换运行级别可用init 命令;
    例如切换到级别3:
init 3
    
7.单用户修改root密码
普通用户的密码忘记了,可以用root用户来修改;
如果root用户的密码忘了,可以进入单用户模式来修改;
单用户模式下登录是不需要密码的;即运行级别1;
可以在启动时引导内核时,传递参数 1 或者 single 来进入单用户模式;
单用户模式下不启动任何服务;
在单用户模式下通过命令 passwd 来修改密码;
 
具体操作:
    在启动界面按 上 或 下 键 ,停住;
    按 e 开始编辑;
    选中内核 kernel 那一行,按e 编辑;
    在最后加一个参数 1即可强制内核以级别1单用户模式启动;
    按b开始启动;
    用命令 passwd 修改密码;
    exit 命令退出单用户模式;
 
但是这样有个隐患:任何人可以接近这台计算机都可以修改root密码;
 
8.GRUB加密
通过在 /etc/grub/grub.conf 中的启动配置中加入如下参数即可对grub加密:也就是在配置文件中加入一行
password --md5 加密后的密码
grub加密后想在引导时进行修改必需先输入 grub密码;
加密后的密码可通过 grub-md5-crypt 生成;
 
如果grub密码也忘了,只能将硬盘取下啦,挂载到另外一台linux系统的机器中,找到grub.conf,把加密配置删除掉;
这样还是有安全隐患,如果硬盘被偷走了,就没办法了;那么只能进行分区级别的加密对根分区进行加密;
 
 
posted @ 2019-03-05 23:41  L丶银甲闪闪  阅读(156)  评论(0编辑  收藏  举报