linxu系统引导&运行级别&chkconfig&/etc/rc/init.d&/etc/rc/rc*.d

一、 Linux的引导过程
   系统启动之后,在进入init.d之前,我们先来看看系统都做了什么工作
   我们从比较高的角度去看开始引导的整个过程,比较清晰明了。 系统加电之后,首先进行的硬件自检,然后是bootloader对系统的初始化加载内核
   内核被加载到内存中之后,就开始执行了。一旦内核启动运行,对硬件的检测就会决定需要对哪些设备驱动程序进行初始化。从这里开始,内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘的过程)。内核挂装了根文件系统,并已初始化所有的设备驱动程序和数据结构等之后,就通过启动一个叫init的用户级程序,完成引导进程
【很重要亚强】我们在这里总结一下linux系统引导,从系统加电,到根据运行级别启动对应服务的整个过程:
a:继续上面的叙述,启动init用户级程序后,init首先从/etc/inittab文件中读取当前系统的默认启动级别,如该文件中有行id:3:initdefault:,代表默认启动级别为3。
b:接着init引导进程根据默认启动级别3,到/etc/rc.d/rc3.d/目录(启动级别为*,那么从/etc/rc.d/rc*.d/目录下查询)下查询在启动级别3的的时候,应该启动的服务。该/etc/rc.d/rc3.d/目录下是一些软链接,目的地址为/etc/rc.d/init.d/,这些软链接执行时候会传递stop或start参数到/etc/rc.d/init.d/目录下的脚本文件,从而确定是否运行对应服务。依次执行/etc/rc.d/rc3.d/文件下的软链接,从而依次执行当前运行级别下应该启动的服务。关于服务的启动先后顺序等参见本页面后面讲述的《三、 /etc/rc.d/与/etc/rc.d/init.d的关系》部分。
二、 运行级别(run level)
   Init进程是系统启动之后的第一个用户进程, 所以它的pid(进程编号)始终为1。init进程上来 首先做的事是去读取初始化运行级别文件/etc/inittab文件中initdefault id值(该文件有行“id:3:initdefault:”,代表初始化系统以运行级别3加载相关服务),这个值称为运行级别(run-level)。它决定了系统启动之后运行于什么级别。 运行级别决定了系统启动的绝大部分行为和目的。这个级别从0到6 ,具有不同的功能。不同的运行级定义如下:
  # 0 - 停机(千万别把initdefault设置为0,否则系统永远无法启动)
  # 1 - 单用户模式
  # 2 - 多用户,没有 NFS
  # 3 - 完全多用户模式(标准的运行级)
  # 4 – 系统保留的
  # 5 - X11 (x window)
  # 6 - 重新启动 (千万不要把initdefault 设置为6,否则将一直在重启 )
   
三、 /etc/rc.d/与/etc/rc.d/init.d的关系
   写到这里,应该差不多要进入init.d了,可是我觉得单写/etc/rc.d/init.d的话不一定能说得清楚明白,就拿它跟/etc/rc.d这个它上一级的目录一起来讨论,可能比较合适一些,因为他们之间有着千丝万缕的关系。
   在这里先解释一下 init.d里面放的都是什么东西。这个目录存放的是一些脚本,一般 是linux以rpm包安装时设定的一些服务的启动脚本。系统在安装时装了好多rpm包,这里面就有很多对应的脚本(亚强备注:这里rpm包与yum安装包类似,比如我们要安装postfix邮件服务,我们执行命令yum install postfix,我们使用rpm -ql postfix 会发现,该yum安装命令执行后,会增加一个postfix邮件服务的shell脚本启动文件/etc/rc.d/init.d/postfix,这个文件就是postfix邮件服务的启动脚本文件) 执行这些脚本可以用来启动,停止,重启这些服务。
   前面说到,/etc/rc.d/init.d这个目录下的脚本就类似于windows中的 注册表,在系统启动的时候执行。程序运行到这里 (init进程从/etc/inittab文件读取运行级别为*,然后从/etc/rc.d/rc*.d读取了该运行级别下启动哪些具体服务)接着运行init.d里的脚本了,但是并不是直接运行,而是根据/etc/rc.d/rc*.d中的软连接文件有选择的执行一些服务。

       那么,系统是如何选择哪些需要启动哪些不要呢?这时刚才说的运行级别就起作用了。
       在决定了系统启动的run level之后,/etc/rc.d/rc这个脚本先执行。在RH9(红帽linux系统)和FC7的源码中它都是一上来就check_runlevel()(虽然实现的代码不一样,也大同小异),检测到运行级别之后,对于每一个运行级别在rc.d下都有一个子目录分别是rc0.d,rc1.d ….. rc6.d每个目录下都是到init.d目录的一部分脚本一些链接。每个级别要执行哪些服务就在相对应的目录下,比如级别5要启动的服务就都放在rc5.d下,但是放在这个rc5.d下的都是一些链接文件,链接到init.d中相对应的文件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值