`
sav2005
  • 浏览: 12613 次
  • 性别: 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

    - **切换运行级别**:使用命令`telinit <runlevel>`或`init <runlevel>`来改变当前的运行级别。例如,`telinit 5`会将系统切换到带有图形界面的多用户模式。 #### 服务与运行级别 为了实现不同运行级别的功能差异...

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

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

    Linux进程init主配置文件etcinittab的解析IT知识

    `init`进程的核心配置文件就是`/etc/inittab`,它定义了系统如何被设置以及在不同运行级别下应执行哪些任务。本文将详细介绍`/etc/inittab`文件的结构、内容及其在Linux系统中的作用。 #### 文件格式与结构 `/etc/...

    Inittab初始化流程详解

    Inittab是Linux系统中的一个重要配置文件,它定义了系统在不同运行级别(runlevel)下的启动和服务行为。这个文件通常位于/etc/inittab下,是init进程(PID 1)用来管理系统启动、运行级别切换以及控制其他进程的...

    Linux下init进程源码分析

    - `init`进程还负责响应终端用户的操作,例如通过Ctrl+Alt+Del组合键触发系统重启或关闭,以及根据系统运行级别(runlevel)的变化调整运行的服务。 2. **init的启动机制:** - `init`进程由内核在系统引导阶段直接...

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

    Runlevel 是操作系统当前正在运行的功能级别。这个级别从 1 到 6,具有不同的功能。如: * 0 - 停机(千万不能把 initdefault 设置为 0 ) * 1 - 单用户模式 * 2 - 多用户,没有 NFS * 3 - 完全多用户模式(标准的...

    Linux启动过程、运行级别及相关命令

    5. **读取/etc/inittab配置文件**:INIT根据inittab文件的配置启动对应运行级别的进程和服务。 6. **初始化脚本**:系统会执行/etc/rc.d/rc.sysinit初始化脚本,完成更多的系统配置和服务启动。 7. **加载其他初始...

    Linux启动运行级别&chkconfig&crontab.pdf

    首先,Linux启动运行级别(Runlevel)是系统在不同状态下的工作模式,主要用于控制哪些服务应该启动。Linux有7个不同的运行级别,每个级别都有特定的功能: - 0:关机或重启 - 1:单用户模式,用于维护和修复 - 2:...

    Linux-init-process-analyse.pdf

    5. **控制台和运行级别**:INIT进程还负责管理系统的运行级别,比如多用户模式(runlevel 3)和图形界面模式(runlevel 5)。不同的运行级别对应不同的服务组合,通过改变运行级别,可以调整系统的服务状态。 6. **...

    linux-init的6种模式

    ### Linux Init 的六种运行模式详解 #### 一、引言 在Linux系统中,`init` 是一个非常重要的进程,通常被称为系统的所有进程之祖。`init` 进程的主要职责是根据 `/etc/inittab` 文件中的脚本创建和管理其他进程。...

    Ubuntulinux关机、重启、注销命令.pdf

    init 定义了 8 个运行级别(runlevel),init 0 为关机,init 1 为重启。telinit 命令可以改变 init 的运行级别。 四、logout 命令 logout 命令是 Ubuntu Linux 中的注销命令。当用户登录系统后,若要离开系统,只...

    Linux运行级别.docx

    在Linux操作系统中,运行级别(Runlevel)是一个关键概念,它定义了系统在不同阶段的行为和功能。Linux有七种不同的运行级别,每一种都有特定的用途。以下是这些运行级别的详细解释: 1. **运行级别0**:这是关机或...

    Linux的运行级修改

    在深入探讨Linux运行级修改这一主题前,我们首先需理解什么是Linux运行级,以及它为何在系统管理和维护中扮演着至关重要的角色。 ### Linux运行级概述 Linux运行级(Run Level)是系统的一种状态,决定了启动后...

    redhat /etc/inittab

    这个文件定义了系统在不同运行级别(Runlevel)下的行为,以及在启动过程中需要执行的各种任务和服务。运行级别在Linux中被用来改变系统的操作状态,例如从图形界面切换到命令行模式或者进入单用户模式。 文件结构...

    07-RHEL7-Linux系统运行机制

    在较早的Linux版本中,init是初始化系统的进程,使用/etc/inittab文件作为配置。在RHEL7以及基于systemd的系统中,systemd取代了传统的SysVinit作为初始化系统和服务管理器。systemd使用单元文件(unit files)来...

    linux -shell手册.PDF

    可以使用runlevel命令来确定当前的运行级别,例如`runlevel`命令将显示当前的运行级别和前一个运行级别。 5. inittab文件 inittab文件是Linux系统中的一种配置文件,用于存储系统启动时需要启动的服务。该文件位于...

    Linux关机和重启服务器命令详解

    init 进程定义了 8 个运行级别(runlevel),init 0 为关机,init 1 为重启。init 进程可以收到 TERM 信号以终止所有的用户进程和守护进程。 了解这些命令的使用方法和参数可以帮助用户更好地管理 Linux 系统,避免...

    经典—详解嵌入式linux启动信息_经典

    在init进程的管理下,系统会按照特定的运行级别(runlevel)启动一系列的服务和守护进程。这些服务包括网络服务、系统日志记录、硬件驱动等。运行级别的选择取决于系统的应用场景,比如在嵌入式设备上,可能需要保持...

    Linux run level解读

    在实际操作中,可以使用`init`命令或`telinit`命令切换run level,如`telinit 3`会将系统切换到运行级别3。在Systemd环境下,可以使用`systemctl isolate`命令达到相同的效果。 了解Linux的run level及其配置对于...

Global site tag (gtag.js) - Google Analytics