|
Linux 开机程序之研讨(3) login
上面的流程清楚的指出 , 在 rc.S 这个 shell script 中 , 会去执行 rc.serial 接著再执行 rc.M , rc.M 中又包含了 rc.inet1 , rc.inet2 , rc.font , rc.local 最後执行 login . 在下面的内容中 , 将为各位介绍这几个 shell script 从下面开始 , 凡是每一列之前有一个 # 的 , 为原来 shell script 中的注解 有两个 # 的 , 为笔者加上的注解 , 当然啦 , 没有任何 # 的为 shell script 的内容 , 而对命令或内容的解释 , 一律都写在命令或内容的前面 . 首先由 rc.S 开始 :
***************************** rc.S **********************************
#!/bin/sh # # /etc/rc # # These commands are executed at boot time by init(8). # User customization should go in /etc/rc.local.
echo '======== rc.S is running ! System Initializing Now !!! ========' PATH=/sbin:/usr/sbin:/bin:/usr/bin
## 打开所有 swap ! 下面 /sbin/swapon -a 的意思是 : 使得 /etc/fstab 中被记录 ## 成 swap 的 device 全部启动 .
/sbin/swapon -a
## 喔 ! 下面这个指令 update 就很重要了 , 它负责每隔一段固定的时间 , 就将 ## buffer 中的资料 , 利用 sync 写回磁碟机上 , 并将 superblock 做 update ## 的动作 . 使用 ps 这个指令看看有那些 process , 就可看到 update 还有一个 ## bdflush , 这两个 process 都是必然要存在的 , 可不要随便砍掉 , 要不然 , ## 万一系统 crash 了 , 那磁碟机里面的资料就不是最新的了 ......
/sbin/update &
## 利用 echo -n >> 制造一个档案 , 并用 rm -f 这个档案来测试 root partition ## 是不是 read-only 或者是可读写
READWRITE=no if echo -n >> "Testing filesystem status"; then rm -f "Testing filesystem status" READWRITE=yes fi
## 假如 root partition 是 read-only 就作 fsck 的动作 , 假如不是 read-only ## 而是 read-write 的话 , 就做下面 else 之後的动作
if [ ! $READWRITE = yes ]; then ## 利用 fsck 做检查及修复档案系统的工作 , 後面接的两个参数 -A , -a . ## -A 的意思是 : fsck 会依据 /etc/fstab 中的记录 , 去检查所有的档案 ## 系统 ; 而 -a 就是 auto 的意思 , 当 fsck 有修复的动作时 , 它不会问 ## 你问题 , 而直接修复 .
/sbin/fsck -A -a
## 假如 fsck 有 error , [ $? -gt 1 ] 括号里面的意思是 : 若上个命令的 ## 传回值大於 1 , 而上个命令就是 fsck . 让我们看看 fsck 的传回值 : ## 0 - No errors
|