当系统启动时,首先启动内核,内核调用init来完成引导进程.init启动时,它会在/etc/inittab内查找默认的运行级别:如id:2:initdefault:运行/etc/rc.d/init.d中运行级别为2的启动脚本。由于init.d中的运行级别的这些脚本都用ln 命令连接到/etc/rc.d/rcn.d目录.例如/etc/rc.d/rc2.d/S10network对应/etc/rc.d/init.d下的network脚本的.因此运行/etc/rc.d/rc2.d下的脚本.
如/etc/rc.d/rc2.d/S10network或/etc/rc.d/rc2.d/K45named等,则在第10个启动network,在第45个终止named
init详解
1、什么是init进程
init进程,是一个由内核启动的用户级进程,内核自行启动后,就通过启动init来完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)
2、文件位置
/sbin/init。如果内核找不到init,它就会试着运行/bin/sh
3、运行级别
运行级就是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
# 0 - 停机(千万不能把initdefault 设置为0 )
# 1 - 单用户模式
# 2 - 多用户,没有 NFS
# 3 - 完全多用户模式(标准的运行级)
# 4 - 没有用到
# 5 - X11 (xwindow)
# 6 - 重新启动 (千万不要把initdefault 设置为6 )
1)、运行级别的配置是在/etc/inittab 文件里配置的。最先运行的服务是/etc/rc.d 下的文件。启动脚本都是位于
/etc/rc.d/init.d中的。这些脚本被用ln 命令连接到 /etc/rc.d/rcn.d 目录。(这里的n 就是运行级0-6)
运行级别的配置
如下所示:
12 : 2 : wait : /etc/init.d/rc2
12:是一个任意指定的标签;
2:表示这一行适用于运行那个级别(这里是2);
wait:进入运行级别时,init应该等待第四个字段内的命令结束。
/etc/init.d/rc2:Linux版本的不同,采用的具体命令也不同,运行级别的配置也有差别。
2)、init启动时,它会在/etc/inittab内查找一个代码行,这一行指定了默认的运行级别:
id : 2 : initdefault :
3)、rcn.d与inittab的关系
rcn.d目录和运行级别n相关。/ect/rc.d/rcn.d是用ln命令和/etc/rc.d/init.d中的脚本关联的,例如:
rc2.d 目录下面的文件就是和运行级别2 相关的。
/etc/rc.d/rc2.d/S10network对应/etc/rc.d/init.d下的network 脚本的
文件开头的S 代表start 就是启动服务的意思,后面的数字10 就是启动的顺序
/etc/rc.d/rc2.d/S80postfix,80 就是顺序在10 以后,因为没有启动网络的情况下,启动postfix是没有任何作用的
/etc/rc.d/rc3.d/S60nfslock,NFS 要用到这个文件,一般用在多用户环境下,所以放在rc3.d 目录下
/etc/rc.d/rc2.d/K45named ,K 代表 kill
标准的Linux运行级为3 或者5 ,如果是3 的话,系统就在多用户状态。如果是5的话,则是运行着X Window 系统。如果目前正在3或5,而你把运行级降低到2的话,init 就会执行 K45named 脚本。
不同的运行级有不同的用处,例如,如果丢失了root 口令,那么可以让机器启动进入单用户状态来设置。在启动后的 lilo 提示符下输入:init=/bin/sh rw就可以使机器进入运行级1 ,并把 root 文件系统挂为读写。他会跳过所有系统认证, 让你使用passwd 程序来改变root口令,然后启动到一个新的运行级。
4、/etc/inittab中的特殊配置
/etc/inittab中,有几个特殊的特性,允许init重新激活特殊事件。这些特殊特性都是用第三个字段中的特殊关键字标记出来的。比如:
1. powerwait
允许init在电源被切断时,关闭系统。其前提是具有U P S和监视U P S并通知init电源已被切断的软件。
2. ctrlaltdel
允许init在用户于控制台键盘上按下Ctrl+Alt+Del组合键时,重新启动系统。注意,如果该系统放在一个公共场所,系统管理员可将Ctrl+Alt+Del组合键配置为别的行为,比如忽略等。
3. sysinit
系统启动时准备运行的命令。比如说,这个命令将清除/tmp。
其他的关键字及其使用详情,可参考inittab手册页。
运行级别补充
1、确定当前的运行级别
本章不是针对系统管理员的,但是作为shell编程者,应当了解rc.scripts是什么,它们是被怎样放置到运行级别配置目录中的。顺便说一下,如果想知道当前的运行级别,可以用下面的命令:
who -r
在‘run level’后面的数字就是当前的运行级别。后面的时间是系统最近一次重启动的时间。
如果是LINUX系统,那么
$ runlevel
2 3
第一列表示系统的前一个运行级别,第二列表示系统当前的运行级别,在这里是3。
2、inittab
inittab文件所包含的域具有严格的格式。该文件中每个条目的格式为:
id:rstart:action:process
其中,id域是相应进程的唯一标识。
rstart域所包含的数字表示运行该进程的级别。
action域告诉init进程如何对待process所对应的进程。这里可以有很多种动作,但是最常见的是wait和respawnwait意味着当进程启动后等待它结束。respawn则意味着如果该进程不存在,则启动相应的进程,如果它存在,那么只要它一掉下来就立即重新启动它。
process域包含了实际要运行的命令。
该文件的第一行是系统缺省的运行级别,这里是级别3,一般都是这样。
以数字10到16开始的行启动或停止该运行级别所对应的全部运行级别脚本。例如,该文件中有这样一行:
15:5:wait:/etc/rc.d/rc 5
它的意思是,在运行级别5应该以参数5执行脚本/etc/rc.d/rc,即/etc/rc.d/rc执行/etc/rc.d/rc5.d目录中的所有脚本。
在上述文件的最后一行,在运行级别2、3、4和5,该进程将会始终存在,即使暂时掉下来,大概也不会超过1s。这一始终存在的进程是串口ttyS1上的mingetty。该命令含有一个参数,即终端类型为vt100。
3、运行级别脚本的格式
rcN.d目录中的脚本都是一些链接,这样是为了省去不必要的副本。这些链接的格式为:
Snnn.script_name
Knnn.script_name
其中,
S:代表启动相应的进程
K:代表杀死相应的进程
nn:是00至99的两位数字,不过在有些系统中是000至999三位数字。在不同目录中的链接应采用同一数字。例如,如果某个服务在rc3.d中启动时名为S45.myscript,那么如果希望它在rc2.d中启动,应当使用链接名S45.myscript。
script_name:相应脚本的文件名,根据所在操作系统的不同,它们可能位于下列目录中:
/usr/sbin/init.d/etc/rc.d/etc/init.d
当init进程调用相应的运行级别脚本时,杀进程按照从高到低的K序号进行,即K23,myscript K12.named;而启动进程按照从低到高的序号进行。如果使用的是LINUX系统,K序号将按照从高到低的顺序执行。
安装运行脚本
1、安装运行级别脚本
如果想要安装自己的运行级别脚本,必须:
• 编写该脚本,确保它符合调用标准。
• 确信它能够启动或终止相应的服务。
• 将该脚本放置于(取决于操作系统) /etc/init.d或/usr/sbin/init.d或/etc/rc.d中。
• 在相应的rcN.d目录中按照合理的命名方式创建链接。
下面的脚本能够启动或停止一个名为rc.audit的审核应用程序。该服务运行于级别3、5、4,停止于级别6、2、1。通过查看rcN.d中的条目,我们发现序号35空闲,于是就使用该序号。实际上,系统并不对使用已占用的序号作任何检查。
让我们假定该脚本已经通过了测试。它能够正确地启动和停止审核服务。现在我们把该脚本放置在相应的运行级别目录中。
在本系统中,rcN.d目录位于/etc/rc.d目录下,而我的运行级别脚本保存在/etc/rc.d/init.d目录下。如果系统目录结构与上面的不同,那么需要对下面的命令作相应的调整。
我们首先启动该脚本—记住启动脚本所使用的链接名是以S打头的。
$pwd
/etc/rc.d/rc3.d
$ln -s ../init.d/rc.audit S35rc.audit
$ls -l
....
lrwxrwxrws 1 root root .....S35rc.audit -> ../init.d/rc.audit
.......
我们已经创建了相应的链接。ls -l命令的结果显示该链接指向/etc/init.d/rc.audit文件。现在只要进入其他的相关目录(rc4.d和rc5.d )使用同样的命令就可以启动其他相应的服务。
如果希望停止某个脚本的运行,可以使用如下命令:
$pwd
/etc/rc.d/rc6.d
$ln -s ../init.d/rc.audit K35rc.audit
$ls -l
...
lrwxrwxrwx 1 root root ... K35rc.audit -> ../init.d/rc.audit
...
在其他相关目录中,也可以如法炮制,停止相应的审核服务。现在当系统重启动时(运行级别6 ),它将被停止;在运行级别切换到2或1时也是如此。该服务在运行级别4或5中同样也会被启动。
2、使用inittab来启动应用程序
我们还可以用其他的方法来启动应用程序。可以通过在inittab文件中加入相应的条目来做到这一点。
系统运行在级别3时运行我的一个磁盘镜像检查脚本。
首先我确定该脚本能够正确运行,然后对inittab文件做备份。
$ cp /etc/initab /etc/inittab.bak
接下来编辑inittab文件,在该文件末尾加入这样一个条目:
rc.diskchecker:3:once:/usr/local/etc/rc.diskchecker > /dev/console 2>&1
保存并退出。
上面的一条意思是:
行首的rc.diskchecker是该进程在运行级别3中的唯一标识。该进程只运行一次。
所要运行的脚本是/usr/local/etc/rc.diskchecker,所有的输出都被送到控制台。
3、启动和停止服务的其他方法:rc.local
如果不想把/etc/inittab文件弄得过于杂乱,还有其他的方法可以实现启动和停止服务的功能。大多数系统都含有一个名为rc.local的文件,一般来说也是位于/etc目录下。该脚本文件将在inittab和运行级别脚本之后运行。可以在该文件中加入任何命令,或从中调用最习惯用的启动脚本。有些系统还在/bin目录下(更多的是在/usr/sbin目录下)含有一个名为shutdown的脚本文件。可以使用它来关闭某些服务。
linux启动init流程(转)的更多相关文章
-
Linux启动的流程
2017年1月10日, 星期二 Linux启动的流程 null
-
linux 启动引导流程
课程大纲: Linux引导流程 Linux运行级别 Linux启动服务管理 GRUB配置与应用 启动故障分析与解决 系统引导流程 1.固件firmware(CMOS(固化在硬件上的程序与硬件统称)/B ...
-
linux启动基本流程
linux启动序列 1.CPU初始化 CPU自身初始化.从某个固定位置(0xfffffff0)取指令并运行,该指令为跳转指令.跳转到BIOS代码的首部. 2.装载BIOS BIOS被固化在 ...
-
Linux启动流程和服务管理(init和systemd)
目录 一:Linux启动流程 init和Systemd的区别 二:Linux服务管理(service,systemctl) 一:Linux启动流程 Rhel6启动过程: Rhel7启动过程: GRUB ...
-
linux启动流程及自定义gurb
linux 启动流程 POST BIOS(boot sequence) 所选择的启动设备次序的MBR中是否有引导程序, ----> MBR(bootloader) 提供内核列表 -------& ...
-
linux启动流程
看了深入理解linux内核一书的最后对linux启动流程的介绍,下面就把我能理解的写一下吧: bios(硬件加电自检POST,寻找第一个启动设备) the boot loader(可以从硬盘启动也可以 ...
-
Linux启动流程详解
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...
-
Linux启动流程详解【转载】
在BIOS阶段,计算机的行为基本上被写死了,可以做的事情并不多:一般就是通电.BIOS.主引导记录.操作系统这四步.所以我们一般认为加载内核是linux启动流程的第一步. 第一步.加载内核 操作系统接 ...
-
linux文件系统启动流程、启动脚本
linux文件系统启动流程.启动脚本 下面是一张Linux启动流程图: 在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为: 1. /sbin/init 2. /etc/ ...
随机推荐
-
开启了HA的XenServer如何关闭虚拟机?
可开启了HA很方便,在主机自己坏掉的情况下其中的虚拟机能自己飘到活的机器上并被运行起来,不过如果手动的需要关闭虚拟机的话在这情况下,该虚拟机会自己"复活"即便我们选的是关机. 此时 ...
-
Lyft押重注于苹果编程语言Swift
Lyft押重注于苹果编程语言Swift 1年后获得丰厚回报BI中文站 8月22日报道 一年多以前,打车应用Lyft做出重大决定,决心押重注于苹果开发的编程语言Swift,用这种编程语言重写其所有iPh ...
-
HTML <;base>; 标签 为页面上的所有链接规定默认地址或默认目标
定义和用法 <base> 标签为页面上的所有链接规定默认地址或默认目标. 通常情况下,浏览器会从当前文档的 URL 中提取相应的元素来填写相对 URL 中的空白. 使用 <base& ...
-
SQL Server中解决死锁
SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...
-
学习OpenCV——行人检测&;人脸检测(总算运行出来了)
之前运行haar特征的adaboost算法人脸检测一直出错,加上今天的HOG&SVM行人检测程序,一直报错. 今天总算发现自己犯了多么白痴的错误——是因为外部依赖项lib文件没有添加完整,想一 ...
-
正式学习React( 三)
最基本的jsx语法什么的,我就不介绍了,唯一觉得有用点的,就是声明周期了. 下面的内容是转来的,自己也可以网上去搜,我觉得别人归纳的挺不错的,不过写法可能不是es6的,不影响学习. 在组件的整个生命周 ...
-
css3 display:box
想做自适应的流体布局 box很有用 . 还没有得到firefox.Opera.chrome浏览器的完全支持,但可以使用它们的私有属性定义firefox(-moz-).opera(-o-).chrome ...
-
String.equals()方法
public boolean equals(Object anObject) { if (this == anObject) { return true; } ...
-
java 分解质因数
算法目的:对一个正整数分解质因数 一.算法分析: 1.建立整数列表,保存求到的因数. 2.声明整数i=2,用以递增取模:整数m,用于临时保存n 3.建立while循环,i小于等于整数m时,判断m%i, ...
-
H - Rescue the Princess ZOJ - 4097 (tarjan缩点+倍增lca)
题目链接: H - Rescue the Princess ZOJ - 4097 学习链接: zoj4097 Rescue the Princess无向图缩点有重边+lca - lhc..._博客园 ...