📄 00000001.htm
字号:
echo <BR> echo <BR> /bin/login <BR> fi <BR> <BR> ## ****************************** Normal 1 ************************** <BR> ## 当 fsck 检查没有错误之後 , 就把 root partition 重新 mount 上来 <BR> ## 下面指令的参数有三个 , -w 代表mount 成可读写 , -n 代表把一个 file- <BR> ## system mount 上来 , 但不会把记录写到 /etc/mtab 中 , 在上次对 /etc/mtab <BR> ## 介绍时有提到 , 当我们使用 mount 这个指令把一个 filesystem mount 上来 <BR> ## 的时候 , /etc/mtab 就会记录 ! 利用 -n 这个 option 可使得做 mount 的动 <BR> ## 作 , 却不会记录 . -o 後面可以接许多的选项 , 在这里 , 我们给它的选项是 <BR> ## remount . remount 的意思是 : 重新 mount 一个已经被 mount 的 filesystem <BR> ## 这个选项通常被用来改变该 filesystem 的读写旗号 ,尤其是把 filesystem <BR> ## 从 read-only 的状态 , 改变成 read-write 的状态 . <BR> <BR> echo "Remounting root device with read-write enabled." <BR> /sbin/mount -w -n -o remount / <BR> <BR> <BR>## 在前面的情况中 , 都是 root partition 为 read-only 的状态下 , 所做的一些 <BR>## 工作 , 到了最後一个指令 /sbin/mount -w -n -o remount / , 才把 root <BR>## partition mount 成 read-write . 各位有没有看到前面那行 : <BR>## if [ ! $READWRITE = yes ]; then ..... 下面这个 else 就是与这个 if 对应 <BR>## 也就是说 , 前面那个 if 的区块中 , 所作的工作都是在 root partition 为 <BR>## read-only 的条件成立下所作的事 , 那很明显的 , 下面这个 else 就是 root <BR>## partition 为 read-write 的条件下所作的工作 . 假如你的 root partition <BR>## 为 read-writeable 的话 , 那麽系统就会显示下面的讯息 . cat << EOF 所作的 <BR>## 事 , 就是把 EOF 之前的讯息全部显示在萤幕上 : <BR>## 我想 , 下面的讯息写得很明显了 , 它说 : 你的 root partition 被 mount 成 <BR>## read-write , 没有办法检查 , 要使检查的动作能够顺利的进行 , 你必须把 <BR>## root partition mount 成 read-only ! 那要怎麽做呢 ? 很容易 , 只要利用 <BR>## rdev -R /<your_kernel_name> 1 就可以了 ...... <BR> <BR>else <BR> cat << EOF <BR> <BR>*** Root partition has already been mounted read-write. Cannot check! <BR>For filesystem checking to work properly, your system must initially mount <BR>the root partition as read only. Please modify your kernel with 'rdev' so <BR>that <BR>it does this. If you're booting with LILO, type: <BR> rdev -R /vmlinuz 1 <BR> (^^^^^^^^ ... or whatever your kernel name is.) <BR> <BR>If you boot from a kernel on a floppy disk, put it in the drive and type: <BR> rdev -R /dev/fd0 1 <BR> <BR>This will fix the problem *AND* eliminate this annoying message. :^) <BR> <BR>EOF <BR> <BR> <BR>## 下面这个指令没什麽好说的 , 就是暂停 10 秒钟 , 让 user 能够有充足的 <BR>## 时间看完上面的讯息 <BR> <BR> sleep 10 <BR>fi <BR> <BR> <BR>## 删除 /etc/mtab /etc/nologin /etc/utmp <BR> <BR>/bin/rm -f /etc/mtab* /etc/nologin /etc/utmp <BR> <BR> <BR>## 制造 /etc/utmp , 这是一个很典型制造空档案的写法 . /dev/null 这个 node <BR>## 蛮有趣的 , 在某一方面来说 , 它有点像是一个 " 黑洞 " . 怎麽说呢 ? <BR>## 各位可以试试看下面的指令 ls >> /dev/null , 当你使用这个指令之後会 <BR>## 发生什麽事呢 ? 什麽也没发生 , 而且 ls 的输出就好像被丢到黑洞里 , 无 <BR>## 影无踪了 . 那也许你会想 : 那这有什麽用 ? 我的回答是 : 的确没有什麽 <BR>## 很大的用处 , 但当你想抑制输出的讯息时 , 你就会用得到了 . <BR> <BR>cat /dev/null >> /etc/utmp <BR> <BR> <BR>## 依据 fstab ( filesystem table ) 中的描述 , 自动的挂上档案系统 <BR>## 但此时因为 TCP/IP 还没有设定 , 故不用 NFS <BR> <BR>echo 'Mount Filesystem !!!' <BR>/sbin/mount -avt nonfs <BR> <BR> <BR>## 设定系统的时钟 . 下面这几行所做的事就是 : 看看 /sbin/clock 这个档案是 <BR>## 不是可执行的 , 假如可以执行 , 就把 CMOS 中的时间设定为系统的时间 . <BR> <BR>if [ -x /sbin/clock ]; then <BR>echo 'Set System Clock' <BR> /sbin/clock -s <BR>fi <BR> <BR> <BR>## 下面的四行若没有 mark , 则每次开机 issue 及 motd 都会被改变 , 这应该 <BR>## 可算是 FAQ 级的问题了 ...... 因为我有自己设计的 issue 及 motd , 所以 <BR>## 下面的四行前面都有 # , 被当成注解 . <BR>## 假如你要有自己的设定 , 下面一定都要 mark 起来 <BR> <BR>#echo > /etc/issue <BR>#echo Welcome to Linux /bin/uname -a | /bin/cut -d\ -f3. >> /etc/issue <BR>#echo >> /etc/issue <BR>#echo "/bin/uname -a | /bin/cut -d\ -f1,3. (Posix)." > /etc/motd <BR> <BR> <BR>## 接下来 , 将执行 rc.serial , 顾名思义 , rc.serial 是作串连埠设定的工作 <BR>## 在 rc.serial 中 , 内容虽然也是很简单 , 但并不像 rc.S 那样直接 . 换句话 <BR>## 说 , 读者至少要 " 稍微 " 懂一点 shell programming , 所以说呢 , 假如 <BR>## 还不会 shell programming 的读者呢 , 都应该赶快去找一本书来看一下 , 在 <BR>## 这篇文章的结尾 , 我会提出一些书单 , 各位可以去找找这几本书 ...... <BR> <BR>/bin/sh /etc/rc.d/rc.serial <BR>echo '================= rc.S is finish NOW !!! =========================' <BR> <BR> <BR> <BR>到了这里 , rc.S 的最後一步 , 是去执行 rc.serial . 大家可以看一看 <BR>/rc.d/rc.serial . 好像很长的样子 , 但实际上呢 , 各位必然发现到了 , 这个 <BR>shell script 大部份指令的前面都有一个 '#' 号 , 这代表著 , 这些指令完全 <BR>不会被执行 . 所以呢 , 真正有用的只不过寥寥十几行吧 ! 在另一方面来说 , <BR>假如你是用网路卡连上网路 , 那 rc.serial 对你并没有什麽大用处 . <BR> <BR> <BR>**************************** rc.serial ****************************** <BR> <BR>#!/bin/sh <BR># <BR># /etc/rc.serial <BR># Initializes the serial ports on your system <BR># <BR># Version 2.01 <BR> <BR>echo '======================= rc.serial is begin !!! =====================' <BR>cd /dev <BR> <BR>## 下面三行中的前两行是设定一些变数 , 由於在这个 shell script 中 , 须要 <BR>## 用到 /bin/setserial -b 这个指令 , 或是须要用到所有以 cua 开头的 node <BR>## 的次数太多了 , 因此 , 把它们设定为一个变数 , 是一个不错的方法 . 尤其 <BR>## PORTS=`echo cua? cua??` 这是一个聪明的写法 , 那为什麽不写成 PORT= <BR>## `echo cua*` 呢 ? 各位可以在 /dev 下分别使用这两个指令 , 观察输出到底 <BR>## 有什麽不同 ...... <BR> <BR>SETSERIAL="/bin/setserial -b" <BR>PORTS=`echo cua? cua??` <BR>echo -n "Configuring serial ports...." <BR> <BR> <BR>## 下面这行 , 没有学过 shell programming 的人很可能会看不懂 , 不过没有 <BR>## 关系 , 这行中的 ${SETSERIAL} 会被换成 /bin/setserial -b , 而 ${PORTS} <BR>## 会被换成 cua0 cua1 cua2 ....... cua31 , 所以整句翻译就是 : <BR>## /bin/setserial -b -W cua0 cua1 cua2 cua3 cua4 cua5 cua6 ...... cua31 <BR>## 那这行指令到底在做什麽呢 ? 其实只是在做中断侦测的工作 . <BR> <BR>${SETSERIAL} -W ${PORTS} <BR> <BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -