admin 管理员组

文章数量: 887016

Linux开机启动流程详解

  • 一.开机启动流程
  • 二.开机启动流程的意义:
      • 了解开机启动流程就是为了解决这些问题
  • 三.Linux开机完整流程图
    • 一.开机自检(POST)
    • 二.BIOS程序(完成开机自检的程序)
    • 三.按boot第一顺序启动
    • 四.MBR
    • 五./boot里文件的驱动
    • 六.内核文件
    • 七.systemd进程
    • 八.运行级别
    • 九.输入用户名与密码
    • 十.补充
      • 1.查看当前的默认启动模式
      • 2.修改为图形界面启动模式/设置默认的运行级别为GUI
      • 3.设置开机自启:
      • 4.其他
    • 十一.思考题
      • 1.如何查看一个服务是否开机启动?
      • 2.设置yum install安装的nginx服务开机启动
      • 3.破坏MBR文件能不能运行?
      • 4.假如你是一个黑客,如何让你的木马程序开机启动?(当然,我开玩笑的)
      • 5.如何设置默认的运行级别为3?
      • 6.编译安装的软件如何设置开机启动?
      • 7.编写的脚本如何设置开机启动?
      • 8.删除/boot分区里的内容,是否可以开机?
      • 9.把内存条拔出来,是否可以开机?

关于Linux的开机启动流程一定要认真了解、牢记。

一.开机启动流程

按一下开机按钮到你输入用户名和密码,进入系统的整个过程,都叫开机启动流程–》我们这篇文章主要是关注这个过程计算机背后发生的事情

二.开机启动流程的意义:

大家可以思考一下:

1掌握让某个软件开机自动运行
2.开机不能正常启动,是什么原因…那个环节出现了问题
3.防止黑客植入木马,去查询黑客会把木马放到哪些地方?

了解开机启动流程就是为了解决这些问题

三.Linux开机完整流程图

一.开机自检(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程序:

[root@localhost 530]# yum provides pstree #查找是谁提供的pstree这个命令
上次元数据过期检查:1:29:20 前,执行于 2021年05月30日 星期日 10时10分10秒。
psmisc-23.1-5.el8.x86_64 : Utilities for managing processes on your system
仓库        :baseos
匹配来源:
文件名    :/usr/bin/pstree

[root@localhost 530]# yum install psmisc -y #安装pstree
查看boot运行的进程
[root@localhost boot]# pstree -p
systemd(1)─┬─NetworkManager(888)─┬─{NetworkManager}(923)
           │                     └─{NetworkManager}(924)
           ├─VGAuthService(879)
           ├─auditd(802)───{auditd}(803)
           ├─bash(19419)───sleep(51883)
           ├─crond(1523)
           ├─dbus-daemon(886)
           ├─irqbalance(883)───{irqbalance}(891)
           ├─login(992)───bash(1438)
           ├─nginx(23007)─┬─nginx(23338)
           │              ├─nginx(23339)
           │              ├─nginx(23340)
           │              └─nginx(23341)
           ├─polkitd(884)─┬─{polkitd}(969)
           │              ├─{polkitd}(970)
           │              ├─{polkitd}(971)
           │              ├─{polkitd}(972)
           │              └─{polkitd}(999)
           ├─rngd(911)───{rngd}(919)
           ├─rsyslogd(1013)─┬─{rsyslogd}(1042)
           │                └─{rsyslogd}(1044)
           ├─sshd(938)───sshd(43448)───sshd(43451)───bash(43452)───pstree(51884)
           ├─sssd(878)─┬─sssd_be(916)
           │           └─sssd_nss(954)
           ├─systemd(1428)───(sd-pam)(1430)
           ├─systemd-journal(720)
           ├─systemd-logind(977)
           ├─systemd-udevd(760)
           ├─tuned(939)─┬─{tuned}(1419)
           │            ├─{tuned}(1421)
           │            └─{tuned}(1422)
           ├─vim(9461)
           └─vmtoolsd(880)─┬─{vmtoolsd}(904)
                           └─{vmtoolsd}(908)

由于Centos版本的不同第一个进程也不同
例如:
Centos 6 第一个进程为: init
Centos 7 第一个进程为:systemd

八.运行级别

在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.如何查看一个服务是否开机启动?

2.设置yum install安装的nginx服务开机启动

3.破坏MBR文件能不能运行?

4.假如你是一个黑客,如何让你的木马程序开机启动?(当然,我开玩笑的)

5.如何设置默认的运行级别为3?

6.编译安装的软件如何设置开机启动?

7.编写的脚本如何设置开机启动?

8.删除/boot分区里的内容,是否可以开机?

9.把内存条拔出来,是否可以开机?

本文标签: 有一 这篇 流程 Linux 就够啦