📄 00000002.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER> <BR> <BR> Linux 开机程序之研讨(2) <BR> CCCA 资工86 许景华 <BR> <BR> 在上次的介绍中 , 我们已经看完了 rc.S 及 rc.serial 这两个 shell script . <BR> 现在 , 我们将把剩下的 shell script 再作一个介绍 . <BR> 首先还是看看全部的流程 : <BR> <BR> <BR> init[1] <BR> rc.S begin <BR> rc.serial begin <BR> rc.serial end <BR> rc.S end <-- 上一次我们说明到这里 <BR> init[1] enter runlevel 5 <BR> rc.M begin <BR> rc.inet1 begin <BR> rc.inet1 end <BR> rc.inet2 begin <BR> rc.inet2 end <BR> rc.font begin <BR> rc.font end <BR> rc.local begin <BR> rc.local end <BR> rc.M end <BR> login <BR> <BR> <BR> 这次主要的部份可分为两项 : 因为 init 将会去读取 inittab , 所以 inittab <BR> 将被列为第一部份的重点 , 而第二部份就是 rc.M , rc.font , rc.local <BR> 这几个 shell script 的说明 . ( rc.inet1 , rc.inet2 这两个关於网路的 <BR> shell script 将在以後单独说明 ) <BR> 好了 , 我们先从 inittab 看起吧 ! 看看上面的流程 , 在第一行 : init[1] <BR> 也就是 init 这个 process 被启动之後 , 它会去读取 /etc/inittab 这个档案 <BR> 以完成系统的启动 . 从这里 , 我们看到了 LINUX 的确融合了 SVR4 及 SunOS <BR> 的一些特性 , inittab 这个档案 , 在 SunOS 系统中是不存在的 , 但是它却是 <BR> SVR4 典型的档案 . init 这个 process 会依据 /etc/inittab 中所记载的内容 <BR> 进入不同的 run-level 并启动不同的 process . 所以 inittab 的重要性 <BR> 可见一斑 . 那什麽叫 run-level 呢 ? 所谓 run-level 就是系统中定义了许多 <BR> 不同的 level , 而系统会随著 level 的不同而去启动不同的资源 . <BR> 现在就让我们来看一下 /etc/inittab 中的内容 : <BR> 在 /etc/inittab 这个档案中 , 每一列是一个进入点 , 假如我们仔细观察每一列 <BR> 的话 , 那我们就会很容易的发现 , /etc/inittab 的每一列可以被 " : " 这个 <BR> 字元分成好几个栏位 . 这几个栏位的格式如下 : <BR> <BR> id:runlevels:action:process <BR> <BR> 而它们代表的意义分别如下 : <BR> <BR> id : 由两个独特的字元所组成的辨示符号 , 在比较新的 UNIX 系统中 , 已不 <BR> 受只能有两个字元的限制 . <BR> <BR> runlevels : 指出下面一个栏位中的 action 以及 下下个栏位中的 process <BR> 会在那些 runlevel 中被执行 . 这一栏的合法值有 0,1,2...6 <BR> s 以及 S . 而在正常的启动程序之後 , Superuser 可以使用 <BR> telinit 这个指令来改变系统的 runlevel . 又因为在 LINUX 中 <BR> , runlevel 的预设值是 5 ( 等一下就会看到 ) 所以 , 只有 <BR> 那些每一列中 runlevel 那栏有 5 这个值的 , 後面的 process <BR> 才会被启动 . 所以 , 我们就可以想像的到 : " 由於系统的 <BR> runlevel 不同 , 所起动的 process 也不尽相同 , 所以系统 <BR> 起动的资源在每个不同的 runlevel 就会有差异存在 . <BR> <BR> action : 这个栏位有一点复杂 , 在这个栏位中记录著 init 在启动相对应的 <BR> process 时 , 对 process 所采取的动作 , 而合法的动作有下面几项: <BR> <BR> initdefault : 指出系统在启动时 , 预设进入的 run-level 值 , <BR> 比如说 , 我们可以在 /etc/inittab 中找到下面这 <BR> 一列 : id:5:initdefault: <BR> 很明显的 , 系统将在启动时 , 进入 runlevel 为 5 <BR> 的模式 . 当然 , 你可以把 5 改成 6 试试看 , 如 <BR> 果你改成了 6 , 那将会执行 /etc/rc.d/rc.6 , 也 <BR> 就是 run xdm . xdm 在以後有机会的话 , 将为各 <BR> 位介绍 ...... <BR> <BR> sysinit : 在系统起动时 , 这个 process 会被执行 . 而所有 process <BR> 前的 action 中有 boot 及 bootwait 的 process , 必 <BR> 须等到这些 action 为 sysinit 的 process 执行完之後 <BR> 它们才能够执行 . <BR> <BR> wait : 在起动一个 process 之後 , 若要再起动另一个 process , 则 <BR> 必需等到这个 process 结束之後才能继续 . <BR> <BR> respawn : 代表这个 process 即使在结束之後 , 也会重新被启动 , <BR> 最典型的例子就是 getty ( 在 LINUX 中为 agetty ) . <BR> 看看下面的循环 : <BR> <BR> -- getty --> login --> shell --> logout -- <BR> ^ | <BR> |------------------------------------------ <BR> <BR> 即使在 getty 结束之後 , 它也会重新被启动 . <BR> <BR> ctrlaltdel : 想必有人会以键盘上的 Ctrl , Alt , 及 Del 这三个 <BR> 键来达到使系统 shutdown 的目的 , 现在我们果然在 <BR> /etc/inittab 中看到了这一列 : <BR> <BR> ca::ctrlaltdel:/sbin/shutdown -t3 -rf now <BR> <BR> 所以说 , 当我们按下这三个键的时候 , init 会收到 <BR> SIGINT 这个 signal , 接著就执行 shutdown 的动作 <BR> 不过 , 我们最好不要养成按 Ctrl-Alt-Del 来使系统 <BR> shutdown 的习惯 , 尤其在单人多工的作业系统 , 像 <BR> OS/2 , 甚至 Windows 95 , shutdown 几乎都是标准 <BR> 的关机程序了 , 更何况是多人多工的 LINUX , 所以 , <BR> shutdown 这个指令是一定要熟悉的 . <BR> <BR> 除了上面的几个 action 之外 , 另外还有一些合法的 action , 但这 <BR> 些 action 并不需要太注意 , 要用的时候再利用 man init 去查询就 <BR> 可以了 . <BR> <BR> process : 这一栏中可以是 shell script 或是可执行的程式 . <BR> <BR> 好了 , 当我们了解 /etc/inittab 中每一栏的意义之後 , 要看懂 /etc/inittab <BR> 就是一件轻松愉快的工作了 . 在 /etc/inittab 档中 , 我们可以看到下面这一段 <BR> <BR> c1:12345:respawn:/sbin/agetty 38400 tty1 <BR> c2:12345:respawn:/sbin/agetty 38400 tty2 <BR> c3:45:respawn:/sbin/agetty 38400 tty3 <BR> c4:45:respawn:/sbin/agetty 38400 tty4 <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -