/etc/inittab由/sbin/init程序解析调用,用于系统初始化,/sbin/init可参考源码busybox中init.c的实现方式。

原址如下:

http://leejia.blog.51cto.com/4356849/788895

/etc/inittab文件详解

Linux系统的启动过程为:加电自检-->根据BIOS中的设置从指定的设备启动-->找到设备MBR中的bootloader引导启动系统-->启动kernel-->启动init进程

    我们看到,Linux系统启动的最后是启动init进程,而init进程是怎么工作的呢?init进程就是根据/etc/inittab这个文件来在不同的运行级别启动相应的进程或执行相应的操作。
    
    /etc/inittab这个文件中定义的登记项都是以:隔开的四个段,即:
 
    id:runlevels:action:process
   
    id:它是每个登记项的标识符,用于唯一标识每个登记项,不能重复
 
    runlevels:系统的运行级别,表示process的action要在哪个级别下运行,该段中可以定义多个运行级别,各级别之间直接写不用分隔符;如果为空,表示在所有的运行级别运行。Linux的运行级别有:
    0:表示关机
    1:表示单用户模式,在这个模式中,用户登录不需要密码,默认网卡驱动是不被加载,一些服务不能用。
    2:表示多用户模式,NFS服务不开启
    3,表示命令行模式
    4,这个模式保留未用
    5,表示图形用户模式
    6,表示重启系统
 
    action:表示对应登记项的process在一定条件下所要执行的动作。
    具体动作有:
    respawn:当process终止后马上启动一个新的
    wait:当进入指定的runlevels后process才会启动一次,并且到离开这个runlevels终止
    initdefault:设定默认的运行级别,即我们开机之后默认进入的运行级别,不能是0,6,你懂的
    sysinit:系统初始化,只有系统开机或重新启动的时候,这个process才会被执行一次
    powerwait:当init接收到电源失败信号的时候执行相应的process,并且如果init有进程在运行,会等待这个进程完成之后,再执行相应的process
    powerfail:当init接收到电源失败信号的时候执行相应的process,并且如果init有进程在运行,不会等待这个进程完成,它会直接执行相应的process
    powerokwait:电源已经故障,但是在等待执行对应操作的时候突然来电了就执行对应的process
    powerfailnow:当电源故障并且init被通知UPS电源已经快耗尽执行相对应的process
    ctrlaltdel:当用户按下ctrl+alt+del这个组合键的时候执行对应的process
    boot:只有在引导过程中,才执行该进程,但不等待该进程的结束;当该进程死亡时,也不重新启动该进程
    bootwait:只有在引导过程中,才执行该进程,并等待进程的结束;当该进程死亡时,也不重新启动该进程
    off:如果process正在运行,那么就发出一个警告信号,等待20秒后,再通过杀死信号强行终止该process。如果process并不存在那么就忽略该登记项
    once:启动相应的进程,但不等待该进程结束便继续处理/etc/inittab文件中的下一个登记项;当该进程死亡时,init也不重新启动该进程
 
    process:表示启动哪个程序或脚本或执行哪个命令等
 
 
    以redhat enterprise server 5.4为例。我们分析一下/etc/inittab文件:
    行首为“#”的是注释行,没有作用
    
    id:3:initdefault:
    第一个字段为标识符,下面我们就不说了。这个登记项表示我们默认的运行级别是3,也就是说我们默认开机启动会进入命令行模式。
 
    si::sysinit:/etc/rc.d/rc.sysinit(不同版本大同小异,我的为/etc/rc.d/rc.init)
    所所有的运行级别下,init依赖/etc/rc.d/rc.sysinit这个脚本对系统进行初始化。而/etc/rc.d/rc.sysinit的作用主要是:
    1,激活udev和selinux
    2,根据/etc/sysctl.conf文件设定内核参数
    3,设定系统时钟
    4,键盘的键映射,即识别键盘
    5,启用swap分区
    6,设定主机名
    7,根文件系统检测及重新以读写方式挂载
    8,激活RAID和LVM设备
    9,启用磁盘配额
    10,检测及挂载其他文件系统(挂载/etc/fstab中定义的设备)
    11,清除过期的锁和PID文件
 
    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
    当进入n运行级(n就是上面所定义的运行级别),会把/etc/rc.d/rc*.d(*表示对应登记项process字段rc后的数字)这个目录中所有以S开头的文件启用,把以K开头的文件给禁用,并且这些文件只在进入相应的运行级别时执行一次,退出此运行级别失效。所以每个运行级别的服务是独立的,而/etc/rc.d/rc*.d这个目录中存放的是在对应级别下所要开启和禁用的服务的文件。
 
    ca::ctrlaltdel:/sbin/shutdown -t3 -r now 
    在所有运行级别下,按下ctrl+alt+del时等待3秒钟后重新启动系统。这就是为什么我们按下这三键后重新启动系统
 
    pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
    在所有的运行级别下,如果电源故障,会给出提示信息,并且在2min后关机。
 
    pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
    在12345运行级别下,如果电源故障的时候,电源又恢复正常,则给出提示信息,并且立即终止关机。
 
    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
    在2345运行级别下,会启用6个命令行界面的终端,并且一旦终端终止,就会在创建一个新的。这就是为什么我们的系统下会有6个命令行界面的终端。
 
    x:5:respawn:/etc/X11/prefdm -nodaemon
    只有我们进入5运行级别,会打开图形用户终端,并且一旦终端终止,就会再创建一个新的。你如果把这一行删了,你的图形界面还能用吗?你懂的
 
    Thus on!你是不是对linux又了解了很多呀!come on!

