一、Linux 系统引导过程
Linux 系统从加电到进入登录界面,需要经历一系列引导步骤。下面按阶段梳理完整的引导流程。
1. 加电开机自检
过程:系统开机后,通过 BIOS 对 CPU、内存、显卡、键盘等设备进行初步检测,检测成功后根据 BIOS 设置的启动顺序,系统会选择一个设备(硬盘、光驱、U盘等)进行引导。
总结:开机上电后 BIOS 执行硬件自检,确认设备无异常;再按启动顺序查找引导介质,加载找到的第一个可启动设备。
要点:按下电源,BIOS 对 CPU、内存、显卡等硬件进行检测;自检通过后,按照预设启动顺序查找可引导设备(硬盘 / U 盘)。
2. MBR 引导
过程:如果从硬盘启动,系统会从硬盘的第一个扇区加载 MBR(主引导记录),并通过 MBR 启动菜单(如 GRUB)选择操作系统启动。
总结:读取硬盘 MBR 引导程序,运行 GRUB 引导加载器,找到操作系统所在路径,完成系统启动。
要点:BIOS 选定硬盘启动后,读取硬盘第一个扇区的 MBR 主引导记录,加载 GRUB 引导程序。
3. GRUB 引导菜单
过程:GRUB 是 Linux 常用的多重操作系统引导程序。GRUB 会显示启动菜单,用户选择启动项后加载操作系统的内核文件,并将控制权交给内核。
总结:GRUB 引导程序读取 /boot/grub2/grub.cfg 配置文件,找到内核与系统镜像路径,加载启动操作系统并将控制权移交内核。
要点:GRUB 读取 /boot/grub2/grub.cfg 配置文件,展示启动菜单,定位内核路径,加载 Linux 内核与临时镜像,将控制权交给内核。
4. 加载 Linux 内核
过程:内核文件就是一个预编译的二进制文件,介于硬件和系统程序之间,负责管理硬件资源和系统进程。
总结:将内核文件和镜像文件加载到内存,内核接管硬件资源管理与进程调度。
要点:内核文件与系统镜像载入内存,内核接管硬件资源,管理硬件与进程,完成硬件底层初始化。
5. init 进程初始化
过程:内核加载后,会启动系统的初始化进程 /sbin/init(现代 Linux 为 systemd),该进程辅助进一步的系统初始化工作,如加载硬件驱动、启动系统服务,最终等待用户登录。
总结:内核启动 init(systemd)进程,完成系统的初始化,加载硬件驱动、启动系统服务,最后进入登录界面。
要点:内核启动 PID=1 的 systemd(原 init)进程,加载硬件驱动、启动系统服务,最后调出登录界面,等待用户登录。
6. 极简版流程
- 加电自检:BIOS 检车硬件,查找引导设备
- MBR 引导:读取硬盘首扇区,加载 GRUB
- GRUB 菜单:读取 grub.cfg,加载内核,移交控制权
- 内核加载:内核与镜像载入内存,接管硬件管理
- systemd 初始化:启动一号进程,加载驱动、开机服务,进入登录界面
7. 补充:sysvinit 与 systemd 对比
| 版本 | CentOS5/6 | CentOS7/8/9 |
| 启动方式 | 串行,按运行级别 | 并行,按需启动 |
| 管理命令 | service、chkconfig | systemctl |
| 配置文件 | /etc/inittab、rc*.d | .service |
| 依赖管理 | 弱,手动控制 | 自动识别服务依赖 |
二、Systemd 系统服务管理器
1. Systemd 的优点
并行启动服务:与传统的 SysVinit 相比,Systemd 支持并行启动多个服务,从而加速系统启动过程。
按需启动服务:Systemd 可以按需启动服务,避免了启动不必要的服务,提高系统的效率。
总结:Systemd 改善了系统的启动速度和服务管理效率,解决了 SysVinit 启动慢和脚本复杂的问题。
2. 运行级别与 Systemd 目标(runlevel)
在 Linux 系统中,运行级别(runlevel)定义了系统的运行状态。Systemd 通过目标(target)来代替传统的运行级别。以下是常见的运行级别与对应 Systemd 目标:

- 0 停机:关机,不可设为默认级别
- 1 单用户模式:root 维护模式,本地登录,无网络,可重置 root 密码
- 2 多用户模式:支持多用户、网络,无 NFS 文件共享
- 3 完整多用户文本模式:有网络+NFS,纯命令行(服务器最常用)
- 4 预留未使用:自定义备用,一般不用
- 5 图形 GUI 模式:带 X-window 图形桌面
- 6 重启:不可设为默认级别
3. 设置与切换运行级别
systemctl 常用命令:
- 查看(开机)默认目标:systemctl get-default
- 设置默认目标(修改开机默认,重启后生效):systemctl set-default multi-user.target(多用户文本模式,相当于 runlevel3)
- 切换到指定目标(立即生效,重启后失效):systemctl isolate graphical.target(图形 GUI 模式,相当于 runlevel5)
- 查看当前正在运行的 target:systemctl list-units –type=target
4. 服务管理
- systemctl start httpd.service 立即启动 httpd 服务(立即生效,重启失效)
- systemctl enable httpd.service 设置开机自启,不会立即启动服务
- systemctl enable –now httpd.service 启动+自启动
- systemctl disable httpd.service 取消开机自启,不会立即停止服务
- systemctl is-enabled httpd.service 查询开机自启状态(不是当前运行状态)
- systemctl list-units –type=service 查看当前已经加载激活、正在运行的服务
- hostnamectl set-hostname newname 永久修改主机名
- systemctl status sshd 查看服务详细状态
- systemctl stop sshd 停止服务
- systemctl stop firewalld.service 临时关闭防火墙,重启后恢复
- systemctl start firewalld.service 启动防火墙
- systemctl restart firewalld.service 重启服务:先 stop 再 start,服务会中断
- systemctl reload firewalld.service 重载配置:不中断服务进程,加载新配置
三、扩展:chkconfig 与 systemctl 对比
chkconfig 是 CentOS6(sysvinit)用来管理服务在不同运行级别开机自启的命令,CentOS7+ 用 systemctl,只是保留兼容。
常用命令(chkconfig 只管【开机是否自启】,不控制当前正在运行的服务):
- 查看服务状态:chkconfig –list httpd(查看)
- 添加服务到系统:chkconfig –add http(注册脚本)
- 设置服务在特定级别下启动:chkconfig –level 35 httpd on(指定级别)
- 启动 / 停止服务(CentOS6):service httpd start / service httpd stop
| 管理对象 | 运行级别 runlevel | target 目标 |
| 开机自启 | chkconfig | systemctl enable/disable |
| 启停服务 | service xxx start | systemctl start xxx |
| 配置文件 | /etc/rc.d/init.d/ 脚本 | .service 单元文件 |
| 启动方式 | 串行 | 并行 |
网硕互联帮助中心



评论前必须登录!
注册