INITTAB 配置文件

  Inittab 文件详解      
init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序。
init程序需要读取配置文件/etc/inittab。inittab是一个不可执行的文本文件,它有若干行指令所组成。
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)

id:5:initdefault:

(参考http://blog.csdn.net/hudaweikevin/article/details/13502739)

内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。
 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init.如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。
 init进程作为所有进程的起点,它会读取inittab的配置。下面我们来分析一下inittab吧

 \etc\inittab  
 
 首先分析一下inittab的格式:
 inittab文件中的值都是如下格式:
  label:runlevel:action:process
  label是1~4个字符的标签,用来标示输入的值。一些系统只支持2个字符的标签。鉴于此原因,多数人都将标签字符的个数限制在2个以内。该标签可以是任意字符构成的字符串,但实际上,某些特定的标签是常用的,在Red Hat Linux中使用的标签是:
  代码:
  *id 用来定义缺省的init运行的级别
  si 是系统初始化的进程
  ln 其中的n从1~6,指明该进程可以使用的runlevel的级别
  ud 是升级进程
  ca 指明当按下Ctrl+Alt+Del时运行的进程
  pf 指当UPS表明断电时运行的进程
  pr 是在系统真正关闭之前,UPS发出电源恢复的信号时需要运行的进程
  x 是将系统转入X终端时需要运行的进程

  *runlevel字段指定runlevel的级别。可以指定多个runlevel级别,也可以不为runlevel字段指定特定的值。
  Runlevel 0 是让init关闭所有进程并终止系统。
  Runlevel 1 是用来将系统转到单用户模式,单用户模式只能有系统管理员进入,在该模式下处理那些在有登录用户的情况下不能进行更改的文件,改runlevel的编号1也可以用S代替。
  Runlevel 2 是允许系统进入多用户的模式,但并不支持文件共享,这种模式很少应用。
  Runlevel 3 是最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式。
  Runlevel 4 一般不被系统使用,用户可以设计自己的系统状态并将其应用到runlevel 4阶段,尽管很少使用,但使用该系统可以实现一些特定的登录请求。
  Runlevel 5 是将系统初始化为专用的X Window终端。对功能强大的Linux系统来说,这并不是好的选择,但用户如果需要这样,也可以通过在runlevel启动来实现该方案。
  Runlevel 6 是关闭所有运行的进程并重新启动系统。

 

  *action字段定义了该进程应该运行在何种状态下:
  boot 在系统启动时运行,忽略runlevel
  bootwait 在系统启动时运行,init等待进程完成。忽略runlevel
  ctrlaltdel 当Ctrl+Alt+Del三个键同时按下时运行,把SIGINT信号发送给init。忽略runlevel
  initdefault 不要执行这个进程,它用于设置默认runlevel
  kbrequest 当init从键盘中收到信号时运行。这里要求键盘组合符合KeyBoardSigral(参见/usr/share/doc/kbd-*关于键盘组合的文档)
  off 禁止进入,因此该进程不运行
  once 每一个runlevel级别运行一次
  ondemand 当系统指定特定的运行级别A、B、C时运行
  powerfail 当init收到SIGPWR信号时运行
  powerokwait 当收到SIGPWD信号且/etc/文件中的电源状态包含OK时运行
  powerwait 当收到SIGPWD信号,并且init等待进程结束时运行
  respawn 不管何时终止都重新启动进程
  sysinit 在运行boot或bootwait进程之前运行
  wait 运行进程等待输入运行模式

  *process字段包含init执行的进程,该进程采用的格式与在命令行下运行该进程的格式一样,因此process字段都以该进程的名字开头,紧跟着是 运行时,紧跟着是运行时要传递给该进程的参数。比如/sbin/shutdown -t3 -r now,该进程在按下Ctrl+Alt+Del时执行,在命令行下也可以直接输入来重新启动系统。

 

 第一段:
   # The default runlevel
   id:5:initdefault:
 个人分析:
      process为空表示不启动任何进程,这应该就是内核刚起来不执行任何进程,仅仅只默认启用完整服务并进入图形界面模式。
      
 第二段:
   # Boot-time system configuration/initialization script.
   # This is run first except when booting in emergency (-b) mode.
   si::sysinit:/etc/init.d/rcS
 个人分析:
   根据注释已经很明白的说明这里是运行系统配置或初始化的一些脚本
   
 第三段:
   # What to do in single-user mode.
   ~~:S:wait:/sbin/sulogin
 个人分析:
   等待管理员用户登录进行下一步的操作

 第四段:
   l0:0:wait:/etc/rc.d/rc 0
     l1:1:wait:/etc/rc.d/rc 1
     l2:2:wait:/etc/rc.d/rc 2
     l3:3:wait:/etc/rc.d/rc 3
     l4:4:wait:/etc/rc.d/rc 4
     l5:5:wait:/etc/rc.d/rc 5
     l6:6:wait:/etc/rc.d/rc 6
 个人分析:
   进入对应的运行级别来执行对应目录下面的脚本
   
 第五段:
   # Normally not reached, but fallthrough in case of emergency.
   z6:6:respawn:/sbin/sulogin
 个人分析:可以不用管,用不上
 
 第六段:
   S:2345:respawn:/sbin/getty 115200 ttyO0
   the "ID " field must be the same as the last characters of the device(after "tty")
 个人分析:
   根据注释,S与这段命令的最后一个字符必须一致
   还原命令应该为:0:2345:respawn:/sbin/getty 115200 tty0
   其实就是在2,3,4,5的运行级别下都会打开串口0,波特率为115200

   (这里我还没理解好,今天才理解到这里还启用了终端服务,是以串口的形式访问的)????
 
 
 
 总结:init过程就是根据initab表进入对应的运行模式就干对应的事情,用户都可以设置的。

 

配置文件:/etc/inittab:runlevel用来表示在init进程结束之后的系统状态,在系统的硬件中没有固定的信息来表示 它纯粹是一种软件结构。init和inittab是runlevel影响系统状态的唯一原因

 

  Runlevel 0 是让init关闭所有进程并终止系统。
  Runlevel 1 是用来将系统转到单用户模式,单用户模式只能有系统管理员进入,在该模式下处理那些在有登录用 户的情况下不能进行更改的文件,改runlevel的编号1也可以        用S代替。
  Runlevel 2 是允许系统进入多用户的模式,但并不支持文件共享,这种模式很少应用。
  Runlevel 3 是最常用的运行模式,主要用来提供真正的多用户模式,也是多数服务器的缺省模式。
  Runlevel 4 一般不被系统使用,用户可以设计自己的系统状态并将其应用到runlevel 4阶段,尽管很少使用,但 使用该系统可以实现一些特定的登录请求。
  Runlevel 5 是将系统初始化为专用的X Window终端。对功能强大的Linux系统来说,这并不是好的选择,但用户 如果需要这样,也可以通过在runlevel启动来实现该方案。
  Runlevel 6 是关闭所有运行的进程并重新启动系统。

 

根据上面的配置文件,2、3、4、5级别上以ttyX为参数执行启动/sbin/mingetty(tty1-tty6),启动六次,也就是启动6个终端,至此,系统显示登陆界面,启动过程准备完成。
**id:runlevel:action:process: 
id是指入口标识符:运行级别的标识:运行方式(nitdefault、sysinit、boot、bootwait):执行程序
respawn:重新执行终端,否则无法利用ALT+Fn切换终端


/etc/inittab文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的4个字段。具体如下: 
identifier : run_level : action : process 
其中,各字段以及与其相关的说明如下: 
identifier  登记项标识符,最多为4个字符。用于惟一地标识/etc/inittab文件中的每一个登记项

run_level  系统运行级,即执行登记项的init级别。用于指定相应的登记项适用于哪一个运行级,即在哪一个运行级中被处理。如果该字段为空,那么相应的登记项将适用于所有的运行级。在该字段中,可以同时指定一个或多个运行级,其中各运行级分别以数字0.1.2.3.4.5.6或字母a、b、c表示,且无需对其进行分隔。

action    动作关键字。用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作。具体动作包括: 
  1、boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,也不重新启动该进程。 
  2、bootwait:只有在引导过程中,才执行该进程,并等待进程的结束:当该进程死亡时,也不重新启动该进程。实际上,只有在系统被引导后,并从单用户方式进入多用户方式时,这些登记项才被处理;如果系统的默认运行级设置为2(即多用户方式),那么这些登记项在系统引导后将马上被处理。 
  3、initdefault:指定系统的默认运行级。系统启动时,init将首先查找该登记项。如果存在init将据此决定系统最初要进入的运行级。具体来说,init将指定登记项“run_level"字段中的最大数字(即最高运行级)为当前系统的默认运行级;如果该字段为空,那么将其解释为“0123456”,并以“6”作为默认运行级。如果不存在该登记项,那么init将要求用户在系统启动时指定一个最初的运行级。 
  4、off:如果相应的进程正在运行,那么就发出一个警告信号,等待20秒后,再通过杀死信号强行终止该进程。如果相应的进程并不存在那么就忽略该登记项。 
  5、once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个登记项;当该进程死亡时,init也不重新启动该进程。注意:在从一个运行级进入另一个运行级时,如果相应的进程仍然在运行,那么init就不重新启动该进程。 
  6、ondemand:与“respawn”的功能完全相同,但只用于运行级为a、b或c的登记项。 
  7、powerfail:只在init接收到电源失败信号时执行相应的进程,但不等待该进程结束。 
  8、powerwait:只在init接收到电源失败信号时执行相应的进程,并在继续对/etc/inittab文件进行任何处理前等待该进程结束。 
  9、respawn:如果相应的进程还不存在,那么init就启动该进程,同时不等待该进程的结束就继续扫描/etc/inittab文件;当该进程死亡时,init将重新启动该进程。如果相应的进程已经存在,那么init将忽略该登记项并继续扫描/etc/inittab文件。 
  10、sysinit:只有在启动或重新启动系统并首先进入单用户时,init才执行这些登记项。而在系统从运行级1-6进入单用户方式时,init并不执行这些登记项。"action”字段为“sysinit”的登记项在“run_level”字段不指定任何运行级。 
  11、wait:启动进程并等待其结束,然后再处理/etc/inittab文件中的下一个登记项。

   
  process   所要执行的shell命令。任何合法的shell语法均适用于该字段。包含init执行的进程,该进程采用的格式与在命令行下运行该进程的格式一样,因此process字段都以该进程的名字开头,紧跟着是 运行时,紧跟着是运行时要传递给该进程的参数。比如/sbin/shutdown -t3 -r now,该进程在按下Ctrl+Alt+Del时执行,在命令行下也可以直接输入来重新启动系统。

 

posted on 2015-01-26 10:36  linuxSu  阅读(639)  评论(0编辑  收藏  举报

导航