inittab与runflac level 区别有什么区别和联系

热门关键词:
热门关键词:
乐昌笔记本维修学校|Linux中etcinittab文件的字段及其说明
21:56:17 点击: 次&
全新升级 火热来袭,欢迎各同学咨询????????
/etc/inittab文件中每个登记项的结构都是一样的,共分为以冒号“:”分隔的4个字段。具体如下:
identifier : run_level : action : process
其中,各字段以及与其相关的说明如下:
identifier登记项标识符,最多为4个字符。用于惟一地标识/etc/inittab文件中的每一个登记项
run_level系统运行级,即执行登记项的init级别。用于指定相应的登记项适用于哪一个运行级,即在哪一个运行级中被处理。如果该字段为空,那么相应的登记项将适用于所有的运行级。在该字段中,可以同时指定一个或多个运行级,其中各运行级分别以数字0.1.2.3.4.5.6或字母a、b、c表示,且无需对其进行分隔。
action动作关键字。用于指定init(M)命令或进程对相应进程(在“process”字段定义)所实施的动作。具体动作包括:
1、boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,也不重新启动该进程。
2、bootwait:只有在引导过程中,才执行该进程,并等待进程的结束:当该进程死亡时,也不重新启动该进程。实际上,只有在系统被引导后,并从单用户方式进入多用户方式时,这些登记项才被处理;如果系统的默认运行级设置为2(即多用户方式),那么这些登记项在系统引导后将马上被处理。
3、initdefault:指定系统的默认运行级。系统启动时,init将首先查找该登记项。如果存在init将据此决定系统最初要进入的运行级。具体来说,
init将指定登记项“run_level字段中的最大数字(即最高运行级)为当前系统的默认运行级;如果该字段为空,那么将其解释为“0123456”,并以“6”作为默认运行级。如果不存在该登记项,那么init将要求用户在系统启动时指定一个最初的运行级。
4、off:如果相应的进程正在运行,那么就发出一个警告信号,等待20秒后,再通过杀死信号强行终止该进程。如果相应的进程并不存在那么就忽略该登记项。
5、once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个登记项;当该进程死亡时,init也不重新启动该进程。注意:在从一个运行级进入另一个运行级时,如果相应的进程仍然在运行,那么init就不重新启动该进程。
6、ondemand:与“respawn”的功能完全相同,但只用于运行级为a、b或c的登记项。
7、powerfail:只在init接收到电源失败信号时执行相应的进程,但不等待该进程结束。
8、powerwait:只在init接收到电源失败信号时执行相应的进程,并在继续对/etc/inittab文件进行任何处理前等待该进程结束。
9、respawn:如果相应的进程还不存在,那么init就启动该进程,同时不等待该进程的结束就继续扫描/etc/inittab文件;当该进程死亡时,init将重新启动该进程。如果相应的进程已经存在,那么init将忽略该登记项并继续扫描/etc/inittab文件。
10、sysinit:只有在启动或重新启动系统并首先进入单用户时,init才执行这些登记项。而在系统从运行级1-6进入单用户方式时,init并不执行这些登记项。action”字段为“sysinit”的登记项在“run_level”字段不指定任何运行级。
11、wait:启动进程并等待其结束,然后再处理/etc/inittab文件中的下一个登记项。
process所要执行的shell命令。任何合法的shell语法均适用于该字段。
阅读上一篇:阅读下一篇:
找课114全国免费课程咨询热线,为您推荐口碑最好的中小学课外辅导、少儿英语、成人英语、出国留学机构(其他课程咨询恕不接待)
北京 400-001-&上海 400-001-&广州 400-001- 深圳 400-001-&天津 400-001-&杭州 400-001- 南京 400-001-&苏州 400-001-&济南 400-001- 青岛 400-001-&武汉 400-001-&重庆 400-001-
成都 400-001-&西安 400-001-&宁波 400-001-大连 400-001-
温馨提示:拨打招生免费咨询电话方法,先拨通400-001-9911,再根据语音提示按分机号,等待接通,欢迎您的来电。(电话接听时间段:周一至周日上午9:00―晚上20:00)
??????????
????????????????????
??????????
??????????
???????????????
音频公开课
9302
3774
4689
3475
3944
3995
5650
3671
14658
4225
6292
5913
5660
11427
9882
9752
8871
15988
13846
13769
三百六十行,欢迎各培训机构加盟2009年4月 总版技术专家分月排行榜第一
2009年11月 Linux/Unix社区大版内专家分月排行榜第一2009年6月 Linux/Unix社区大版内专家分月排行榜第一2009年4月 C/C++大版内专家分月排行榜第一2009年3月 C/C++大版内专家分月排行榜第一2009年3月 Linux/Unix社区大版内专家分月排行榜第一2009年2月 Linux/Unix社区大版内专家分月排行榜第一
2009年2月 Linux/Unix社区大版内专家分月排行榜第三2008年10月 Linux/Unix社区大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。下次自动登录
现在的位置:
& 综合 & 正文
Linux 系统的运行级别(Run Level)
Linux 操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做 Runlevel,同样,当Linux操作系统关闭时也要经历另外几个不同的 Runlevel,下面详细介绍一下 Runlevel,并展示一些小技巧来让Linux系统避免不必要的重启动。
Runlevel 可以认为是系统状态,形象一点,您可以认为 Runlevel 有点象微软的 Windows 操作系统中的正常启动(Normal)、安全模式(Safemode)和Command prompt only。进入每个 Runlevel 都需要启动或关闭相应的一系列服务(Services),这些服务(Services)以初始化脚本的方式放置于目录 /etc/rc.d/rc?.d/或者/etc/rc?.d下面。(?代表 Runlevel 的对应序号)。
在大多数的Linux发行版本中,通常有8个运行级别系统状态(Runlevel System State):
0 Halt the system 停机(千万不要把 initdefault 设置为0),机器关闭
1 Single user mode 单用户模式,与 Win9x 下的安全模式类似
2 Basic multi user mode 基本多用户模式,没有 NFS 支持
3 Multi user mode 完整的多用户模式,是标准的运行级
4 None 一般不用,在一些特殊情况下可以用它来做一些事情。例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 Multi user mode with GUI 就是X11,进到XWindow系统了
6 Reboot the system 重新启动(千万不要把initdefault 设置为6),运行 init 6 机器就会重启
S, s Single user mode
不同的运行级有不同的用处,也应该根据自己的不同情形来设置。例如,如果丢失了 root 口令,那么可以让机器启动进入单用户状态来设置。在启动后的 lilo 提示符下输入:
init=/bin/sh rw (或者 linux 1;linux single)
就可以使机器进入运行级 1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你使用 passwd 来改变 root 口令,然后启动到一个新的运行级。
多数的桌面的 Linux 系统缺省的 Runlevel 是 5,用户登陆时是图形界面,而多数的服务器版本的 Linux 系统缺省的 Runlevel 是 3,用户登陆时是字符界面,Runlevel 为 1 和 2 除了调试之外很少使用,Runlevel 为 s 和 S 并不是直接给用户使用,而是用来 Single user mode 作准备。
Linux 的运行模式比起 Windows 的启动模式的优势在于:你可以在系统空闲时使用 .init 工具切换你现在使用的 Runlevel,另外,当你关闭或者启动 Linux 系统时你已经不知不觉中切换你的 Runlevel ,系统关机进程需要调用 Runlevel (0 或 6)来关闭所有正在运行中的进程。
显示当前运行模式
刚入门时,你或许对先前和目前正在使用中的运行模式很好奇,Runlevel命令可以用来显示这些信息:
$ runlevel
Runlevel命令的输出结果表明最初的运行模式是3,而现在的运行模式是5。
切换运行模式
切换运行模式使用 telinit 命令(root用户):
通常,切换运行模式的目的是重启某些应用进程,比如 XFree86,将运行模式从5切换到3将终止XFree86以及与之相关的所有进程,然后再把运行模式切换到5,XFree86就可以很干净的启动。在做这些工作之前,请确保所有在XFree86下的工作都已经保存,用root用户:
$ telinit 3
$ telinit 5
在键入命令之后,你的屏幕可能会显示一些服务启动或者停止的信息。
在运行模式中加入启动服务
要在某个运行模式中加入一个启动服务,首先要新建该服务启动脚本,然后把它放置于/etc/rc.d/init.d或者/etc/init.d/(根据你的 Linux版本有所不同),要将该启动脚本与运行模式关联起来,你需要这个运行模式的目录下建立一个与/etc/rc.d/init.d/下启动脚本的 symbolic link,文件名的前缀通常为SXX,XX为数字,这个数字是用来控制该运行模式下服务的启动顺序。脚本的执行顺序是按照数字大小升序执行,就是数字越小越先执行,下面就是一个在运行模式中加入启动服务具体的例子:
$ cp myservice /etc/rc.d/init.d/
$ ln -s /etc/rc.d/init.d/myservice /etc/rc3.d/S99myservice
这样,下次以Runlevel 3启动时,myservice就会自动启动。
以某个Runlevel启动
你可以自己制定启动时所进入的Runlevel,如果你的系统使用的是lilo,在启动命令中将相应的部分为:
LILO: Linux 5
如果你使用的是GRUB,在启动时你可以按住e键进入设置模式,相应的位置显示为:
kernel /vmlinuz ro root=/dev/hda1 5
Ubuntu 的运行级别
默认安装的 Ubuntu Linux 会直接到图形界面。不过很多时候我并不需要在图形界面上做事,字符界面的命令行就足够了。想起在RedHat里可以通过修改 /etc/inittab 来把默认运行级别(Runlevel)从 5 改到 3 来实现,不幸的是 Ubuntu 中并没有这个文件。但是,Ubuntu 也是可以兼容 inittab 的,不过需要自己手工建一个罢了。
Ubuntu 安装后默认的 Runlevel 为 2,这个可以用 runlevel 命令查看。因为 runlevel=2,所以在启动过程中自动执行 /etc/rc2.d/ 目录下的以S开头的脚本。Ubuntu之所以能直接启动到图形界面,是由于运行gdm所致。所以,只要把gdm的启动脚本禁用就可以了,方法就是把文件名的第一个字母 S 改成 K:
cd /etc/rc2.d
sudo mv S30gdm K30gdm
这是一种方法,而且非常简单。但更方便的方法是设定一个新的 Runlevel,让那个新的 Runlevel作为启动到字符界面。这样便于管理。Ubuntu没有/etc/inittab文件,只好新建一个了,内容只有一行:
id:3:initdefault:
这样下次启动时就会自动运行/etc/rc3.d/目录下的脚本,而不再是/etc/rc2.d/中的。所以接下来要进入到/etc/rc3.d/中,看看gdm的启动脚本文件名:
ls -l *gdm
如果是以 S 打头的,把文件名改成以 K 打头的就行了。
&&&&推荐文章:
【上篇】【下篇】linux(16)
LINUX通过设置run level来规定系统使用不同的服务来启动,让LINUX的使用环境不同。分为7个等级。
0--halt :系统直接关机。
1--single user mode:单用户维护模式,在系统出问题时的维护。
2--Multi-user,without NFS:类似 level 3,只是没有NFS服务。
3--Full multi-user mode:含有完整网络功能的纯文本模式。
4--unused:系统保留功能。
5--X11:与level 3相似,但加载使用 X Window。
6--reboot:重行启动。
取得run level的默认启动值是写在/etc/inittab里面的。
这个文件基本语法为:【设置选项】:【run level】:【init的操作行为】:【命令选项】
1.设置选项:最多4个字符,是一个简单的代表说明。
2.run level:在哪些run level进行(启动的意思),可多选。
3.init操作行为:
&initdefault:代表默认的run level 设置值;
&sysint:代表系统初始化的操作选项;
&ctrlaltdel:代表【ctrl】+【alt】+【del】三个按键是否可以重新启动的设置;
&wait:代表后面字段设置的命令必须先执行完毕才继续下一个;
&respawn:代表后面的字段的命令可以无限制的再生。比如tty1下exit后,系统会再开一个新的
4.命令选项:代表可以进行的命令,通常是一些script。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:3965次
排名:千里之外
原创:24篇
转载:119篇理解Linux的启动过程(2)来源:中华网考试 更新时间:  3,加载内核
  在grub的菜单选定启动Linux后,系统从Linux所在的磁盘载入内核。内核一般位于/boot目录中,比如,我的系统中内核为 /boot/vmlinuz-2.6.12-10-686。当然,可以有不同版本的内核位于/boot目录中,可以通过grub菜单选择启动的内核版本。
  $ uname -r& : 显示当前运行的内核版本
  vmlinuz是可引导的、压缩的内核。“vm”代表“Virtual Memory”。vmlinux是未压缩的内核,vmlinuz是vmlinux的压缩文件.
  加载内核时还应该注意”虚拟硬盘“,即RAM DISK。以后有机会再归纳。
  总之,boot loader现将Linux内核加载到内存中(可能基于initrd建立RAM DISK),然后将BIOS中关于设备的数据传递给内核,内核建设设备,加载相应的驱动程序.
  4,init进程
  内核被加载之后,它执行的第一个程序就是/sbin/init.init 它利用 /etc/inittab配置文件获取开机等级 ( Run level ) 之外, 并基于run level 选择开机时启动的服务.
  通过 $ less /etc/inittab 查看开机init读取的开机配置文件内容.注意下面这行:
  # The default runlevel.
  id:2:initdefault:
  Ubuntu默认的run level是2.正如前面所说,把它设置成2,3,4,5都是多用户图形模式登录.千万别设成0或6!
  关于init进程,这里多说几句(针对一般UNIX系统)
  pid=0 : swapper进程,用于进程调度.它位于内核内部,是系统进程.
  pid=1 : init进程, 有对应的程序/sbin/init,尽管运行它需要管理员权限,但实际上它是个用户进程,不位于内核中.系统启动时,内核被加载后调用init进程.
  pid=2 : pagedaemon, 用于支持虚拟内存的页.
  init进程还负责处理孤儿进程(父进程在子进程之前终止,则子进程成为孤儿进程, 此时,init继承为他们的父进程).
  5,init 执行 /etc/init.d/rcS 程序 (重点)
  在Debian/Ubuntu系统中,初始化脚本是/etc/init.d/rcS,在Rad Hat中是/etc/rc.d/rc.sysinit。这里面包含了装入文件系统,设置时间,打开交换分区,得到主机名等等内容。
  在前面提到的inittab文件中,紧接runlevel之后有如下内容:
  # Boot-time system configuration/initialization script.
  # This is run first except when booting in emergency (-b) mode.
  si::sysinit:/etc/init.d/rcS
  inittab的主要功能是描述引导及正常操作时,应该在何种运行等级下启动什么程序,每个运行等级的具体项目完全可以通常/etc/inittab来定义,但Debian有一个更健壮的方案sysvinit,它被认为是init最强大的应用程序之一。Debian组织inittab的方式是把运行等级的大部分定义从inittab中移出来,移到一个脚本层次中去。惟一直接从inittab启动的程序只有getty,它用于虚拟设备上启动登录提示符,保留它因为它们要求特殊处理,在inittab之外处理要困难得多。
  inittab来启动所有软件当然是可能的,但将所有配置写在同一个文件既不方便查看也不方便维护,所以文件里会加上这许多行:
  l0:0:wait:/etc/init.d/rc 0
  l1:1:wait:/etc/init.d/rc 1
  l2:2:wait:/etc/init.d/rc 2
  l3:3:wait:/etc/init.d/rc 3
  l4:4:wait:/etc/init.d/rc 4
  l5:5:wait:/etc/init.d/rc 5
  l6:6:wait:/etc/init.d/rc 6
  这些行实际决定了系统在各个运行等级下的行为。它们如何做到的也许并不明显,但至少我们知道主要意思:首先每行都有个符号ID lx,lx表示runlevel x;其次,每行只在一个运行等级下激活,该运行等级对应着符号ID中的数字x。命令执行时,init停下来,直到进程结束。最后,每个命令行调用一个脚本 /etc/init.d/rc x,这里x代表当前运行等级的数字。显然各运行等级的具体任务在/etc/init.d/rcS脚本中安排。
  init把从inittab中获取的run-level值作为参数传递给rc
  rc与rcS脚本的区别 (rc = run command)
  rc&& : This file is responsible for starting/stopping services when the runlevel changes.
  rcS : Call all S??* scripts in /etc/rcS.d in numerical/alphabetical order.
  6,加载内核模块(module)
  2.6的内核支持动态模块的加载,关于内核模块,我另外写一篇。
  7,init 执行 对应run-level 级的脚本文件( Scripts )
  到目前为止,内核及其模块被加载了,也完成了系统的初始化。现在要做的工作就是开启系统服务。由于不同的run-level需要开启的服务不同,所以系统为不同的run-level设定了不同的脚本。
  $ ls -d /etc/rc*.d
  可以看到有rc0~rc6及rcS,共8个目录。他们所包含的文件都是连接,指向/etc/init.d/目录中的文件。比较各目录中的文件你会发现, rc2~rc5中的内容是相同的。正好验证了Debian/Ubuntu中run-level 2~5是等效的。
  以S开头的表示在对应级别Start的服务,以K开头表示Kill的服务。紧跟S或K之后的两位数字决定了启动顺序,数字小的先运行。
  关于rcS/rcS.d,我还不是很清楚,哪位大侠指点?
  8,执行 /bin/login 程序,等待用户登入
  这个就不用多说了。看过APUE的都知道login要读取/etc/passwd文件。关于passwd文件,请参考APUE,p161 (第二版新版哦!)
  OK,完毕,谢谢收看。有不足之处,恳请指正!
  在系统加电引导时,init从run-level = 0开始,一级一级往上运行到inittab中定义的默认run-level。在run-level过渡时,init将run-level值作为参数传递给rc,进而执行启动脚本。
考试答疑微信:theastudy
更多学习资源请关注教育嘟嘟嘟(eduFMing)}

我要回帖

更多关于 run level 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信