天天看点

LINUX启动顺序

今天去面试,面试题第一道,linux启动时加载那个文件启动文件系统,我当时就傻了,我艹,我真给忘了,成天都是改rc.local或在/etc/init.d/rc3.d下加启动项,这之前的启动步骤都忘光了。故找个基础基础在基础的博文保存下,免得忘本。。。。

Linux 启动顺序:

1、 BIOS自检 (服务器硬件启动的第一步,坑定的啦)

2、 运行系统内核并检测硬件(这个是看系统了,redhat等相关版本是通过/boot/vm进行启动 vmlinuz)

3、 运行系统的第一个进程init (init.d没看过代码,有时间得好好看看)

4、 init读取系统引导配置文件/etc/inittab中的信息进行初始化(没啥好说的,很熟,我怎么忘了第一部呢?)

             /etc/rc.d/rc.sysinit------系统初始化脚本

             /etc/rc.d/rcX.d/[KS]*------根据运行级别配置服务

             /etc/rc.d/rc.local---------执行本地特殊配置

             其它---------不同运行级别的特殊服务

Linux启动运行init程序来启动相关程序初始化,与启动相关的一个概念是运行级,运行级是操作系统当前运行的级别,在不同运行级别上可以定义属于该运行级的启动程序,系统的运行级别可以在/etc/inittab文件指定,与运行级相关运行程序通过从源/etc/rc.d/init.d下链接到目的/etc/rcX.d,这里X为系统的默认运行级别,因此,默认的启动脚本放在/etc/rc.d/init.d下。

# 缺省的运行级,Linux用到的级别如下:

# 0 - 停机(千万不要把initdefault 设置为0 )

# 1 - 单用户模式

# 2 - 多用户,但是没有 NFS

# 3 - 完全多用户模式

# 4 - 没有用到

# 5 - X11

# 6 - 重新启动 (千万不要把initdefault 设置为6 )

#

对各个运行级的详细解释:

0 为停机,机器关闭。

1 为单用户模式,就像Win9x 下的安全模式类似。

2 为多用户模式,但是没有NFS 支持。

3 为完整的多用户模式,是标准的运行级。

4 一般不用,在一些特殊情况下可以用它来做一些事情。

例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。

5 就是 X11 ,进到 X Window 系统了。

6 为重启,运行 init 6 机器就会重启。

如何让系统在启动是运行指定程序,根据启动顺序中的第四步,有两种方式。

一种方式是根据运行级别配置服务。

一种方式是执行本地特殊配置。

举例,任务在启动是运行命令cvslockd:

方式一:

1. 建立自启动脚本/etc/rc.d/init.d/cvslockd,内容为:

#!/bin/bash

/usr/local/bin/cvslockd

设置文件的属性为可执行:

#chmod +x /etc/rc.d/init.d/cvslockd

2. 查看计算机运行级别,在文件/etc/inittab里看到id:5:initdefault:,则此系统运行级别为5。

3. 到/etc/rc5.d目录下,把你要执行的可执行文件做一个软连接,而且在命名的时候要以大写S字母开头,S之后的数字大小代表执行顺序的先后,数字越大越后执行。

#ln -s /etc/rc.d/init.d/cvslockd /etc/rc5.d/S100cvslockd

#ln -s /etc/rc.d/init.d/cvslockd /etc/rc0.d/K20cvslockd

方式二:

在/etc/rc.d/rc.local 添加 exec /usr/local/bin/cvslockd

该方式是在最后启动cvslockd。

   rc.d的内容如下:

init.d/ :各种服务器和程序的二进制文件存放目录。

rcx.d/: 各个启动级别的执行程序连接目录。里头的东西都是指向init.d/的一些软连接。具体的后边叙述。

还有三个脚本:rc.sysinit, rc, rc.local

redhat的启动方式和执行次序是:

加载内核

执行init程序

/etc/rc.d/rc.sysinit # 由init执行的第一个脚本

/etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式

/etc/rc.d/rc.local

/sbin/mingetty # 等待用户登录

在Redhat中,/etc/rc.d/rc.sysinit主要做在各个运行模式中相同的初始化工作,包括:

调入keymap以及系统字体

启动swapping

设置主机名

设置NIS域名

检查(fsck)并mount文件系统

打开quota

装载声卡模块

设置系统时钟

等等。

/etc/rc.d/rc则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本。凡是以Kxx开头的

,都以stop为参数来调用;凡是以Sxx开头的,都以start为参数来调用。调用的顺序按xx

从小到大来执行。例如,假设缺省的运行模式是3,/etc/rc.d/rc就会按上述方式调用

/etc/rc.d/rc3.d/下的脚本。

值得一提的是,Redhat中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中

的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。

init在等待/etc/rc.d/rc执行完毕之后(因为在/etc/inittab中/etc/rc.d/rc的

action是wait),将在指定的各个虚拟终端上运行/sbin/mingetty,等待用户的登录。

至此,LINUX的启动结束。

继续阅读