⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0510osloader.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<span class=term_say>1. 设定项目∶
   最多四个字元,代表 init 的主要工作项目,只是一个简单的代表说明。
2. run level∶
   该项目在哪些 run level 底下进行的意思。如果是 35 则代表 runlevel 3 与 
   5 都会执行。
3. init 的动作项目∶
   主要可以进行的动作项目意义有∶
   initdefault	∶代表预设的 run level 设定值;
   sysinit	∶代表系统初始化的动作项目;
   ctrlaltdel	∶代表 [ctrl]+[alt]+[del] 三个按键是否可以重新开机的设定;
   wait		∶代表后面接的指令项目必须要执行完毕才能继续后面的动作;
   respawn	∶代表后面接的, init 仍会主动的『重新』启动。
   更多的设定项目请参考 man inittab 的说明。
4. 指令项目∶
   亦即应该可以进行的指令,通常是一些 script 棉。</span>
</pre></td></tr></table>

		所以我们可以得到这样的结论∶<ul>
		<li>如果不想让使用者利用 [crtl]+[alt]+[del] 来重新启动系统,可以将底下这一行注解掉∶<br>
			ca::ctrlaltdel:/sbin/shutdown -t3 -r now</li><br>
		<li>规定开机的预设 run level 是纯文字 (3) 或者是具有图形介面 (X Window, 5) ,可经由
			『 <span class=text_import2>id:3:initdefault:</span> 』那个数字来决定!
			以鸟哥自己这个档案为例,我是使用纯文字喔!<br>
		</ul>

		所以说,你现在会自行修改登入时的预设 run level 设定值了吗?够简单的吧?
		一般来说,我们预设都是 3 或者是 5 来作为预设的 run level 的。但有时后可能需要进入 run level 1,
		也就是单人维护模式的环境当中。这个 run level 1 有点像是 Windows 系统当中的『安全模式』啦,
		专门用来处理当系统有问题时的操作环境。此外,当系统发现有问题时,举例来说,不正常关机造成
		filesystem 的不一致现象时,系统会主动的进入单人维护模式呢!<br><br>

		好了, init 在取得 run level 之后,接下来要干嘛?
		上面 /etc/inittab 档案内容不是有提到 sysinit 吗?嘿嘿!准备初始化系统了吧!<br><br>
	</div>

	<hr><a name="startup_sysinit"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>init 处理系统初始化流程 
	(/etc/rc.d/rc.sysinit)</span><br>
	<div class=block2>
		还记得上面提到 /etc/inittab 里头有这一句『 si::sysinit:/etc/rc.d/rc.sysinit 』吧?
		这表示∶『<span class=text_import2>我开始载入各项系统服务之前,得先做好整个系统环境,我主要利用
		/etc/rc.d/rc.sysinit 这个 shell script 来设定好我的系统环境的。</span>』够清楚了吧?
		所以,我想要知道到底 FC4 开机的过程当中帮我进行了什么动作,
		就得要仔细的分析 /etc/rc.d/rc.sysinit 棉。<br>
		<div style="padding: 10 0 10 0 ;" align="right"><table width="90%"><tr><td><b>Tips:</b><br /><span style="font-style: italic; color : darkgreen">			老实说,这个档案的档名在各不同的 distributions 当中都不相同,
			例如 SuSE server 9 就使用 /etc/init.d/boot 与 /etc/init.d/rc 来进行的。
			所以,你最好还是自行到该档案去察看一下系统的工作喔! ^_^
		</span></td><td><img src="../images/vbird_face.gif" /></td></tr></table></div>		/etc/rc.d/rc.sysinit 主要的工作大抵有这几项∶

		<ol>
		<li><span class=text_import2>取得网路环境与主机类型∶</span><br>
			首先读取网路设定档 /etc/sysconfig/network ,取得主机名称与预设通讯闸 (gateway) 等网路环境。
		<li><span class=text_import2>测试与挂载记忆体装置 /proc 及 USB 装置 /sys∶</span><br>
			除挂载记忆体装置 /proc 之外,还会主动侦测系统上是否具有 usb 的装置,
			若有则会主动载入 usb 的驱动程式,并且尝试挂载 usb 的档案系统。
		<li><span class=text_import2>决定是否启动 SELinux ∶</span><br>
			近期以来,很多 distributions 都加入了美国国家安全局发展的 Security Enhance Linux 套件,
			这个 SELinux 可以更加强化 Linux 操作环境的安全性,不过,由于安全挂帅,
			对于新手来说,不是很容易上手。因此,我们才会建议大家先不要启动啊。无论如何,
			在这个阶段我们可以分析 SELinux 是否要启动。
		<li><span class=text_import2>周边设备的侦测与 Plug and Play (PnP) 参数的测试∶</span><br>
			根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide / scsi /
			网路 / 音效 等周边设备的侦测,以及利用以载入的核心模组进行 PnP 装置的参数测试。
		<li><span class=text_import2>使用者自订模组的载入</span><br>
			使用者可以在 /etc/sysconfig/modules/*.modules 加入自订的模组,
			则此时会被载入到系统当中喔!
		<li><span class=text_import2>载入核心的相关设定∶</span><br>
			系统会主动去读取 /etc/sysctl.conf 这个档案的设定值,使核心功能成为我们想要的样子。
		<li><span class=text_import2>设定系统时间 (clock)∶</span><br>
		<li><span class=text_import2>设定终端机 (console) 字形∶</span><br>
		<li><span class=text_import2>设定 RAID 与 LVM 等硬碟功能∶</span><br>
		<li><span class=text_import2>以 fsck 检验磁碟档案系统∶</span><br>
		<li><span class=text_import2>进行磁碟配额 quota 的转换 (非必要)∶</span><br>
		<li><span class=text_import2>重新以可读取模式挂载系统磁碟∶</span><br>
		<li><span class=text_import2>启动 quota 功能∶</span><br>
		<li><span class=text_import2>启动系统乱数装置 (产生乱数功能)∶</span><br>
		<li><span class=text_import2>清除开机过程当中的暂存档案∶</span><br>
		<li><span class=text_import2>将开机相关资讯载入 /var/log/dmesg 档案中。</span><br>
		</ol>

		如此一来,在 /etc/rc.d/rc.sysinit 就已经将基本的系统设定资料都写好了,也将系统的资料设定完整!
		而如果你想要知道到底开机的过程中发生了什么事情呢?那么就使用 dmesg 就可以知道棉。
		另外,基本上,在这个档案当中所进行的很多工作的预设设定档,其实都在 /etc/sysconfig 当中呢!
		所以,请记得将 /etc/sysconfig 内的档案好好的瞧一瞧喔! ^_^<br><br>

		在这个过程当中,比较值得注意的是自订模组的载入!在 FC4 当中,如果我们想要载入核心模组的话,
		可以将整个模组写入到 /etc/sysconfig/modules/*.modules 当中,在该目录下,
		只要记得档名最后是以 .modules 结尾即可。
		这个过程是非必要的,因为我们目前的预设模组实在已经很够用了,除非是您的主机硬体实在太新了,
		非要自己载入新的模组不可,否则,在经过 /etc/rc.d/rc.sysinit 的处理后,
		你的主机系统应该是已经跑得很顺畅了啦!就等著你将系统相关的服务与网路服务启动棉!<br><br>
	</div>

	<hr><a name="startup_runlevel"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>启动系统服务与相关启动设定档 
	(/etc/rc.d/rc.n & /etc/sysconfig)</span><br>
	<div class=block2>
		载入核心让整个系统准备接受指令来工作,然后再经过 /etc/rc.d/rc.sysinit
		的系统模组与相关硬体资讯的初始化后,你的 FC4 系统应该已经顺利工作了。
		只是,我们还得要启动系统所需要的各项『服务』啊!这样主机才能提供我们相关的网路或者是主机功能嘛!
		这个时候,依据我们在 /etc/inittab 里面提到的 run level 设定值,就可以来决定启动的服务项目了。
		举例来说,使用 run level 3 当然就不需要启动 X Window 的相关服务棉,您说是吧?<br><br>

		那么各个不同的 run level 服务启动的各个 shell script 放在哪?还记得 /etc/inittab 里面提到的∶<br>

<table class="term"><tr><td class="term"><pre>
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
</pre></td></tr></table>

		上面提到的就是各不同 run level 放置的目录啦!举例来说, run level 3 的启动目录就是放在
		/etc/rc.d/rc3.d 目录当中棉~当然啦,不同的 distributions 这个目录可能会有差异,
		所以,您还是得要自行到 /etc/inittab 里面瞧一瞧先!那么在这个目录当中有什么咚咚啊?
		我们先以鸟哥自己的宿舍的 FC4 主机里头的 run level 3 的启动目录瞧一瞧∶<br>

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ls -l /etc/rc.d/rc3.d</span>
lrwxrwxrwx  1 root root 13 Jun 29 01:05 K01yum -> ../init.d/yum
lrwxrwxrwx  1 root root 19 Jun 29 01:05 K02haldaemon -> ../init.d/haldaemon
<span class=term_say>.....中间省略......</span>
lrwxrwxrwx  1 root root 17 Sep 16 14:09 S01sysstat -> ../init.d/sysstat
lrwxrwxrwx  1 root root 17 Jun 29 01:05 S10network -> ../init.d/network
lrwxrwxrwx  1 root root 16 Jun 29 01:05 S12syslog -> ../init.d/syslog
<span class=term_say>.....中间省略......</span>
lrwxrwxrwx  1 root root 11 Jun 25 08:27 S99local -> ../rc.local
</pre></td></tr></table>

		在这个目录下的档案很有趣,全部都是以 S 或者是 K 为开头的档案,而且全部都是连结档,
		连结到 /etc/rc.d/init.d 里面的 shell script 呢!而在 /etc/rc.d/init.d 这个目录其实与 /etc/init.d
		是一样的,因为这两个目录是连结档啊!要注意的是,在 /etc/rc.d/init.d/ 底下的 shell scripts
		都使用 case.....esac 的语法,而且支援的变数 ($1) 主要有 start 及 stop ,
		相关的 shell script 请您回到第三篇去复习。所以,一般来说,如果我们想要启动一些系统服务,例如启动 atd ,
		需要使用∶
		<ul><span class=text_import2>/etc/rc.d/init.d/atd start	(也可以用 /etc/init.d/atd start)</span></ul>
		如果是关闭该服务,就是使用∶<ul><span class=text_import2>/etc/rc.d/init.d/atd stop</span></ul>
		了解鸟哥想要表达的东西了吗?是的~如果我想要在 run level 3 的环境下执行某个服务,
		当然就得要将该服务写入 /etc/rc.d/rc3.d 里面去,而既然我们的服务已经在 /etc/rc.d/init.d 里面建立好了,
		自然可以使用连结的方式连结到 /etc/rc.d/init.d/ 内的相关的 shell script 啦。不过,为了解决
		start 或 stop 这个变数,因此就有了 S 与 K 开头的档名了。<br><br>

		另外,各不同的服务其实还是互有关系的,举例来说,如果要启动 WWW 服务,总是得要有网路吧?
		所以棉, /etc/rc.d/init.d/network 就会比较先被启动啦!那么您就会知道在 S 或者是 K 
		后面接的数字是啥意思了吧?嘿嘿,那就是执行的顺序啦!所以说∶<ul><span class=text_import2>
		<li>在 /etc/rc.d/rc3.d 内的,以 S 为开头的档案,为开机时,需要『启动, start』的服务;
		<li>在该目录内的 K 为开头的档案,为『关机时需要关闭的服务, stop』的档案连结;
		<li>在 S 与 K 后面接的数字,代表该档案被执行的顺序。</span></ul>

		举例来说,在上表当中, S10network 指向 ../init.d/network ,代表∶开机时,执行『 
		/etc/rc.d/init.d/network start 』的意思,而 S12syslog 则代表开机时执行『 
		/etc/rc.d/init.d/syslog start 』的意思,且 S10network 要比 S12syslog 还要早执行喔!
		所以棉,看到最后一个被执行的项目是啥?呵呵!没错,就是 S99local ,亦即是∶
		<span class=text_import2>/etc/rc.d/rc.local</span> 这个档案啦!<br><br>

		好了,那么问题来了,我要如何建立 /etc/rc.d/init.d 里面的档案呢?
		很简单啊,看一下 /etc/rc.d/init.d/atd 的内容就知道了,而更多的 services 
		启动与相关说明,我们会在后续的 <a href="0560daemons.php">认识系统服务</a> 详谈。
		而将 /etc/rc.d/init.d/ 连结到 /etc/rc.d/rc3.d 的方法,除了手动建立外,
		其实我们都是以 chkconfig 这个程式来进行管理的呢!更多的 chkconfig 请参考认识系统服务那一章。<br><br>
	</div>

	<hr><a name="startup_local"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>使用者自订开机启动程序 
	(/etc/rc.d/rc.local)</span><br>
	<div class=block2>
		在完成 run level 3 的服务启动后,如果我还有其他的动作想要完成时,举例来说,
		我还想要寄一封 mail 给某个系统管理帐号,通知他,系统刚刚重新开机完毕,那么,
		是否应该要制作一个 shell script 放置在 /etc/rc.d/init.d/ 里面,然后再以连结方式连结到
		/etc/rc.d/rc3.d/ 里面呢?呵呵!当然不需要!还记得上一小节提到的 /etc/rc.d/rc.local 吧?
		这个档案就可以执行您自己想要执行的系统指令了。像不像早期 DOS 年代的 autoexec.bat 与 config.sys 呢? ^_^<br><br>

		也就是说,我有任何想要在开机时就进行的工作时,直接将他写入 /etc/rc.d/rc.local ,
		那么该工作就会在开机的时候自动被载入喔!而不必等我们登入系统去启动呢!
		是否很方便啊!一般来说,鸟哥就很喜欢把自己制作的 shell script 完整档名写入
		/etc/rc.d/rc.local ,如此一来,开机就会将我的 shell script 执行过,真是好棒那!<br><br>
	</div>

	<hr><a name="startup_term"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class=text_h2>根据 /etc/inittab 
	之设定,载入终端机或 X-Window 介面。</span><br>
	<div class=block2>
		在完成了系统所有服务的启动后,接下来 Linux 就会启动终端机或者是 X Window 来等待使用者登入啦!
		实际参考的项目是 /etc/inittab 内的这一段∶<br>

<table class="term"><tr><td class="term"><pre>
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# Run xdm in runlevel 5
x:5:once:/etc/X11/prefdm -nodaemon
</pre></td></tr></table>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -