按完开机键后,控制权交给主板,主板里的BIOS程序,会检测硬件的好坏,然后根据启动顺序才能把控制权交给硬盘,硬盘再去读取软件,加载到内存里面去。
先补充相关知识:
1.与关机有关的命令:
init 0
poweroff
Halt
shutdown (默认)1min后关机
shutdown -h now 立刻关机
shutdown -c 取消关机
2.了解开机启动流程有什么意义?
- 掌握如何让自己开发的程序开机启动
- 开机不能正常启动,是什么原因,或是那个环节出了问题
- 防止黑客植入木马,去查询黑客会把木马放到哪些地方
3.快照的作用:对虚拟机当前的状态做个备份,保留虚拟机的状态。但是快照会占用磁盘空间。
4.电脑的主要硬件:
主板:所有硬件的载体。在上面安装组成电脑的主要电路系统,主要作用就是将计算机各个硬件设备的工作相互连接,所有的硬件之间的数据传输靠主板传送;
CPU中央处理器:负责执行指令并处理数据;
RAM内存:用于暂时存储程序和数据;
HDD/SSD硬盘:计算机存储的主要设备,用于永久存储数据。SSD固态硬盘,HDD传统的机器硬盘,SSD硬盘的读取速度比HDD硬盘快很多;
显卡:控制图形的输出。
一、开机自检
开机启动后,主板会进行开机自检:
1.由哪个硬件或者硬件里的软件来完成工作?谁完成?
硬件:主板
主板里有个BIOS程序来完成自检工作
2.检查什么?
检查电脑里的硬件是否存在,是否能够正常工作
BIOS程序
BIOS:Basic input output system 基本输入输出系统,是电脑启动时加载的第一个软件。BIOS程序是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机自检程序和系统自启动程序,从CMOS中读取参数:了解cpu的配置,时间的配置,启动顺序的配置等。CMOS是主板上一个存储配置参数的芯片。
补充:ROM芯片为只读的存储器,特点为停电不会丢失,永久写入了;RAM芯片为随机存取存储器,特点是停电会丢失数据。
CMOS与BIOS之间的关系:
如何进入BIOS:
笔记本:F1,F2,F8,F12等
服务器:开机有提醒
台式机:del、delete
虚拟机:F2-进入BIOS;ESC:修改开机启动顺序
BIOS界面:
其中Boot启动顺序检查:
Hard Drive 从硬盘启动
CD-ROM Drive 光驱
Removable device 可移动设备(u盘、移动硬盘)
Network 网络(网络中安装服务器启动)
一开始装系统的时候选择将光驱CD-ROM调到第一启动顺序,装好后把Hard Drive调为第一启动顺序,从硬盘启动。
为了防止数据被盗,可以设置BIOS密码:进入BIOS后,选择Security标签设置密码,如下图。
二、加载主引导记录
第一启动顺序设置为硬盘,从硬盘启动后BIOS程序离场。硬盘中的一个特殊位置:MBR–主引导记录,是硬盘中非常重要的一个位置,磁盘里最开始的位置,是固定的,占一个扇区,一个扇区512个字节。
主板移交控制权给硬盘后,在MBR中读取启动程序到内存中去,MBR里面的启动程序是grub2。grub是linux里的一个引导程序,非常小;grub2是grub的升级版。
引导程序的两个阶段:
第一阶段:将硬盘中MBR分区的grub2加载到内存
第二阶段:加载文件系统的驱动,读取磁盘中的数据,找到系统内核文件并加载内核文件
三、加载内核启动服务
vmlinuz-3.10.0-1160.el7.x86_64是linux的内核文件,是一个可执行的程序;initramfs-3.10.0-1160.el7.x86_64.img压缩文件,在内存中解压,解压完成后会形成一个临时的根文件系统,给vmlinuz提供很多程序和驱动文件。
将vmlinuz、initramfs加载到内存中去后,会启动系统的第一个进程systemd进程。启动systemd进程后会启动对应运行级别里的服务。
运行级别–一个比较老的概念,在centos6里面非常流行:
0 关机
1 单用户模式(只允许一个用户登录)
2 多用户模式,不能使用网络资源
3 完全多用户模式(字符界面)
5 图形界面
6 重启
相关命令:
1.runlevel:查看运行级别
返回结果含义:N表示一开始进入没有级别;3表示现在是运行级别3。即返回结果的第一个字符表示一开始进入之前是什么级别,第二个字符表示现在是什么级别。
2.init 0:关机
3.init 6:重启
4.init [num]:进入运行级别[num]
在新版centos操作系统中,有个文件/etc/inittab还保留了这种概念,并引出新的概念:
multi-user.target:命令行界面
graphical.target:图形界面,图形界面相比命令行界面启动的程序多一些,消耗的内存和CPU多一些
根据文件/etc/inittab还可以知道命令:
1.查看默认启动模式(运行级别):systemctl get-default
2.设置默认模式:systemctl set-default multi-user.target/graphical.target
如何在linux中安装图形界面?
在安装时,选软件选择(最小安装只装最基本的软件)
选择下图三个都可以实现图形化界面,只是界面不一样
systemd进程如何管理服务?
以service结尾的文件是用来启动某个具体的服务的(对应着某个程序),想要在开机时启动服务,就要在相应的运行级别的文件夹中创建链接文件,链接到服务的源文件,这些文件均以service结尾。相应的想要设置开机不启动服务,本质就是删除链接文件。
只要是yum安装的软件,会自动创建一个service文件;编译安装的文件没有,需要自己的创建service文件。如果有了service文件,可以通过systemctl start/stop/enable/disable/restart [服务]命令管理服务,即systemd可以通过上述过程去管理服务。
以ssh服务为例,查看ssh服务对应的源文件sshd.service:
当所有的服务都启动后,会去执行/etc/rc.local脚本里的命令,可以将一些想要开机执行的脚本放在该文件中。注意:想要开机执行某脚本,要将/etc/rc.d/rc.local文件授予可执行权限,其中/etc/rc.local是一个链接文件,指向/etc/rc.d/rc.local
还会去加载/etc/fstab文件,根据该文件里的分区信息进行挂载,这样我们就知道了整个系统里的磁盘有哪些分区可以使用,加载了真正的根文件系统。
四、登录
启动好服务加载好文件后,会执行login程序,出现登录画面:输入用户名和密码,根据/etc/passwd和/etc/shadow文件验证用户信息,验证通过就会去加载环境变量的配置文件,登录画面如下图:
4个用户环境变量的配置文件:
影响某个用户:
~/.bashrc
~/.bash_profile
影响所有用户:
/etc/bashrc
/etc/profile
4个环境变量配置文件的启动顺序为:
注意:想要执行某些命令或脚本也可以潜伏在这4个环境变量配置文件中。
思考
学习完开机启动流程后,提出一些思考问题:
1.开机启动的某个环节出问题,机器是否可以正常启动,如:删除/boot分区?破坏MBR?
都不能正常启动
2.木马程序可以在哪里藏身?
1.从启动systemd进程后面的过程进行排查:异常服务、rc.local或四个环境变量配置文件中的异常命令
2.排查计划任务:crontab -l
3.查看是否有打开的可疑端口:netstat -anpltu
4.查看可疑的进程:ps aux
营救模式
营救模式适合虚拟机环境和真实机器环境。
若不小心删除了/etc/passwd或/etc/shadow文件,怎么可以恢复正常启动?
前提:开启营救模式能够恢复这两个文件的底气是系统里有备份文件passwd-和shadow-
思路:硬盘里的系统启动不了,借助光盘里的系统启动,然后去修复硬盘里的系统
操作步骤:
将光盘放入光驱,设置第一启动顺序为CD-ROM:
启动后选择Troubleshooting:
选择营救模式:
选择继续:
进入原来的根环境:
还原:
退出:
重启后记得将第一启动顺序调整回Hard Drive。