📄 common-start-flow.html
字号:
<p>即使在 getty 结束之后 , 它也会重新被启动 .
<p>ctrlaltdel : 想必有人会以键盘上的 Ctrl , Alt , 及 Del 这三个
<br>键来达到使系统 shutdown 的目的 , 现在我们果然在
<br>/etc/inittab 中看到了这一列 :
<p>ca::ctrlaltdel:/sbin/shutdown -t3 -rf now
<p>所以说 , 当我们按下这三个键的时候 , init 会收到
<br>SIGINT 这个 signal , 接着就执行 shutdown 的动作
<br>不过 , 我们最好不要养成按 Ctrl-Alt-Del 来使系统
<br>shutdown 的习惯 , 尤其在单用户多任务的操作系统 , 像
<br>OS/2 , 甚至 Windows 95 , shutdown 几乎都是标准
<br>的关机程序了 , 更何况是多用户多任务的 LINUX , 所以 ,
<br>shutdown 这个指令是一定要熟悉的 .
<p>除了上面的几个 action 之外 , 另外还有一些合法的 action , 但这
<br>些 action 并不需要太注意 , 要用的时候再利用 man init 去查询就
<br>可以了 .
<p>process : 这一栏中可以是 shell script 或是可执行的程序 .
<p>好了 , 当我们了解 /etc/inittab 中每一栏的意义之后 , 要看懂 /etc/inittab
<br>就是一件轻松愉快的工作了 . 在 /etc/inittab 档中 , 我们可以看到下面这一段
<p>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>c5:45:respawn:/sbin/agetty 38400 tty5
<br>c6:456:respawn:/sbin/agetty 38400 tty6
<p>简单来说 , 系统在起动之后会制造出六个虚拟的 console . 我想大家应该有试过
<br>用 Ctrl-Alt + F1 - F6 可在这六个 console 之间切换 ; 若你使用 XWindows
时
<br>想暂时回到 console 下时 , 可用 Ctrl-Alt + F1 - F6 这三个键来选择 ,
若想
<br>回到 XWindows 下时 , 只要以 Ctrl-Alt-F7 就可以回到 XWindows 下了 .
基本
<br>上 , 对於 memory 比较少的人 , 可以不要开那么多的虚拟 console , 那么就可
<br>以去掉上面的几列 . 还有 , 在前面我们也提过 , 可以把预设的 runlevel
从 5
<br>改成 6 , 对於 beginner 来说 , 系统一启动完就直接进入 XWindows 也许是一个
<br>不错的设定方法 ......
<p>介绍完 /etc/inittab 之后 , 我们接着看 rc.M ! 由前面的流程当中 , 我们看到
<br>rc.M 中又包含了四个 shell script , 其中 rc.inet1 及 rc.inet2 是有关于网络
<br>的设定 ; rc.font 是作字体的设定 , 而 rc.local 中可以放一些想要起动的
<br>daemon .
<p>我们现在就来看看 rc.M , 依照往例 , 前面有两个 "#" 的为加上去的注释 .
<br>只有一个 "#" 的为原来的注释 :
<p>#!/bin/sh
<br>#
<br># rc.M This file is executed by init(8) when the system is being
<br># initialized for one of the "multi user" run levels (i.e.
<br># levels 1 through 6). It usually does mounting of file
<br># systems et al.
<br>#
<br># Version: @(#)/etc/rc.d/rc.M 2.02 02/26/93
<br>#
<br># Author: Fred N. van Kempen,
<br># Heavily modified by Patrick Volkerding
<br>#
<p>## 显示进入多用户模式
<p>echo "Going multiuser..."
<br>
<p>## 下面一列的意思是 : 假如你在文字模式的 console 下 , 在15分钟内都没有动作
<br>## 的话 , 屏幕就会自动暗下来 , 简单的说 , 就是 screen saver 的功能
.
<p>/bin/setterm -blank 15
<br>
<p>## 执行 crond 这个 daemon . 不用说 , crond 在系统中扮演了很重要的角色
,
<br>## 它负责每过一段时间后 , 就去看看 /var/spool/cron/crontabs 中有那些
file
<br>## 要运行 , 这些 file 往往有一个固定的时间 , 比如说 : 每个月的 1 号
, 每
<br>## 天凌晨等 ...... 我们可以用平常的编辑器编好一个文件 , 里面的格式如下
:
<br>##
<br>## 分 时 日 月 星期 命令
<br>##
<br>## 举例来说 , 59 23 31 12 * /etc/wall happy_new_year
<br>## 在每年的 12 月 31 号晚上 11 点 59 分 会对每个系统上的 user 送出
<br>## happy_new_year 中的内容
<br>##
<br>## 接着我们可以利用 crontab <文件名> 这个指令来把此文件放到
<br>## /var/spool/cron/crontabs中. 我们可以看看 /var/spool/cron/crontab
下
<br>## 有一个 root 的文件 , 看看里面的内容 :
<br>##
<br>## 0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
<br>##
<br>## 所以各位看到了 , 在前两期提到的 at 命令是五分钟才被 run 一次的
<br>##
<br>## 再举一个简单的例子好了 : 我们先用一般的文本编辑器造出一个名为 crontest
<br>## 的档案 , 内容如下 :
<br>##
<br>## 5 * * * * ls -la ~/ >> ~/hehehaha
<br>##
<br>## 接着 , 我们键入下面的命令 : crontab crontest
<br>## 此时 , 从内容得知 , 每五分钟 crond 就会执行 ls -la , 把你 home directory
<br>## 的内容加入 hehehaha 这个文件中 .
<br>##
<br>## 当然啦 ! 这个例子简直是毫无意义可言 :) 但是 , 大家既然知道了基本原理
,
<br>## 利用 crontab , at 这些指令 , 就可以简化一些系统管理的动作 , 同时在执行
<br>## 一些工作时 , 也会比较有弹性 .
<p>/usr/sbin/crond -l10 >>/var/adm/cron 2>&1
<br>
<p>## 假如 /etc/HOSTNAME 不能读取的话 , 就把 darkstar.frop.org 当成 HOSTNAME
<br>## 中的内容 . 老实说 , 下面这三列去掉也不打紧 ......
<p>if [ ! -r /etc/HOSTNAME ]; then
<br>echo "darkstar.frop.org" > /etc/HOSTNAME
<br>fi
<br>
<p>## 下面从 if 到 fi 夹起来的部份 , 主要就是在执行 rc.inet1 , rc.inet2
. 这
<br>## 些都是网络设定的工作 , 尤其是 rc.inet2 , 启动了一大堆 daemon , 这部份
<br>## 要牵扯到的东西太多了 . 像 subnet 与 netmask 等 ...... 类似这种观念
,
<br>## 都不是三言两语就可以玩完的 , 所以就留待以后再说 .
<p>if [ -x /etc/rc.d/rc.inet1 ];
<br>then
<br>/bin/hostname `cat /etc/HOSTNAME | cut -f1 -d .`
<br>/bin/sh /etc/rc.d/rc.inet1
<br>/bin/sh /etc/rc.d/rc.inet2
<br>else
<br>/sbin/hostname_notcp `cat /etc/HOSTNAME | cut -f1 -d .`
<br>/usr/sbin/syslogd
<br>/usr/sbin/klogd
<br>/usr/sbin/lpd
<br>fi
<br>
<p>## 在某些资源独占的情况下 , 一些应用程序往往会制造出 lock 文件 . 假如这些
<br>## lock 文件在重新开机以后还是存在的话 , 那就很不好了 . 所以 , 下面就是在
<br>## 作这些删除 lock 文件的动作 , 并把一些输出的信息丢到 /dev/null 去
.
<br>## 在上一期的内容中 , 我们就有提到 /dev/null 了 , 也有提到抑制信息输出的
<br>## 方法 . 现在我们果然看到了一个实例 ......
<p>/bin/rm -f /var/spool/locks/* /var/spool/uucp/LCK..* /tmp/.X*lock 1>
/dev/null 2> /dev/null
<br>
<p>## 假如你有玩 hunt 这个 game 的话 , 那在 /tmp 下会有一个 socket 类型的文件
<br>## 我们要把它删除之后才能开始另一个 game ......
<p>if [ -r /tmp/hunt -o -r /tmp/hunt.stats ]; then
<br>echo "Removing your stale hunt sockets from /tmp..."
<br>/bin/rm -f /tmp/hunt*
<br>fi
<br>
<p>## 设定 share library 的 link 及 cache . 这个指令只有 Superuser 才能使用
<br>## 的 , 它也相当的重要 . 万一你的 /etc/ld.so.cache 很不幸的 corrupt
了 ,
<br>## 那我们也可以利用这个指令来让它重新 link , 先删除 /etc/ld.so.cache
,
<br>## 再以 ldconfig -v 重新制造就可以了 .
<p>/sbin/ldconfig
<br>
<p>## 起动 sendmail daemon , 并且让它 15 分钟就去看一看 spool , 处理收发信件
<p>if [ -x /usr/sbin/sendmail ]; then
<br>echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q 15m)..."
<br>/usr/sbin/sendmail -bd -q 15m
<br>fi
<br>
<p>## 假如 /etc/rc.d/rc.font 是可读的话 , 就执行 rc.font 这个 shell script
,
<br>## 而这个 shell script 主要是设定 text mode 下屏幕的字体
<p>if [ -r /etc/rc.d/rc.font ]; then
<br>/etc/rc.d/rc.font
<br>fi
<br>
<p>## 在系统管理中 , 我们常常把一些 local 的东西另外放在一个地方 , 这样才不
<br>## 会与原来的东西混淆 . 同时 , 因为 local 的东西更新版本的速度总是也比较
<br>## 快 , 在这种情况下 , 常常会变动的东西也可以放在 local 的区域中 ,
这样
<br>## 管理起来比较方便 . 也许各位也注意到了 : 为什么会有 /usr/bin 及
<br>## /usr/local/bin 之分 . 就个人认为 , 像自己 compile 出来的东西 , 假如
<br>## 觉得还不错 , 就可以把它放在 /usr/local/bin , 因为它是新增的 , 所以我
<br>## 把它放在 /usr/local/bin . 当然啦 , 这只是个人喜好罢了 , 你要放那里
<br>## 都是可以的 , 只要找得到 , 易于使用及管理就好 .
<br>## 同样的 , 若我们要起动一些新增的 daemon 或 shell script , 那放在
<br>## 是不错的选择 .
<br>## 下面一列就是去执行 rc.local 中的设定 , 通常是一些 daemon 或是 shell
<br>## script
<p>/etc/rc.d/rc.local
<br>
<p># All done.
<br>
<p>到这里 , rc.M 已经结束了 , 我们来看看从 rc.M 之中执行的 rc.font 及
<p>rc.local ......
<p>下面是 rc.font 的内容 :
<p>#!/bin/sh
<br>#
<br># This selects your default screen font from among the ones in
<br># /usr/lib/kbd/consolefonts.
<br>#
<p>## 我想下面这一列的命令非常明显了 , 就是设定 console 中的字体 , 你可以
<br>## 改成自己喜欢的字体 . 或者你也可以利用 fontconfig 这个指令来改变
.
<p>setfont /usr/lib/kbd/consolefonts/default8x16
<br>
<br>
<p>看完了 rc.font 后 , 我们来看看 rc.local 的内容 . 我所要说的是 : rc.local
<p>毕竟是自己设定的区域 , 所以每个人的可能都不一样 , 就我而言 , 因为我多
run
<p>了一些 daemon , 所以与大家的可能不太相同 . 所以 , rc.local 作参考就可以了.
<p>下面是我的 rc.local :
<p>#! /bin/sh
<br># Put any local setup commands in here
<br># Running selection
<br>
<p>## lpd 是控制打印机的 daemon , 要想在 LINUX 下用打印机 , 这个 daemon
必需
<br>## 要被起动 , 此外还要修改 /etc/printcap . 详细的情况要去看 PRINT-HOWTO
<p>echo -n "lpd"
<br>/etc/lpd
<br>
<p>## httpd 就是 WWW server 的 daemon . 想必大家都用过 Mosaic , Netscape
等
<br>## 的浏览器 . 但假如我们想建立自己的 WWW server , httpd 必须要执行
.
<p>echo -n " httpd"
<br>/usr/local/etc/httpd/src/httpd
<br>
<p>## 在 WWW 的时代还没来临以前 , gopher 可说是具有最方便的信息索引功能
, 即使
<br>## 到了现在 , gopher 仍然占有一席之地 , 在这里 , 因为我有建立自己的
gopher
<br>## server , 所以 gopherd 必需被起动 .
<p>echo -n " gopherd"
<br>/usr/local/sbin/gopherd -u nobody
<br>
<p>## 下面这个指令是 mouse 在 console 下做 cut & paste
<p>echo -n "Running selection..."
<br>selection -t ms &
<br>echo ' '
<br>
<p>-------
<br>这是一篇很老的文章了,针对很老的Slackware讲的,但是有些东西还有参考价值。
<br>我未经允许就把有些名词改过来了,估计也无法联系到作者。其实我希望有自己人
<br>动手来写个更好的文档来介绍,但现在我确实没时间了!该不会每个人都是这样的说?
<br>^_^
<br>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -