前面讲到了linux系统初始化的流程:
POST-->bootsequence(bios)-->bootloader(MBR)-->kernel(ramdisk)-->rootfs(只读)-->init
这里介绍/sbin/init如何运作?
以centos5为例:
不同的安全模式加载不同的驱动,只满足基本的运行要求。
运行级别:为了系统的运行或维护等应用目的而设定,由init决定
0-6:7个级别
0:关机
1:单用户模式(root,无需登陆),single,维护模式
2:多用户模式,会启动网络功能,但不会启动NFS网络文件系统,维护模式
3:多用户模式,正常模式,文本界面(默认),
4:多用户模式,预留级别,可同3级别
5:多用户模式,正常模式,图形界面
6:重启
默认级别:
3,5
切换级别:
init #
查看级别:
who -r
runlevel 显示上次的级别
关于配置文件:/etc/inittab
每一行定义一种action以及与之对应的process
id:runlevel:action:process
常用action:
wait 切换至此级别运行一次
respawn 此process终止,就重新启动之
initdefault 设定默认运行级别,process省略
sysinit 设定系统初始化方式,此处一般为/etc/rc.d/rc.sysinit
id:3:initdefault
si::sysinit:/etc/rc.d/rc.sysinit 设定程序后会挂载此脚本,很多功能由此脚本完成
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
...
l6:6:wait:/etc/rc.d/rc 6
说明:rc 0 --->意味着读取/etc/rc.d/rc0.d/
K* K##*按文件名排序,数字越小越先运行,数字越小的服务,通常为依赖到别的服务
S* S##*按文件名排序,数字越小越先运行,数字越小的服务,通常为被依赖到的服务
依赖的先执行
大概脚本形式如下:
for srv in /etc/rc.d/rc0.d/K*;do
/etc/rc.d/rc0.d/$srv
$srv stop
done
for srv in /etc/rc.d/rc0.d/S*;do
/etc/rc.d/rc0.d/$srv
$srv start
done
一些文件通过建立链接的形式存在于文件目录中,在每个级别中都存在相应的链接。
chkconfig命令:
查看服务在所有级别的启动或关闭设定情形
chkconfig --list可以查看各服务在各级别下的运行情况。
可以通过--level指定级别进行修改。
每个服务的配置文件中,default-start和default-stop参数中可以对服务启动情况进行定义
添加:
sysv的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
chkconfig --add name
格式
#!/bin/bash
#
# chkconfig: LLLL nn nn
(写到的为L,没写的为K)
实例:
#!/bin/bash
#
# chkconfig: 345 66 33
# description: test srv script
echo "hello srv"
在345级别运行,启动为第6级别,关闭为第3级别
删除:
chkconfig --del name
修改指定的链接类型
chkconfig [--level levels] name <on|off|reset>
--level LLLL:指定要设置的级别,省略时表示2345
注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本,因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local(/etc/rc.d/rc3.d/S99local开机运行到最后一步的命令,即开机前如果需要运行的指令,直接写在此脚本)
到开机界面时,设置登陆终端
tty1:2345:respawn:/usr/sbin/mingetty tty1
tty2:2345:respawn:/usr/sbin/mingetty tty2
...
tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty会调用login程序
/etc/rc.d/rc.sysinit:系统初始化脚本
(1)设置主机名
(2)设置欢迎信息
(3)激活udev和selinux
(4)挂载/etc/fstab文件中定义的文件系统
(5)检测根文件系统,并以读写方式重新挂载根文件系统
(6)设置系统时钟
(7)激活swap设备
(8)根据/etc/sysctl.conf文件设置内核参数
(9)激活lvm及software raid设备
(10)加载额外设备的驱动程序
(11)清理操作
init流程总结:/sbin/init-->(/etc/inittab)-->设置默认运行级别--》运行系统初始脚本,完成系统初始化-->关闭对应下需要关闭的服务,启动需要启动服务-->设置登陆终端
关于centos6的启动
init程序为:upstart(ubuntu研发),其配置文件
/etc/inittab,/etc/init/*.conf
注意:/etc/init/*.conf文件语法遵循upstart配置文件语法格式
实例:
启动系统时,设置其运行级别1:
在centos中,进入grub界面(这里不详述,不清楚的自行百度)
第一行,说明到哪里去找内核
第二行,传递内核参数,传递1或single将以1级别运行,直接输入passwd可以修改root密码