Skip to content
Shimon's BlogShimon's Blog
主页
杂谈
  • 主页
      • 代码笔记
          • Linux
            • CentOS 教程
                • Linux 简介
                  • Linux 和 UNIX
                    • Linux 的优点
                      • Linux 简介
                        • Linux 系统启动过程
                          • 内核引导
                            • 运行 init
                              • 运行级别
                              • 系统初始化
                              • 桌面系统
                                • 语言
                                • ssh
                                  • WSL

                                Linux 系统启动过程

                                Shimon Zhan2022年4月19日大约 3 分钟

                                此页内容
                                • 内核引导
                                • 运行 init
                                  • 运行级别
                                • 系统初始化

                                # Linux 系统启动过程

                                提示

                                本篇教程以 CentOS 为例介绍系统的启动过程。

                                Linux 启动时我们会看到许多启动信息。

                                Linux 系统的启动过程并不是大家想象中的那么复杂,其过程可以分为 5 个阶段:

                                • 内核的引导。
                                • 运行 init。
                                • 系统初始化。
                                • 建立终端 。
                                • 用户登录系统。

                                提示

                                init 程序的类型:

                                • SysV: init, CentOS 5 之前, 配置文件: /etc/inittab。
                                • Upstart: init,CentOS 6, 配置文件: /etc/inittab, /etc/init/*.conf。
                                • Systemd: systemd, CentOS 7,配置文件: /usr/lib/systemd/system、 /etc/systemd/system。

                                # 内核引导

                                当计算机打开电源后,首先是 BIOS 开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)来启动。

                                操作系统接管硬件以后,首先读入 /boot 目录下的内核文件。

                                boot

                                # 运行 init

                                init 进程是系统所有进程的起点,您可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。

                                init 程序首先是需要读取配置文件 /etc/inittab。

                                init

                                # 运行级别

                                许多程序需要开机启动。它们在 Windows 叫做"服务"(service),在 Linux 就叫做"守护进程"(daemon)。

                                init 进程的一大任务,就是去运行这些开机启动的程序。

                                但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动 Apache,用作桌面就不需要。

                                Linux 允许为不同的场合,分配不同的开机启动程序,这就叫做"运行级别"(runlevel)。也就是说,启动时根据"运行级别",确定要运行哪些程序。

                                runlevel

                                Linux 系统有 7 个运行级别(runlevel):

                                • 运行级别 0: 系统停机状态,系统默认运行级别不能设为 0,否则不能正常启动
                                • 运行级别 1: 单用户工作状态,root 权限,用于系统维护,禁止远程登陆
                                • 运行级别 2: 多用户状态(没有 NFS)
                                • 运行级别 3: 完全的多用户状态(有 NFS),登陆后进入控制台命令行模式
                                • 运行级别 4: 系统未使用,保留
                                • 运行级别 5: X11 控制台,登陆后进入图形 GUI 模式
                                • 运行级别 6: 系统正常关闭并重启,默认运行级别不能设为 6,否则不能正常启动

                                # 系统初始化

                                在 init 的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了 /etc/rc.d/rc.sysinit,而 rc.sysinit 是一个 bash shell 的脚本,它主要是完成一些系统初始化的工作,rc.sysinit 是每一个运行级别都要首先运行的重要脚本。

                                它主要完成的工作有: 激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。

                                l5:5:wait:/etc/rc.d/rc 5
                                

                                这一行表示以 5 为参数运行 /etc/rc.d/rc,/etc/rc.d/rc 是一个 Shell 脚本,它接受 5 作为参数,去执行 /etc/rc.d/rc5.d/ 目录下的所有的 rc 启动脚本,/etc/rc.d/rc5.d/ 目录中的这些启动脚本实际上都是一些连接文件,而不是真正的 rc 启动脚本,真正的 rc 启动脚本实际上都是放在 /etc/rc.d/init.d/目录下。

                                而这些 rc 启动脚本有着类似的用法,它们一般能接受 start、stop、restart、status 等参数。

                                /etc/rc.d/rc5.d/ 中的 rc 启动脚本通常是 K 或 S 开头的连接文件,对于以 S 开头的启动脚本,将以 start 参数来运行。

                                而如果发现存在相应的脚本也存在 K 打头的连接,而且已经处于运行态了(以 /var/lock/subsys/ 下的文件作为标志),则将首先以 stop 为参数停止这些已经启动了的守护进程,然后再重新运行。

                                这样做是为了保证是当 init 改变运行级别时,所有相关的守护进程都将重启。

                                至于在每个运行级中将运行哪些守护进程,用户可以通过 chkconfig 或 setup 中的 "System Services" 来自行设定。

                                上次编辑于: 2022/4/19 07:13:07
                                贡献者: ShimonZhan
                                上一页
                                Linux 简介
                                下一页
                                桌面系统
                                Copyright © 2021-present Shimon Zhan