/etc/inittab文件详解的更多相关文章

  1. Linux下inittab文件详解

    /etc/inittab文件详解 Linux系统的启动过程为:加电自检-->根据BIOS中的设置从指定的设备启动-->找到设备MBR中的bootloader引导启动系统-->启动ke ...

  2. 【转】linux中inittab文件详解

    原文网址:http://www.2cto.com/os/201108/98426.html linux中inittab文件详解 init的进程号是1(ps -aux | less),从这一点就能看出, ...

  3. linux中inittab文件详解

    init的进程号是1(ps -aux | less),从这一点就能看出,init进程是系统所有进程的起点,Linux在完成核内引导以后,就开始运行init程序. init程序需要读取配置文件/etc/ ...

  4. 【转】/etc/inittab文件详解

    转自:https://www.cnblogs.com/ricks/p/10020886.html Linux在完成核内引导(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就 ...

  5. web.xml文件详解

      web.xml文件详解 Table of Contents 1 listener. filter.servlet 加载顺序 2 web.xml文件详解 3 相应元素配置 1 listener. f ...

  6. Linux中/proc目录下文件详解

    转载于:http://blog.chinaunix.net/uid-10449864-id-2956854.html Linux中/proc目录下文件详解(一)/proc文件系统下的多种文件提供的系统 ...

  7. SUBLIME TEXT 2 设置文件详解

    SUBLIME TEXT 2 设置文件详解 Preferences.sublime-settings文件: // While you can edit this file, it’s best to ...

  8. [转]AndroidManifest.xml文件详解

    转自:http://www.cnblogs.com/greatverve/archive/2012/05/08/AndroidManifest-xml.html AndroidManifest.xml ...

  9. delphi 资源文件详解

    delphi资源文件详解 一.引子: 现在的Windows应用程序几乎都使用图标.图片.光标.声音等,我们称它们为资源(Resource).最简单的使用资源的办法是把这些资源的源文件打入软件包,以方便 ...

随机推荐

  1. 【原创】Linux基础之SSH隧道/端口转发

    格式 ssh -L <local port>:<remote host>:<remote port> <SSH servername> 示例 # ssh ...

  2. KNN与K-Means的区别

    KNN(K-Nearest Neighbor)介绍 Wikipedia上的 KNN词条 中有一个比较经典的图如下: KNN的算法过程是是这样的: 从上图中我们可以看到,图中的数据集是良好的数据,即都打 ...

  3. Linux什么是挂载?mount的用处在哪?

    关于挂载的作用一直不是很清楚,今天在阅读教材时看见了mount这个命令,发现它的用处很隐晦但非常强大.奈何教材说的不明朗,因此在网上整合了一些优秀的解释,看完之后豁然开朗. 1.提一句Windows下 ...

  4. ubuntu linux adb devices no permissions解决办法

    最近在调试安卓手机时老是失败,问题如下所示 han@ubuntu:~/project/zero_app$ adb devices List of devices attached 664768297c ...

  5. eclipse查看一个方法被谁引用(调用)的快捷键四种方式

    1.(首推)双击选中该方法,Ctrl+Alt+H 如果你想知道一个类的方法到底被那些其他的类调用,那么请选中这个方法名,然后按“Ctrl+Alt+H”, Eclipse就会显示出这个方法被哪些方法调用 ...

  6. SQL 性能优化 总结

    SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving ...

  7. 用python一步一步教你玩微信小程序【跳一跳】

    12月28日,微信上线了小游戏「跳一跳」,瞬间成了全民游戏,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能. 作为技术出身的我们,是不是想用技术改变排名呢? 注意:本文适 ...

  8. LeetCode题解 | 215. 数组中的第K个最大元素

    在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 输出: 5 ...

  9. 关于H5页面在iPhoneX适配

    ​1.  iPhoneX的介绍 屏幕尺寸 我们熟知的iPhone系列开发尺寸概要如下: △ iPhone各机型的开发尺寸 转化成我们熟知的像素尺寸: △ 每个机型的多维度尺寸 倍图其实就是像素尺寸和开 ...

  10. (三)ajax请求不同源之nginx反向代理跨域

    一.基本原理 nginx是一个高性能的web服务器,常用作反向代理服务器.nginx作为反向代理服务器,就是把http请求转发到另一个或者一些服务器上. 用nginx反向代理实现跨域,是最简单的跨域方 ...