Chinaunix首页 | 论坛 | 博客

分类: LINUX

2009-01-21 13:24:16

  第一支程式 init 及设定档 /etc/inittab 与 runlevel

  在核心载入完毕之后,此时系统应该就已经准备妥当,等待程式的执行了。而整个 Linux 系统当中第一支被执行的程式就是‘ /sbin/init ’啰~这也是我们在前一章使用 ps aux |more 时, 看到第一行所显示的程序内容 (PID 为 1 的那行啦) ! init 这支程式所做的工作相当的多, 他除了利用设定档‘ /etc/inittab ’来取得开机的等级 ( Run level ) 之外,还会经由这个 run level 的设定值来进行不同的开机服务项目的启动。

  那么什么是 run level 呢?他有什么功用啊?其实很简单啦, Linux 就是藉由设定 run level 来规定系统使用不同的服务来启动,让 Linux 的使用环境不同。基本上,依据有无网路与有无 X Window 而将 run level 分为六个等级,分别是:

  * 0 - halt (系统直接关机)
  * 1 - single user mode (单人维护模式,用在系统出问题时的维护)
  * 2 - Multi-user, without NFS (类似底下的 runlevel 3,但无 NFS 服务)
  * 3 - Full multi-user mode (完整的含有网路功能的纯文字模式)
  * 4 - unused (系统保留功能)
  * 5 - X11 (与 runlevel 3 类似,但使用 X Window)
  * 6 - reboot (重新开机)

  由于 run level 0, 4, 6 不是关机、重新开机就是系统保留的,所以:‘ 您当然不能将预设的 run level 设定为这三个值 ’, 否则系统就会不断的自动关机或自动重新开机....

  好了,那么我们开机时,到底是如何取得系统的 run level 的?呵呵!当然是 /etc/inittab 所设定的啰! 那么 /etc/inittab 到底有什么资讯呢?我们先来看看这个档案的内容好了:

  [root@linux ~]# vi /etc/inittab
  # 设定系统开机预设的 run level 设定项目:
  id:3:initdefault:

  # 开始进行 run level 的服务启动前,使用来侦测与初始化系统环境的设定档:
  si::sysinit:/etc/rc.d/rc.sysinit

  # 7 个不同 run level 的,需要启动的服务的 scripts 放置路径:
  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

  # 是否允许按下 [ctrl]+[alt]+[del] 就重新开机的设定项目:
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now

  # 本机端终端机启动的个数:
  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

  # 在 X Window (run level 5) 环境下的启动 script 设定项目:
  x:5:once:/etc/X11/prefdm -nodaemon

  inittab档案的语法是这样的:

  [设定项目]:[run level]:[init 的动作行为]:[指令项目]

  1. 设定项目
  最多四个字元,代表 init 的主要工作项目,只是一个简单的代表说明。
  2. run level
  该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与 5 都会执行。如果是2345则是runlevel 2345都会被执行。
  3. init 的动作项目:man inittab中是action项目。
  主要可以进行的动作项目意义有:
  initdefault    :代表预设的 run level 设定值;
  sysinit    :代表系统初始化的动作项目;
  ctrlaltdel    :代表 [ctrl]+[alt]+[del] 三个按键是否可以重新开机的设定;
  wait        :代表后面接的指令项目必须要执行完毕才能继续后面的动作;
  respawn    :代表后面接的指令项目, init 仍会主动的‘重新’启动。
  更多的设定项目请参考 man inittab 的说明。
  4. 指令项目
  亦即应该可以进行的指令,通常是一些 script 啰。

  所以我们可以得到这样的结论:

  * 如果不想让使用者利用 [crtl]+[alt]+[del] 来重新启动系统,可以将底下这一行注解掉:
  ca::ctrlaltdel:/sbin/shutdown -t3 -r now

  * 规定开机的预设 run level 是纯文字 (3) 或者是具有图形介面 (X Window, 5) ,可经由 ‘ id:3:initdefault: ’那个数字来决定! 以鸟哥自己这个档案为例,我是使用纯文字喔!

  所以说,你现在会自行修改登入时的预设 run level 设定值了吗?够简单的吧? 一般来说,我们预设都是 3 或者是 5 来作为预设的 run level 的。但有时后可能需要进入 run level 1, 也就是单人维护模式的环境当中。这个 run level 1 有点像是 Windows 系统当中的‘安全模式’啦, 专门用来处理当系统有问题时的操作环境。此外,当系统发现有问题时,举例来说,不正常关机造成 filesystem 的不一致现象时,系统会主动的进入单人维护模式呢!

  好了, init 在取得 run level 之后,接下来要干嘛? 上面 /etc/inittab 档案内容不是有提到 sysinit 吗?嘿嘿!准备初始化系统了吧!

阅读(1229) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~