从按下开机键到输入用户名密码,进入系统的整个过程中,具体有哪些步骤?
了解开机启动的过程有什么意义呢?
下面先看一张图片。
linux开机启动全过程流程图

-
了解Linux开机启动的全过程后,即可知晓哪些系统文件与开机启动有关;(rc.local文件中添加自启动命令,在/etc/init.d目录下添加自启动脚本)
-
开机不能正常启动时,可以从开机启动的各个环节去排查
-
可以通过开机启动的过程去排查开机自启动的服务,与哪些文件哪些命令有关。
-
病毒的植入,也与开机启动过程相关。
一.开机自检(POST)
开机自检:上电自检(POST, Power on Self Test)
指计算机系统,接通电源, (BIOS程序)的行为,包括对CPU、系统主板、基本内存、扩展内存,系统ROMBIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。
检查:主板(motherboard),CPU,内存,磁盘,网卡,显卡,声卡,电源,鼠标,键盘,显示器等
二.BIOS程序(完成开机自检的程序)
BIOS程序
BIOS是英文"Basic Input output system"的缩略词,直译过来后中文名称就是"基本输入输出系统"。
BIOS是个人电脑后动时加载的第一个软件。
它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序,它可从CMOS中读写系统设置的具体信息。其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。此外,BIOS还向作业系统提供一些系统参数。系统硬件的变化是由BIOS隐藏,程序使用BIOS功能而不是直接控制硬件。现代作业系统会忽略BIOS提供的抽象层并直接控制硬件组件。
(1)BIOS是一个程序会读取CMOS芯片里的参数,了解cpu的配置,时间的配置,启动顺序的配置等
(2)CMOS :是一个存储参数配置的芯片
三.按boot第一顺序启动
boot :引导、启动
启动顺序:
BIOS–boot
第1引|导顺序: hard drive硬盘(台式机一般就是硬盘启动)
第2引导顺序: cd rom光驱 —》安装系统
第3引导顺序: removable device可移动设备–》u盘,移动硬盘–》安装系统
第4引导顺序: Network–从网络启动–》网络中安装服务器启动–》安装
四.MBR
MBR–》在硬盘的第1个扇区–》主引导记录–》用来启动linux系统的程序
BIOS–》主板里的程序(有一个指针,固定到磁盘的第1个扇区)–》disk–》MBR–》grub2
MBR: master boot record
主引导记录:有启动程序 grub2
MBR只占512个字节
五./boot里文件的驱动
[root@localhost boot]# ls
config-4.18.0-240.el8.x86_64 initramfs-4.18.0-240.el8.x86_64kdump.img
efi loader
grub2 System.map-4.18.0-240.el8.x86_64
initramfs-0-rescue-c60d2d9754344502ada018e9d5f81a56.img vmlinuz-0-rescue-c60d2d9754344502ada018e9d5f81a56
initramfs-4.18.0-240.el8.x86_64.img vmlinuz-4.18.0-240.el8.x86_64
六.内核文件
initramfs-4.18.0-147.e18.x86-64.img )给内核程序提供一个初始化的内存文件系统的镜像文件–》临时的根文件系统的镜像文件
宫殿、大臣、军队、妃子等
init 初始化 initial
ram:随机存取存储器(random access memory的缩写)
fs:file system - -》
vmlinuz-4.18.0-147.e18.x8664 --》内核程序文件–》皇上
initramfs-4.18.0-147.e18.x8664kdump.img
解压initramfs:
[root@localhost 530]# cp /boot/initramfs-4.18.0-240.el8.x86_64.img .
[root@localhost 530]# ls
initramfs-4.18.0-240.el8.x86_64.img
[root@localhost 530]# cpio -idmv < initramfs-4.18.0-240.el8.x86_64.img
.
early_cpio
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/GenuineIntel.bin
202 块
[root@localhost 530]# ls
early_cpio initramfs-4.18.0-240.el8.x86_64.img kernel
七.systemd进程
pstree命令是用于查看进程树之间的关系,即哪个进程是父进程,哪个是子进程,可以清楚的看出来是谁创建了谁。
安装pstree程序:
八.运行级别
在centos6里有哪些运行级别?(RunLevel)
0 --》关机
1 --》单用户模式–》破密码
2–》多用户模式,不能使用NFS功能
3–》完全多用户模式 multi-user–> CLI 字符界面
4–》没有用
5–》图形界面 graphical --》GUI界面
6–》重启
例如:
init 0 = 关机
init 6 = 重启
补充:
init 3进入运行级别3 --》字符界面
runlevel
centos7里只有3和5 多用户和图形化界面
5 3 --》开机的时候是图形界面后面进入了字符界面
不同的级别启动的服务是不一样的
3 字符界面–》会定义哪些程序在字符界面下开机启动–>开启的程序少–》消耗的资源少–》最小化安装–》3
5 图形界面–》会定义哪些程序在图形界面下开机启动–》开启的程序多–》消耗资源多–》带GUI服务器–》5
九.输入用户名与密码
用户输入用户名与密码后
Linux系统自动进入/etc/passwd 查找用户名
再根据用户名进入/etc/shadow 查找用户密码
此处的用户密码是通过哈希加密算法保存的,Linux是不能通过破解哈希算法来得到原密码,而是通过用户输入的密码,再次进行一次哈希计算,再将运行完的结果与存储的密码进行比较。
十.补充
1.查看当前的默认启动模式
[root@localhost lianxi]# systemctl get-default
multi-user.target
2.修改为图形界面启动模式/设置默认的运行级别为GUI
[root@localhost boot]# systemctl set-default graphical
Removed /etc/systemd/system/default.target.
Created symlink /etc/systemd/system/default.target → /usr/lib/systemd/system/graphical.target.
没有安装相关程序所以会按照字符页面正常启动
[root@localhost boot]# systemctl get-default
graphical.target
centos6里使用的chkconfig systemctl 取代了chkconfig的方式
3.设置开机自启:
yum install mariadb mariadb-server -y 安装mariadb的数据库软件
[root@localhost system]# pwd
/usr/lib/systemd/system--》集中存放所有需要启动的服务的目录
[root@localhost system]# cd /etc/systemd/system/multi-user.target.wants/
[root@localhost multi-user.target.wants]# pwd
/etc/systemd/system/multi-user.target.wants--》多用户模式开机启动的服务存放的目录
[root@localhost multi-user.target.wants]# systemctl disable mariadb.service 禁用服务开机启动
Removed /etc/systemd/system/multi-user.target.wants/mariadb.service.
Removed /etc/systemd/system/mysql.service.
Removed /etc/systemd/system/mysqld.service.
[root@localhost multi-user.target.wants]# systemctl enable mariadb设置服务开机启动
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
4.其他
/etc/rc.local 启动的过程中,最后会运行这个脚本里的命令(这个文件必须要有可执行权限)
/etc/fstab 启动的过程中,会加载这个文件里知道的磁盘分区
十一.思考题
1.如何查看一个服务是否开机启动?
[root@alyeast_hq_dxjl_233_65 ~]# systemctl status chronyd.service
* chronyd.service - NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:chronyd(8)
man:chrony.conf(5)
[root@alyeast_hq_dxjl_233_65 ~]# systemctl status httpd.service
* httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)
[root@alyeast_hq_dxjl_233_65 ~]# systemctl list-units
UNIT LOAD ACTIVE SUB DESCRIPTION
proc-sys-fs-binfmt_misc.automount loaded active running Arbitrary Executable File Formats File System Automount Point
sys-devices-pci0000:00-0000:00:03.0-virtio0-net-eth0.device loaded active plugged Virtio network device
sys-devices-pci0000:00-0000:00:04.0-virtio1-virtio\x2dports-vport1p1.device loaded active plugged /sys/devices/pci0000:00/0000:00:04.0/virtio1/virtio-ports/vport1p1
sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda-vda1.device loaded active plugged /sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda/vda1
sys-devices-pci0000:00-0000:00:05.0-virtio2-block-vda.device loaded active plugged /sys/devices/pci0000:00/0000:00:05.0/virtio2/block/vda
sys-devices-pci0000:00-0000:00:06.0-virtio3-block-vdb-vdb1.device loaded active plugged /sys/devices/pci0000:00/0000:00:06.0/virtio3/block/vdb/vdb1
sys-devices-pci0000:00-0000:00:06.0-virtio3-block-vdb.device loaded active plugged /sys/devices/pci0000:00/0000:00:06.0/virtio3/block/vdb
sys-devices-platform-serial8250-tty-ttyS1.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS1
sys-devices-platform-serial8250-tty-ttyS2.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS2
sys-devices-platform-serial8250-tty-ttyS3.device loaded active plugged /sys/devices/platform/serial8250/tty/ttyS3
sys-devices-pnp0-00:04-tty-ttyS0.device loaded active plugged /sys/devices/pnp0/00:04/tty/ttyS0
sys-module-configfs.device loaded active plugged /sys/module/configfs
sys-module-fuse.device loaded active plugged /sys/module/fuse
sys-subsystem-net-devices-eth0.device loaded active plugged Virtio network device
-.mount loaded active mounted /
dev-hugepages.mount loaded active mounted Huge Pages File System
dev-mqueue.mount loaded active mounted POSIX Message Queue File System
hxdata.mount loaded active mounted /hxdata
。。。。。
# 查看系统中已经enable的服务
systemctl list-unit-files --state=enabled
# 查看系统中已经disable的服务
systemctl list-unit-files --state=disabled
2.设置yum install安装的nginx服务开机启动
/ect/rc.local和/ect/rc.d/rc.local是软链接关系
systemctl enable vsftpd
Linux设置开机启动的三种方法
方法一 添加命令
编辑文件 /etc/rc.local
vim /ect/rc.local
复制
/ect/rc.local和/ect/rc.d/rc.local是软链接关系
chmod +x /ect/rc.d/rc.local
复制
方法二 添加脚本
自己写一个shell脚本将写好的脚本(.sh文件)放到目录 /etc/profile.d/ 下,系统启动后就会自动执行该目录下的所有shell脚本。
cd /etc/profile.d/
复制
添加脚本 srs.sh
#!/bin/sh
cd /usr/local/srs2
nohup ./objs/srs -c conf/z.conf>./log.txt &
复制
方法二 添加服务
添加文件新建/etc/init.d/srs.sh 文件
#!/bin/sh
# chkconfig:23458515
# description:auto_run
#程序根位置
MY_ROOT=/usr/local/srs2/
#运行程序位置
MY_PATH="${MY_ROOT}objs/srs"
#LOG位置
LOG_PATH="$MY_ROOT"log.txt
#开始方法
start(){
cd $MY_ROOT
nohup $MY_PATH-c conf/z.conf>$LOG_PATH&
echo "$MY_PATH start success."}
#结束方法
stop(){
kill -9`ps -ef|grep $MY_PATH|grep -v grep|grep -v stop|awk '{print $2}'`
echo "$MY_PATH stop success."}case"$1"in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;*)
echo "Userage: $0 {start|stop|restart}"
exit 1
esac
复制
添加执行权限
给sh文件和jar可执行权限
chmod +x /etc/init.d/srs.sh
复制
设置开机启动
首先,添加为系统服务
chkconfig --add srs.sh
复制
开机自启动
chkconfig srs.sh on
复制
查看
chkconfig --list
复制
启动
service srs.sh start
复制
停用
service srs.sh stop
复制
查看启动情况
lsof -i:1935
3.破坏MBR文件能不能运行?
MBR被破坏,系统将无法运行。所以一般需要将mbr文件备份到远程主机。
磁盘分区中MBR的模拟损坏及修复_51CTO博客_磁盘分区格式mbr和gpt的区别
4.假如你是一个黑客,如何让你的木马程序开机启动?(当然,我开玩笑的)
5.如何设置默认的运行级别为3?
6.编译安装的软件如何设置开机启动?
-
编写的脚本如何设置开机启动?
8.删除/boot分区里的内容,是否可以开机?
删除/boot分区的内容,系统无法开机。必须要修复boot里的内容,系统才能重新开机。
要修复/boot,就要修复里面最重要的几个文件:
-
/boot/vmlinuz --内核文件
-
/boot/initramfs --虚拟内存盘,
-
/boot/grub/grub.conf --grub2 stage2的核心配置文件
9.把内存条拔出来,是否可以开机?
不能,电脑开机过程是 先BIOS开机自检,然后再装载磁盘扇区的引导程序到内存中,接着把操作系统载入内存,才能进入系统运行各种应用程序,没有内存条再bios开机自检时就会出错,会一直发出“嘀”的声音。显示器上也不会显示什么信息。
如果你电脑只有一条内存,开机状态拔掉内存,那电脑果断关机。如果电脑有两条内存的话且都好用的情况下,开机状态拔下一根内存,那么电脑果断蓝屏是肯定的。
千万不要在开机状态下去拔内存,哪怕显示器没有信号,只要主机运行着,CPU风扇转就不要拔插内存。一条内存开机状态拔插内存,后果:内存有可能烧毁。主板插槽有可能烧毁。如果正在运行程序的情况下拔插还可能损坏高速运转的硬盘。
意识到不小心在开机状态下拔下内存,请立即拔下电脑的电源,然后把主板上的电池也抠下来,过两分钟以后把电池安上。