- 在线时间
- 63 小时
- 最后登录
- 2019-5-3
- 注册时间
- 2004-5-10
- 听众数
- 442
- 收听数
- 0
- 能力
- -250 分
- 体力
- 10122 点
- 威望
- -12 点
- 阅读权限
- 150
- 积分
- -586
- 相册
- 6
- 日志
- 10
- 记录
- 10
- 帖子
- 2003
- 主题
- 1253
- 精华
- 36
- 分享
- 8
- 好友
- 1292

复兴中华数学头子
TA的每日心情 | 开心 2011-9-26 17:31 |
---|
签到天数: 3 天 [LV.2]偶尔看看I
- 自我介绍
- 数学中国网站(www.madio.cn)是目前中国最大的数学建模交流社区
 群组: 越狱吧 群组: 湖南工业大学数学建模同盟会 群组: 四川农业大学数学建模协会 群组: 重庆交通大学数学建模协会 群组: 中国矿业大学数学建模协会 |
一、什么是INIT:
1 X% o* c7 E, g) P3 }7 b" S5 }& L7 D7 `6 c- Z4 k
init是Linux系统操作中不可缺少的程序之一。
; j0 y' G) z: ?( Y8 |; Z j7 H7 \& S' w3 ^
所谓的init进程,它是一个由内核启动的用户级进程。 2 q2 _# ^0 \! G: E% ~
7 t! Q* H" x$ ]9 b/ e4 M
内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。 0 q) Z1 X# E" L7 v; t/ u
; t! Y4 J" ~7 x
内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。 ; s# f5 i. X/ v0 K: L8 |
, Z. x8 W5 J f* O5 g# {
二、运行级别 . z/ X6 H% k; _" K( S
6 k- X' ^0 u4 w2 V" S9 J8 U 那么,到底什么是运行级呢? ' l( ^# x" \3 @) P& o) H9 t
3 E2 ~- y, ]0 @1 L
简单的说,运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。 # B; G. _/ v2 z9 O* }0 U+ |
# K( @) M4 u; y5 b; s! a
不同的运行级定义如下:(可以参考Red Hat Linux 里面的/etc/inittab) 5 h8 `" w/ h4 B2 \0 U
, I! m' K/ j3 y( X( U/ E2 Z # 0 - 停机(千万不能把initdefault 设置为0 ) + Z# K& A8 `& C' z- s7 x# T
) G7 k) b3 c/ }; n; ]
# 1 - 单用户模式 . P: M# ], X" M$ s9 k3 F5 n
- A8 S) i' j1 W3 X. x0 `! H # 2 - 多用户,没有 NFS / p2 D: L/ j& p1 F, c
) R+ F# m/ n% C+ Z$ d, s0 e # 3 - 完全多用户模式(标准的运行级) 0 n4 F9 B( I# b. m- |3 Q
3 \$ f7 n. q) m
# 4 - 没有用到
5 [9 Z w; b( e3 Z. U- ~4 U0 x3 k1 F. Z6 w. P+ U0 I4 z; I
# 5 - X11 (xwindow)
1 \. H! g+ Z H7 o9 ^" u% m3 Z$ i9 w* M6 }- h
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
$ i: Z/ j, g( S5 N8 ~& s1 v7 s6 }4 e/ `# \# p6 T
这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d 目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)
8 @3 q- k4 T. v9 k. S% R
$ B8 p2 i, b( o& X- N三、运行级别的配置
! Z( V/ U6 u, U# q2 h; z8 J' c9 q6 U, a% g& P
运行级别的配置是在/etc/inittab行内进行的,如下所示: {# R+ F @5 k9 T1 e% F# f
2 |" T* n+ X8 D+ i% w 12 : 2 : wait : / etc / init.d / rc 2 " W \# H8 P2 Y7 X' Q
) ]3 H3 o# I6 T8 a3 c
第一个字段是一个任意指定的标签;
8 \ \/ |8 {7 e* I( w' R5 k" U) e K _7 W6 |
第二个字段表示这一行适用于运行那个级别(这里是2);
( o/ a% v- x0 g d* A3 q& G% h5 D$ H" O1 x: o
第三个字 段表示进入运行级别时,init应该运行第四个字段内的命令一次,而且init应该等待该命令结束。/etc/init.d/rc命令运行启动和终止输入以便进入运行级别2时所需的任何命令。 % k1 w( b* o( N8 v$ T
" |1 l! k, _0 l5 W# r E4 j 第四个字段中的命令执行设置运行级别时的一切“杂活”。它启动已经没有运行的服务,终止不应该再在新运行级别内运行的服务。根据Linux版本的不同,采用的具体命令也不同,而且运行级别的配置也是有差别的。
9 q. @ J, H8 o1 W k5 x, O4 |! |' N0 l5 H: K
init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
5 n* |6 l. d) d H* m+ d- l) @& b& @+ t- Y+ e; P8 f
id : 2 : initdefault :
: e h5 P# H1 E, ~( B0 P* c. ]6 c, q# {
你可以要求init在启动时,进入非默认运行级别,这是通过为内核指定一个“single”或“emergency” 命令行参数来实现的。比如说,内核命令行参数的指定可通过LILO来执行。这样一来,你就可以选择单用户模式了(即运行级别1)。 4 k2 g# i+ w$ x( w% u: u
" o. n u/ ] f 系统正在运行时,telinit命令可更改运行级别。运行级别发生变化时, init 就会从/etc/inittab运行相应的命令。 , R8 ~" ^# X) ^5 q; K# ^
* |- F" n* [* r- z3 f+ S' P
四、/etc/inittab中的特殊配置
' L$ b. l7 _# R# G7 r4 v$ H# d& W3 N1 ^( k$ B8 A7 B
/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
' S. w1 V% \4 Q# J z# p' R' J7 f) R2 b4 H; b: c/ {
1. powerwait
- Z" T5 @- I0 X5 e% \4 V6 S6 g( O' n3 u
允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。 ' O2 A% b. @4 ]
- _% Q% m% ?+ W. D
2. ctrlaltdel
( s3 N! Y! g' v: L- r" `; \3 {- [2 N+ D
允许init在用户于控制台键盘上按下C t r l + A l t + D e l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将C t r l + A l t + D e l组合键配置为别的行为,比如忽略等。
% d" |: c7 A. |8 ^ n
: N/ U% v6 L4 W& k5 U" w3. sysinit
2 o F S# H5 a( [/ D& L( [' ]2 c& z8 }8 c! M
系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
5 w6 t- N; X2 u) ]
, C, i8 }% J7 C4 Y0 x5 z: @3 t1 j' z 上面列出的特殊关键字尚不完整。其他的关键字及其使用详情,可参考你的inittab手册页。
* ]6 B) n% R% L: M+ E* @
+ j2 Y% k; k3 J4 l, A 五、在单用户模式下引导
8 H0 ?, [. O& c$ n7 c% h8 C0 Y/ F' w, P4 s, n# o/ t
一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。
2 b& ^: \8 }9 C9 m W: J x' x2 o/ D% F1 X8 ~
一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。
+ I. N# r. d8 f! v3 E* w8 a0 {
2 i/ n1 f! n2 ?/ c: n* | 有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。 ; o! z( @5 ] g2 p; A7 S$ w
/ o" l4 l0 s5 ~, J/ B 如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。
; `4 x& V8 M. U& Y9 `# [
, W8 P; E) d( f# g! f* ] 由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。 ; z7 J# A5 U( S& d
) X5 P7 H5 E9 l! @% |, s3 h Y
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。 5 i1 g6 ~; U7 N- U3 V7 H
( _8 k8 s5 R5 [* @8 A" o 例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
" `. x) w; I! K3 i! \1 D. L# I; [
init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。 |
zan
|