init

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 --> 关闭或启动对应级别的服务 -->  启动终端
原文地址:https://www.cnblogs.com/shenxm/p/8447744.html