1 ~( ]+ r. h: Y% D! H 内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。 ?1 u) W) U" O' n# V8 Z. H' M
" I4 r: G) H2 N+ e( ~7 O' O 二、运行级别 + G) l* x* L5 f5 y3 E/ w
6 g, c- n( [0 I# g
那么,到底什么是运行级呢? 2 o! Z R1 g: H0 C 8 ^" \8 `+ G) ?, a9 M 简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。 0 W# s( @: s. D& ]4 e% E0 h# `6 e' c2 J6 C% @' e# o# d
不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab) G) i9 S a, N, ~1 l4 l3 r: q+ y
$ T; ^. j! T% P( \7 S id : 2 : initdefault : $ A7 m4 F2 _+ @. m7 K- [' ]8 P& c, L
你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。 . O. P4 \9 P& B" k: Y2 G3 Q) C. q, C; |
系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。 0 d; n; o0 }( f$ x$ f* a
! b# M/ R8 b$ J3 G$ i3 z4 q2 d& f
四、/etc/inittab中的特殊配置 : C- h2 q4 e/ b- f1 c* E: w: V# m( B; y- [
/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如: : S$ p% h' [) P# t. j& g3 {! E
x5 N9 M H3 w, ^! K; q
1. powerwait ' A% v% r) K+ }8 O
* h5 G' V2 w, Q4 z
允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。 1 w |' ~+ m; C7 K& M3 c1 a7 r9 o
5 {7 Q+ h+ _* ~9 ]7 H- F
2. ctrlaltdel ! d4 m- O8 }! O5 p! T
$ l" x1 N' o1 F" e% s# y 允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。 $ h6 Y$ M7 o5 ]( B4 N0 I
* S5 S4 B0 B2 U0 q3. sysinit & c# [; x: n( V T* z+ g. f: d& D2 L. R: H) r; V
系统启动时准备运行的命令。比如说,这个命令将清除/tmp。 / g4 [) W" y# ?4 G/ I* ~9 |' R0 _% B: o2 t' {+ Y) c& \8 R8 u9 \5 z
上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。 5 N! V. O- ~! A4 ?$ Q3 a1 A
, ~1 U/ \# c. i8 a 五、在单用户模式下引导 + K" Z+ x8 L% |6 x Y2 T' x1 V) n8 p( ^1 e; B
一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。 5 e0 g' Z7 }! y: ~2 [& B6 {0 ~# T9 K! `: Q/ n3 h h$ t
一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。 0 B( N, ?* i5 n3 D/ x7 l
- O1 ]7 M, ~" v) z9 A5 ?/ o4 i3 [+ N' u
有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。 4 p$ R% [0 C9 c# n
. X8 e6 L( L' G3 y5 | 如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。 ; Z( a# Z) v/ Z y
; i: z9 ]9 R1 X 由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。 + l8 P0 i& J7 g9 f
3 [' c: l {+ d+ F) ~ 不同的运行级有不同的用处,也应该根据自己的不同情形来设置。 " y6 H3 r+ r3 |+ w1 o" l * N1 d; }* Y! l0 T; i 例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入: ' P$ D7 s8 a' N+ I' k, |9 v0 K V& l& {0 n" ]) F M6 K/ j
init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。