`
sav2005
  • 浏览: 12245 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

linux runlevel 运行级别 init inittab telinit 详解

阅读更多
一、什么是init

init是Linux系统操作中不可缺少的程序之一。 是一个由内核启动的用户级进程。

内核启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式来启动其他用户级的进程或服务。所以,init始终是第一个进程(其PID始终为1)。

内核会在过去曾使用过init的几个地方查找它,它的正确位置(对Linux系统来说)是/sbin/init。如果内核找不到init,它就会试着运行/bin/sh,如果运行失败,系统的启动也会失败。


二、运行级别

运行级就是操作系统当前正在运行的功能级别。这个级别从1到6,具有不同的功能。其功能级别如下:

# 0 - 停机(千万不能把initdefault 设置为0 )

# 1 - 单用户模式

# 2 - 多用户,没有 NFS

# 3 - 完全多用户模式(标准的运行级)

# 4 - 没有用到

# 5 - X11 (xwindow)

# 6 - 重新启动 (千万不要把initdefault 设置为6——把被你黑掉的linux的initdefault设置为0或6也算是拒绝服务攻击噢!)

除此之外还有ABC三个运行级别,但在RHLinux中都没有意义。


这些级别在/etc/inittab 文件里指定。这个文件是init 程序寻找的主要文件,最先运行的服务是放在/etc/rc.d
目录下的文件。在大多数的Linux 发行版本中,启动脚本都是位于 /etc/rc.d/init.d中的。这些脚本被用ln 命令连接到
/etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)


三、运行级别的配置

运行级别的配置是在/etc/inittab行内进行的,如下所示:

12 : 2 : wait : / etc / init.d / rc 2

  各字段解释如下:

id:runlevels:action:process

id:是一个任意指定的四个字符以内的序列标号,在本文件内必须唯一;使用老版本的libc5(低于5.2.18)或a.out库编译出来的
sysvinit限制为2字符。注意:像getty之类的登陆进程必须使id字段与tty编号一致,如tty1需要id=1,许多老版本的登陆进程都遵循
这种规则。

runlevels:表示这一行适用于运行那个/些级别(这里是2,可以有多个,表示在相应的运行级均需要运行);另外sysinit、boot、bootwait这三个进程会忽略这个设置值。

action:表示进入对应的runlevels时,init应该运行process字段的命令的方式,常用的字段值及解释在附录内。例子中的wait表示需要运行这个进程一次并等待其结束。

process:具体应该执行的命令。例子中的/etc/init.d/rc命令启动运行级别2中应该运行的进程/命令,并负责在退出运行级时将其终止(当然在进入的runlevel中仍要运行的程序除外。)

当运行级别改变,并且正在运行的程序并没有在新的运行级别中指定需要运行,那么init会先发送一个SIGTERM 信号终止,然后是SIGKILL。

  有效的action值如下:

respawn:表示init应该监视这个进程,即使其结束后也应该被重新启动。

wait: init应该运行这个进程一次,并等待其结束后再进行下一步操作。

once: init需要运行这个进程一次。

boot: 随系统启动运行,所以runlevel值对其无效。

bootwait:随系统启动运行,并且init应该等待其结束。

off: 没有任何意义。

initdefault:系统启动后的默认运行级别;由于进入相应的运行级别会激活对应级别的进程,所以对其指定process字段没有任何意义。如果inittab文件内不存在这一条记录,系统启动时在控制台上询问进入的运行级。

sysinit: 系统启动时准备运行的命令。比如说,这个命令将清除/tmp。可以查看/etc/rc.d/rc.sysinit脚本了解其运行了那些操作。

powerwait:允许init在电源被切断时,关闭系统。当然前提是有U P S和监视U P S并通知init电源已被切断的软件。RH linux默认没有列出该选项。

powerfail: 同powerwait,但init不会等待正在运行的进程结束。RH linux默认没有列出该选项。

powerokwait:当电源监视软件报告“电源恢复”时,init要执行的操作。

powerfailnow:检测到ups电源即将耗尽时,init要执行的操作,和powerwait/powerfail不同的哟。

ctrlaltdel:允许init在用户于控制台键盘上按下C t r l + A l t + D e
l组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将Ctrl + Alt + Del组合键配置为别的行为,比如忽略等。我是设置成打印一句骂人的话了^o^。

kbrequest:监视到特定的键盘组合键被按下时采取的动作,现在还不完善。

ondemand:A process marked with an ondemand runlevel will be
executed whenever the specified ondemand runlevel is called. However,
no runlevel change will occur (ondemand runlevels are ‘a’, ‘b’,and
‘c’),(英语太菜,那个however不知道该怎么翻译才好。惭愧!)


补充:

1、关于进入单用户模式,一般都是采用设置initdefault为1或者在grub/lilo中指定一个“single”或“emergency” 命令行参数来实现。
{
Linux用grub或lilo找回root密码方法:

GRUB:在引导装载程序菜单上,键入 [e] 来进入编辑模式。
你会面对一个引导项目列表。查找其中类似以下输出 的句行:
kernel /vmlinuz-2.4.18-0.4 ro root=/dev/hda2(这里不一样)
按箭头键直到这一行被突出显示,然后按 [e]。
你现在可在文本结尾处空一格再添加 single 来告诉 GRUB 引导单用户 Linux 模式。按 [Enter] 键来使编辑结果生效。
你会被带会编辑模式屏幕,从这里,按 [b], GRUB 就会引导单用户 Linux 模式。 结束载入后,你会面对一个与以下相似的 shell 提示:
sh-2.05#
现在,你便可以改变根命令,键入:
bash# passwd root
你会被要求重新键入口令来校验。结束后, 口令就会被改变,你便可以在提示下键入 reboot 来重新引导;然后,象平常一样登录为根用户。

LILo:当系统启动到出现LILO引导画面时,对于图形引导方式按TAB键进入文本方式,然后在LILO处
输入linux single回车即可进入免密码的控制台,进入以后使用passwd命令修改root的密码
即可

}

其实另外还有一个更干净的方法,编辑:
kernel /vmlinuz-2.6.9-22.EL ro root=/bin/sh,这样init就直接启动一个shell,其他任何进程都没有启动哦,够干净吧!

2、你可以自己制定启动时所进入的runlevel,如果你的系统使用的是lilo,在启动命令中将相应的部分为:
LILO: linux 5
如果你使用的是GRUB,在启动时你可以按住e键进入设置模式,相应的位置显示为:
kernel /vmlinuz ro root=/dev/hda1 5

3、系统正在运行时,telinit(或init)命令可更改运行级别。
切换运行模式使用telinit命令(root用户):
$ /sbin/telinit
通常,切换运行模式的目的是重启某些应用进程,比如XFree86,将运行模式从5切换到3将终止XFree86以及与之相关的所有进程,然后再把运行模式切换到5,XFree86就可以很干净的启动。在做这些工作之前,请确保所有在XFree86下的工作都已经保存,用root用户:
$ /sbin/telinit 3
$ /sbin/telinit 5
在键入命令之后,你的屏幕可能会显示一些服务启动或者停止的信息。


补充2:在单用户模式下引导

    一个重要的运行级别就是单用户模式(运行级别1),该模式中,只有一个系统管理员使用特定的机器,而且尽可能少地运行系统服务,其中包含登录。单用户模式对少数管理任务(比如在/usr分区上运行fsck)而言,是很有必要的,因为这需要卸载分区,但这是不可能的,除非所有的服务系统已被杀死。
  一个正在运行的系统可以进入单用户模式,具体做法是利用init,请求运行级别1。内核启动时,在内核命令行指定single或emergency关键字,就可进入运行级别1了。内核同时也为init指定命令行, init从关键字得知自己不应该采用默认的运行级别(内核命令行的输入方式和你启动系统的方式有关)。
  有时,以单用户模式进行启动是必要的,这样一来,用户在装入分区之前,或至少在装入分散的/usr分区之前,能手工运行fsck(在分散的文件系统上,任何活动都可能使其更为分散,所以应该尽可能地运行fsck)。
  如果自动化的fsck在启动时失败了,启动脚本init的运行将自动进入单用户模式。这样做是为了防止系统使用不连贯的文件系统,这个文件系统是f s c k不能自动修复的。文件系统不连贯的现象极为少见,而且通常会导致硬盘的不连贯或实验性的内核释放,但最好能做到防患于未然。
  由于安全上的考虑,在单用户模式下,启动外壳脚本之前,配置得当的系统会要求用户提供root密码。否则,它会简单地为L I L O输入合适的一行代码,以r o o t的身份登录(当然,如果/etc/passwd已经由于文件系统的问题而不连贯了,就不适合这里的原则了,为对付这种情况,你最好随时准备一张启动盘)。

  不同的运行级有不同的用处,也应该根据自己的不同情形来设置。
  例如,如果丢失了root口令,那么可以让机器启动进入单用户状态。在启动后的 lilo 提示符下输入:
  init=/bin/sh rw 使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证,让你可以使用passwd 程序来改变root口令,然后启动到一个新的运行级。



原文地址 http://sys.anquan365.com/Loophole/linux/200701/25789.html
分享到:
评论
2 楼 sav2005 2010-11-02  
inux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否 则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运 行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进 入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理:
1。 在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为 rcN.d的目录,对应系统的7个运 行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名 或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
对 于以K开头的文件,系统将终止对应的服务
对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。 进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统
1 楼 sav2005 2010-11-02  
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

Runlevel  System State
0  Halt the system
1   Single user mode
2  Basic multi user mode
3  Multi user mode
5  Multi user mode with GUI
6  Reboot the system
S, s  Single user mode

多数的桌面的linux系统缺省的runlevel是5,用户登陆时是图形界面,而多数的服务器版本的linux系统缺省的runlevel是3,用户登陆时是字符界面,runlevel 1和2除了调试之外很少使用,runlevel s和S并不是直接给用户使用,而是用来为Single user mode作准备。

linux的运行模式比起windows的启动模式的优势在于:你可以在系统空闲时使用.init工具切换你现在使用的runlevel,另外,当你关闭或者启动linux系统时你已经不知不觉中切换你的runlevel,系统关机进程需要调用runlevel(0或6)来关闭所有正在运行中的进程。

相关推荐

    LINUX系统的运行级别RUNLEVEL

    LINUX系统的运行级别RUNLEVEL

    linux的运行模式:Runlevel详细解析

    linux操作系统自从开始启动至启动完毕需要经历几个不同的阶段,这几个阶段就叫做runlevel,本文详细介绍一下runlevel,并向您展示一些小技巧来让您的linux系统避免不必要的重启动。

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

    LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。内核在内存中解压缩之后,就可以开始运行了。...init读它的配置文件/etc/inittab,决定需要启动的运行级别(Runlevel)。

    ARM_Linux启动分析.pdf

    当init由核心激活 以后,它将读取inittab中的initdefault项,取得其中的runlevel,并作为当前的运行级别。如果没有inittab文件,或者其中没有initdefault项,init将在控制台上请求输入 runlevel。 sysinit、 boot...

    Linux常用命令

    Linux常用命令 一:关机命令 1:shutdown 语法:shutdown [-efFhknr][-t 秒数][时间][警告信息] 说明:shutdown指令可以关闭所有程序,并依用户的...功能说明:转换运行级别(runlevel);init 0为关机,init 6为重启。

    解读Linux操作系统的激活程序

    文中介绍了Linux系统启动的流程及Linux Runlevel。

    runlevel命令 显示系统的运行级

    runlevel命令是读取/var/run/utmp/文件或指定的其他文件,检索其中最近的运行级记录,显示系统先前与当前的运行级 如果运行级记录中没有先前的运行级,则使用字符N表示先前的运行级。如果找不到运行级记录,runlevel...

    修改Linux的runlevel值(完整版).docx

    。。。

    linux系统服务

    linux系统启动流程 linux系统的基本启动流程大概包含以下这些内容: 内核的引导。 运行 init/systemd。 系统初始化。...使用runlevel可以查看运行级别和上一次的运行级别。 centos 7查看当前运行级别的命令是s

    Linux最强学习笔记(技术文档)

    三、LINUX目录 Linux系统使用树形目录结构,.../etc/inittab 设定系统启动时init进程把系统设置成什么样的runlevel(第六章有用过) /etc/group 设定用户的组名与相关信息 /etc/passwd 帐号信息 /etc/shadow 密码信息

    Linux操作系统实验三.doc

    (1) runlevel 命令:显示系统当前和上一次的运行级别 (2) init 命令:转换服务的运行级别 init n (3)systemctl 命令:系统服务管理 查看系统服务启动状态。其格式: systemctl list-unit-files --type service 列出所有...

    操作系统(包括linux、windows)重启分析

    对linux、Windows重启过程中产生的日志进行了分析,通过日志判断系统是否重启

    如何在Linux实现自动运行程序?

     Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init。  init根据配置文件继续引导过程,启动其它进程。通常情况下,修改放置在 /etc/rc或 /etc/rc.d ( /etc/rc?.d) 目录下的脚本文件,可以使...

    Linux halt命令用法详解

    若系统的 runlevel 为 0 或 6 ,则Linux halt命令关闭系统,否则以 shutdown 指令(加上 -h 参数)来取代。 使用权限:系统管理者。 语法halt [-n] [-w] [-d] [-f] [-i] [-p] 参数说明: -n : 在关机前不做将记忆体...

    diamond:运行级别1,您保持unix套接字。 运行级别3,您收听tcp! 启动时启动旧进程。 在被新进程踢打时关闭。 可能有助于减少应用程序重启和升级之间的停机时间。 适用于所有LINUX Web服务器的库

    您的Web应用程序的运行级别 Diamond为管理员提供了一个UNIX套接字,以便管理员正常关闭应用程序(例如Web服务器)。 除了仅关闭外,管理员还可以更改齿轮,触发功能以及取消/启动侦听器。 “踢”功能允许在停机...

    Linux命令笔记

    2:查看运行级别(runlevel,init) 3:系统默认运行级别(/etc/inittab) 2:系统启动过程 1:initramfs内存文件系统 2:调用/etc/init/rcS.conf配置文件 1:先调用/etc/rc.d/rc.sysinit 2:再调用/etc/inittab确定系统...

    如何是Linux在开机时默认进入文本模式而不是图形界面?

    如何是Linux在开机时默认进入文本模式而不是图形界面? 当时,我只记得是修改一个配置,但具体是哪一个我忘记了,回来查找相关资料解决了此问题,并在此记录以防忘记! 手动修改 /etc/inittab如下所示:   # ...

    Micro runlevel-开源

    无尘室实现busybox的runlevel / init.d / SYS V init小程序的实现,旨在达到LSB要求。

    Linux reboot命令用法详解

    Linux reboot命令 Linux reboot命令用于用来重新启动计算机。 若系统的 runlevel 为 0 或 6 ,则重新开机,否则以 shutdown 指令(加上 -r 参数)来取代 语法reboot [-n] [-w] [-d] [-f] [-i] 参数: -n : 在重开机...

    你需要知道的16个Linux服务器监控命令

    有些 Linux 发行版会提供 GUI 程序来进行系统的监控,例如 SUSE Linux 就有一个非常棒而且...如果要让服务器保持最佳性能,你应该将 Linux 服务器的运行级别 runlevel 设置为 3 ,就是控制台模式,当你需要图形化桌面的

Global site tag (gtag.js) - Google Analytics