init 程序的类型:
SysV:
init, CentOS 5 之前
配置文件:/etc/inittab
Upstart:
init,CentOS 6
配置文件:/etc/inittab,/etc/init/*.conf
Systemd :
systemd, CentOS 7
配置文件:/usr/lib/systemd/system,/etc/systemd/system
init 启动级别
在init配置文件中有个非常重要的配置项目,那就是默认的系统启动级别。
启动级别就是为系统维护的目的而设定,途径是设定启动或关闭服务实现。
sbin/init是CentOS6 之前的。
运行级别:
为系统运行或维护等目的而设定;0-6 的7 个级别
0 : 关机;关闭所有服务。
1 : 维护模式;单用户模式;single模式;此级别可允许root用户直接登录而无需认证
2 : 维护模式;多用户模式,启动网络功能,但不会启动NFS ,需要用户认证
3 : 正常模式;多用户模式,文本界面
4 : 预留级别;可同3 级别
5 : 正常模式;多用户模式,图形界面
6 : 重启;关闭所有服务,且再重启所有服务
默认级别:
3或5,服务器基本上使用3级别。
切换级别:
init #
查看级别:
runlevel ; who -r
启动时:
可以选择e,a,c来进行相关操作
init 第一步初始化
init 读取其初始化文件:
/etc/inittab
1》初始运行级别(runlevel)
2》使用/etc/rc.d/rc.sysinit脚本来进行系统初始化
3》对应进行运行级别的脚本目录,初始运行级别是几,这里就进行那个脚本
4》捕获某个关键字顺序,这里是配置组合键功能
5》定义UPS 电源终端/恢复脚本,也就是配置不断电系统pf、pr两种机制
6》在虚拟控制台生成getty
7》在运行级别N上来初始化X,以/etc/X11/prefdm-nodaemon启动图形化界面
CentOS 5 的inittab 文件
配置文件:
/etc/inittab
此配置文件中,每一行定义一个由init执行的action以及与之对应的process,action用于定义程序啥时候被运行
开头第一行格式:id:runlevel:action:process
action:
wait: 切换至此级别运行一次
respawn:此process 终止,就重新启动之
initdefault:设定默认运行级别;process会被省略
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit
默认的runlevel配置,次runlevel为3
id:3:initdefault:
系统软件运行环境的初始化脚本
si::sysinit:/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit为初始化用户空间环境,会执行许多系统初始化任务
7个不同runlevel,这是需要启动的服务的script放置路径。
此处系统会启动对应级别下设定为要启动的服务和关闭的服务。
这意味着通过/etc/rc.d/rcN.d/下所有链接文件来决定如何启动或关闭服务。
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
是否允许按下ctrl +alt+del就重新启动配置项目:
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
有关不间断电源系统(UPS),一个是断电时的关机,一个是恢复供电时的处理。
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
tty1--tty6是由底下这六行决定
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
X window 是由以下这行决定的
x:5:respawn:/etc/X11/prefdm -nodaemon
CentOS 6 /etc/inittab 和相关文件
/etc/inittab
设置系统默认的运行级别:id:3:initdefault:
/etc/init/*.conf
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
破解CentOS5和6的root口令
直接使用单用户登录,在启动时进入grub,在进入单用户
init进行的第二步初始化
/etc/rc.d/rc.sysinit: 系统初始化脚本
1) 设置主机名(读取/etc/sysconfig/network文件中的HOSTNAME进行)
2) 设置欢迎信息
3) 激活udev 和selinux
4) 挂载/etc/fstab 文件中定义的文件系统
5) 检测根文件系统,并以读写方式重新挂载根文件系统
6) 设置系统时钟
7) 激活swap 设备
8) 根据/etc/sysctl.conf 文件设置内核参数
9) 激活lvm 及software raid 设备
10) 加载额外设备的驱动程序
11) 清理操作
启动各项服务
说明:rc N --> 意味着读取/etc/rc.d/rcN.d/
K*: K##*
S*: S##*
##运行次序,数字越小,越先运行,数字越小的服务,通常为被依赖到的服务
以K开头的都被传递stop参数来停止。
以S开头的都被传递start参数来开启
开机过程/etc/rc.d/rc3.d/的脚本是这样执行的:
for srv in /etc/rc.d/rcN.d/K*; do
$srv stop
done
for srv in /etc/rc.d/rcN.d/S*; do
$srv start
done
/etc/rc.d/rc3.d/目录下符号链接文件可以通过两种方法创建:
1》通过在/etc/init.d/(/etc/rc.d/init.d )目录下编辑服务脚本,格式有要求。
然后在/etc/rc.d/rcN.d/目录下创建对应与/etc/init.d/目录下服务脚本的符号链接文件。
2》此符号链接文件也可通过chkconfig命令来实现
注意:
正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d 一个服务脚本,而是指向了/etc/rc.d/rc.local 脚本(计算机启动最后启动的服务,可以在这里面添加需要开机启动的东西)。
不便或不需写为服务脚本放置于/etc/rc.d/init.d/ 目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local 文件中。
/etc/rc.d/rc.local 在指定运行级别脚本后运行,可以根据情况,进行自定义修改。
1:2345:respawn:/usr/sbin/mingetty tty1
2:2345:respawn:/usr/sbin/mingetty tty2
...
6:2345:respawn:/usr/sbin/mingetty tty6
mingetty 会自动调用login 程序
x:5:respawn:/etc/X11/prefdm -nodaemon
总结:
/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> ( 关闭对应下需要关闭的服务)务 启动需要启动服务 --> 设置登录终端
CentOS6,init 程序为upstart, 其配置文件/etc/inittab, /etc/init/*.conf,配置文件的语法遵循upstart 配置文件语法格式,和CentOS5 不同。
CentOS 6 启动流程:
POST --> Boot Sequence(BIOS) --> Boot Loader -->Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 rc.sysinit --> 关闭或启动对应级别的服务 --> 启动终端