中华考试网·阅读新闻
操作系统 > Linux > 文章内容

Linux操作系统学习笔记(44)

2016-1-5编辑:ljnbset

系统启动和引导过程

当打开 Linux 计算机时会发生什么?

在几乎每种 Linux 配置中,引导过程都可以分为 9 个步骤:

  1. 硬件和固件:BIOS 或固件系统读取硬盘或者其他引导设备(例如,光盘、软盘、网络引导等等)上的主引导记录。
  2. 引导装载程序运行。x86 系统上的 Linux 系统通常使用 LILO 或者 GRUB。某些老式系统可能使用 loadlin 通过一个中间 DOS 分区进行引导。在 Power PC® 系统上,这可能是 BootX 或者 yaboot。一般来说,引导装载程序 是一种简单的程序,它知道到哪里寻找 Linux 内核,可能在几个版本之间进行选择,甚至可以选择同一计算机上的其他操作系统。
  3. 内核装载。
  4. 安装根文件系统。在某些情况下,装载一个临时 ramdisk 映像,然后再安装真正的根文件系统,这样可以启用真实根文件系统所需的特殊驱动程序或模块。

安装好根文件系统之后,就可以开始初始化了。

  1. 启动进程 init 是所有其他 Linux 进程的父进程。
  2. 读取 /etc/inittab 的内容,对余下的引导步骤进行配置。特别重要的是,/etc/inittab 中的命令行控制将系统引导到哪个运行级别,从而决定初始化期间还要执行哪些步骤。

实际上,此后的所有引导过程完全由文件 /etc/inittab 的内容控制。具体来说,脚本和工具一般按照某些约定运行,但是理论上完全可以通过修改 /etc/inittab 来运行不同的脚本。

/etc/inittab 中的一个特定设置特别关键。这一行像下面这样:

id:5:initdefault:

这一行一般出现在接近文件顶部的地方,它设置运行级别。运行级别控制 /etc/inittab 脚本其余部分中采取的操作。

在处理 /etc/inittab 脚本时发生了什么?具体来说,在这个过程中涉及哪些文件和目录?

  1. 与运行级别无关的系统初始化。一般情况下,无论运行级别如何,都要执行某些初始化操作。这些步骤在 /etc/inittab 中用下面这样的设置表示:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

在某些 Linux 系统上(大多数基于 Debian 的系统),还会看到:

si::sysinit:/etc/init.d/rcS

如果是后一种情况,/etc/init.d/rcS 是一个脚本,它只运行每个匹配 /etc/rcS.d/[Ss]??* 的脚本。另一方面,如果系统使用 /etc/rc.d/rc.sysinit,那么这个文件包含一个长脚本,用于执行所有 初始化过程。

  1. 特定于运行级别的系统初始化。实际上,可以把任意数量的操作与运行级别联系起来,而且一个操作可以与一个或多个运行级别相关联。/etc/inittab 包含的代码像下面这样:

l0:0:wait:/etc/rc.d/rc 0
# ...
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

脚本 /etc/rc.d/rc 将运行所有匹配 /etc/rc$1.d/[KkSs]??* 模式的文件。例如,在以运行级别 5 启动的示例系统上,会依次运行以下文件:

/etc/rc5.d/K15postgresql
/etc/rc5.d/S01switchprofile
/etc/rc5.d/S05harddrake
...
/etc/rc5.d/S55sshd
...
/etc/rc5.d/S99linuxconf
/etc/rc5.d/S99local

以 “K”或“k” 开头的文件是杀死脚本,它们结束进程或者清除进程的操作。以“S”或“s”开头的文件是启动脚本,它们一般启动新进程或者使系统准备在此运行级别上运行。这些文件大多数是 shell 脚本,而且大多数是链接(常常链接到 /etc/init.d/ 中的文件)。

在大多数情况下,当 Linux 系统在一个运行级别上运行之后,您希望作为用户登录进系统。为此,运行一个称为 getty 的程序来处理登录过程。发行版创建者们使用基本 getty 的许多变体,比如 agetty、mgetty 和 mingetty。这些程序基本上都做同样的工作。

 

  1. 在提示符下登录。/etc/inittab 常常在一个或多个虚拟终端中启动 getty 程序,并且为几个不同运行级别这样做。这是用下面这样的代码配置的:

# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

第一个数字是运行 getty 的虚拟终端,后面的一组数字是采用此操作的几个运行级别(例如,在运行级别 2、3、4 和 5 上都启动 mingetty)。

接下来的步骤可能涉及启动更多服务、登录进一种图形化环境、恢复 UI 设置或者其他更个性化的细节,这超出了本教程的讨论范围。

Linux操作系统学习笔记(43)
咨询热线:4000-525-585(免长途费)