专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »Linux » linux开机启动:Linux操作系统开机自行启动项目详细解析 »正文

linux开机启动:Linux操作系统开机自行启动项目详细解析

来源: 发布时间:星期三, 2008年12月17日 浏览:2次 评论:0
    从Linux操作系统引导加载(对个人电脑而言通常是LILO)开始介绍Linux开机引导步骤 
  由于操作系统正在变得越来越复杂所以开机引导和关机下电过程也越来越智能化从简单DOS系统转移到 Windows NT系统人们已经亲身感受到了这些变化——这已不仅仅是核心操作系统启动引导和关闭了还包括必须要同时启动或者关闭相当数量服务项目类似于 Windows NTLinux系统启动过程需要打开服务项目也是数量极大

  这里我们假设大家已经熟悉其它操作系统引导过程了解硬件自检引导步骤就只从Linux操作系统引导加载(对个人电脑而言通常是LILO)开始介绍Linux开机引导步骤

  加载内核

  LILO启动的后如果你选择了Linux作为准备引导操作系统个被加载东西就是内核请记住此时计算机内存中还不存在任何操作系统 PC(它们天然设计缺陷)也还没有办法存取机器上全部内存因此内核就必须完整地加载到可用RAM个兆字节的内为了实现这个目内核是被压缩了这个文件头部包含着必要代码先设置CPU进入安全模式(以此解除内存限制)再对内核剩余部分进行解压缩

  执行内核

  内核在内存中解压缩的后就可以开始运行了此时内核只知道它本身内建各种功能也就是说被编译为模块内核部分还不能使用最基本内核必须有足够代码设置自己虚拟内存子系统和根文件系统(通常就是ext2文件系统)旦内核启动运行对硬件检测就会决定需要对哪些设备驱动进行从这里开始内核就能够挂装根文件系统(这个过程类似于Windows识别并存取C盘过程)内核挂装了根文件系统的后将启动并运行个叫做 init

  注意:在这里我们故意略去了Linux内核启动许多细节这些细节只有内核开发人员才感兴趣如果你好奇可以访问http://www.redhat.com:8080地址处 “Kernel Hackers Guide”

  init进程

  init进程是非内核进程中第个被启动运行因此它进程编号PID值总是1init读它配置文件/etc/inittab决定需要启动运行级别(Runlevel)从根本上说运行级别规定了整个系统行为每个级别(分别由0到6整数表示)满足特定如果定义了 initdefault级别这个值就直接被选中否则需要由用户输入个代表运行级别数值

  输入代表运行级别数字的后init根据/etc/inittab文件中定义执行个命令脚本缺省运行级别取决于安装阶段对登录选择:是使用基于文本还是使用基于X-Window登录

  rc命令脚本

  我们已经知道当运行级别发生改变时将由/etc/inittab文件定义需要运行哪个命令脚本这些命令脚本负责启动或者停止该运行级别特定各种服务由于需要管理服务数量很多因此需要使用rc命令脚本其中最主要个是/etc/rc.d/rc它负责为每个运行级别按照正确顺序相应命令脚本我们可以想象这样个命令脚本很容易变得难以控制!为了防止这类事件发生需要使用精心设计方案

  对每个运行级别来说在/etc/rc.d子目录中都有个对应下级目录这些运行级别下级子目录命名思路方法是rcX.d其中X就是代表运行级别数字比如说运行级别3全部命令脚本都保存在/etc/rc.d/rc3.d子目录中

  在各个运行级别子目录中都建立有到/etc/rc.d/init.d子目录中命令脚本符号链接但是这些符号链接并不使用命令脚本在 /etc/rc.d/init.d子目录中原来名字如果命令脚本是用来启动个服务其符号链接名字就以字母S打头;如果命令脚本是用来关闭个服务其符号链接名字就以字母K打头

  许多情况下这些命令脚本执行顺序都很重要如果没有先配置网络接口就没有办法使用DNS服务解析主机名!为了安排它们执行顺序在字母S 或者K后面紧跟着个两位数字数值小在数值大前面执行比如:/etc/rc.d/rc3.d/S50inet就会在 /etc/rc.d/rc3.d/S55named的前执行(S50inet配置网络设置S55named启动DNS服务器)

  存放在/etc/rc.d/init.d子目录中、被符号链接上命令脚本是真正实干家是它们完成了启动或者停止各种服务操作过程当 /etc/rc.d/rc运行通过每个特定运行级别子目录时候它会根据数字顺序依次各个命令脚本执行它先运行以字母K打头命令脚本然后再运行以字母S打头命令脚本对以字母K打头命令脚本来说会传递Stop参数;类似地对以字母S打头命令脚本来说会传递 Start参数

  编写自己rc命令脚本

  在维护Linux系统运转日子里肯定会遇到需要系统管理员对开机或者关机命令脚本进行修改情况有两种思路方法可以用来实现修改:

  ● 如果所做修改只在引导开机时候起作用并且改动不大可以考虑简单地编辑下/etc/rc.d/rc.local脚本这个命令脚本是在引导过程最后步被执行

  ● 如果所做修改比较细致或者还要求关闭进程使的明确地停止运行则需要在/etc/rc.d/init.d子目录中添加个命令脚本这个命令脚本必须可以接受Start和Stop参数并完成相应操作

  第种思路方法编辑/etc/rc.d/rc.local脚本当然是两种思路方法中比较简单如果想在这个命令脚本中添加内容只需要使用喜欢编辑器打开它再把打算执行命令附加到文件末尾就可以了这对两行修改来说确很便利

  如果确实需要使用个命令脚本这时必须选择第 2个思路方法编写个rc命令脚本过程并不像想象中那么困难我们下面就给出个例子看看它是怎样实现(顺便说你可以把我们例子当作范本按照自己需要进行修改和添加)

  假设你打算每隔60分钟个特殊来弹出条消息提醒自己需要从键盘前面离开休息会儿命令脚本将包括下面几个部分:

  ● 有关这个命令脚本功能介绍说明(这样就不会在年的后忘记它);

  ● 在试图运行它的前验证这个命令脚本确实存在;

  ● 接受start和stop参数并执行要求动作

  参数给定后我们就可以编写命令脚本这个很简单大家可以自己编写我在这里就不给出了

  编写好新命令脚本的后再从相关运行级别子目录中加上必要符号链接来控制这个命令脚本启动或者停止在我印象中只想让它在运行级别3或者运行级别5中启动原因是我认为只有这两个运行级别才是日常工作地方最后希望这个命令脚本在进入运行级别6(重启动)时候被关闭

  激活或者禁止服务项目

  有时候会发现在引导时候并不需要某个特定服务被启动如果你正在考虑使用Linux替换Windows NT文件和打印服务器就更是如此

  我们已经知道在特定运行级别子目录中给符号链接改个名称就可以让该服务不被启动如把其名称个字母由S改为K旦熟练掌握了命令行和符号链接就会发现这是激活或者禁止服务最快办法

  在学习这个改名思路方法时候可能会觉得图形化操作界面ksysv比较容易掌握虽然它原来是设计使用在KDE环境里但在 Red Hat Linux 7.2下缺省安装GNOME环境里也运行得很好如果想启动它只需简单地打开个xterm窗口并输入ksysv命令就可以了屏幕上会出现个窗口其中列出了能够修改全部参数需要时还包括在线帮助

  警告:如果是在个现实中系统上学习本文知识要多多运用常识当试着对启动脚本进行修改时候要记住所做修改可能会造成你系统不能正常工作而且无法采用重启动思路方法恢复不要在正常运转系统上实验新设置对你准备修改文件要全部进行备份最重要在手边要准备张引导盘以防不测

相关文章

读者评论

  • 共0条 分0页

发表评论

  • 昵称:
  • 内容: