有人能告诉我或给我一个链接,准确告诉我 Linux 启动时执行的程序或进程是什么吗?即从 grub(Linux 引导加载程序)启动
您可以选择您喜欢的口味。
答案1
RHEL3/4/5:
- 蛴螬
- 内核加载(由 grub 定义)
- 内核加载并挂载 grub 定义的 initrd
- 内核从 initrd 中查找并运行一些内容(通常足以获取挂载根文件系统所需的模块)
- initrd 和/或内核挂载 /
- /sbin/init 运行
- init 解析 /etc/inittab,获取有关要处于哪个运行级别的参数,并使用该参数或默认值来决定要运行哪些项目。通常首先是“/etc/rc.d/rc.sysinit”,然后是“/etc/rc.d/rc 3”。它还会为前 6 个 tty 运行 /sbin/mingetty。
- /etc/rc.d/rc.sysinit 包含所有 fsck 内容,并挂载所有其他非网络文件系统
- “/etc/rc.d/rc 3”按数字顺序运行 /etc/rc3.d 中所有以“K”开头、带有“stop”参数的程序以及所有以“S”开头、带有“start”参数的程序(这些是指向 /etc/init.d 脚本的符号链接)。这些脚本启动网络、启动 iptables、安装网络文件系统并启动所有其他服务。
在 Ubuntu 10 和 RHEL6(目前为测试版)中,经典的 init 已被“Upstart”取代,它使用 /etc/init 目录而不是 /etc/inittab。/etc/init 有一堆单独的文件,配置了它们的作用以及导致它们运行的条件。其中一个相当于 /etc/rc.d/rc.sysinit,其余大部分相当于 /etc/init.d 脚本。
答案2
内核启动后的引导过程实际上相当简单。内核启动init
,它通过脚本解析/etc/inittab
并启动其他所有内容。这些脚本启动在正常系统操作期间可能在后台运行的各种守护程序。init
还会生成任何getty
进程,这些进程通常用于控制台上的用户登录,有时用于其他接口(最常见的是串行接口)。
不同的 Linux 发行版使用不同的方法来识别脚本及其执行顺序(如果它是 SysV 风格的 init,则有时会区分给定的运行级别)。维基百科中有关 init 的页面可以为您提供更多详细信息,但基本上可以分解为存储/引用 init 将调用的脚本的方法的样式选择。内核本身与使用的 init 约定类型无关 - 它只是将 init 作为第一个用户级进程启动。
在 SysV 样式的 init 系统中,运行级别(基本上是一种允许系统以各种可能的启动配置启动的方法。如果您熟悉 Windows,可以将其类比为 Windows 的“硬件配置文件”、“安全模式”等。)决定执行哪些脚本。在 BSD 样式的 init 系统中,一系列rc
脚本决定每次启动时启动的内容。
有些发行版init
一开始是初始 RAM 磁盘。initrd 是在启动过程中使用的文件系统,用于加载内核模块并引导系统到可以挂载和访问“真实”根文件系统的程度。