一、CentOS 6 启动流程
1.加载BIOS的硬件信息,获取第一个启动设备。
2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息
3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备。
4.核型执行init程序并获取运行信息。
5.Init执行/etc/rc.d/rc.sysinit文件。
6.启动核心的外挂模块(/etc/modprobe.conf)。
7.Init执行运行的各个批处理文件(scripts).
8.Init执行/etc/rc.d/rc.local.
9.执行/bin/login程序,等待用户登录。
10.登录之后开始以Shell控制主机。
CentOS 6启动流程总结:
POST –> Boot Sequence(BIOS) –> Boot Loader –> Kernel(ramdisk) –> rootfs–> switchroot–> /sbin/init–>(/etc/inittab, /etc/init/*.conf) –> 设定默认运行级别–> 系统初始化脚本rc.sysinit–> 关闭或启动对应级别的服务–> 启动终端
第一个进程init及配置文件/etc/inittab
run level:执行等级
0:关机
1:单用户模式(root自动登录), single, 维护模式
2: 多用户模式,启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
init初始化:
init读取其初始化文件:/etc/inittab
初始运行级别(RUN LEVEL)
系统初始化脚本
对应运行级别的脚本目录
捕获某个关键字顺序
定义UPS电源终端/恢复脚本
在虚拟控制台生成getty
在运行级别5初始化X
/etc/inittab 内容与语法:
[root@CentOS 6 ~]# cat /etc/inittab # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode # 4 - unused # 5 - X11 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: 默认启动级别
CentOS 6 /etc/inittab和相关文件
/etc/inittab:设置系统默认的运行级别
id:3:initdefault:
/etc/init/control-alt-delete.conf
/etc/init/tty.conf
/etc/init/start-ttys.conf
/etc/init/rc.conf
/etc/init/prefdm.conf
CentOS 5 的inittab文件:
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行一次;
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定
/etc/rc.d/rc.sysinit
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc0
l1:1:wait:/etc/rc.d/rc1…
l6:6:wait:/etc/rc.d/rc6
/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) 清理操作
注意:
正常级别下,最后启动一个服务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,关于模块:/etc/modprobe.conf
2,关于服务的相关配置文件:/etc/sysconfig/*
authconfig:设置用户的身份认证的机制
clock:设置主机的时区。在clock文件内设置选项“ZONE”所参考的时区位于 /usr/share/zoneinfo 目 录下的相对路径中
i18n:设置语序
keyboard&mouse:设置键盘与鼠标
network:是否要启动网络
network-scripts:设置网卡
Run level 的切换:
与run level有关的启动是在/etc/rc.d/rc.sysinit执行完毕后。run level的不同仅是/etc/rc[0-6].d里面启动服务不同而已。
1,要每次启动都执行某个默认的 run level ,则需修改/etc/inittab 内的设置选项,即是 "id:5:initdefault: 里面的数字
2,如果仅是暂时更改系统的 run level 时,则使用 inint[0-6] 来进行 run level 的更改,但下次重启时,依旧会是以 /etc/ininttab 的设置为准
当执行 init3 时,系统会:
1),先比较/etc/rc3.d 及 /etc/rc5.d 内的K与S开头的文件
2),在新的 run level 即是 /etc/rc3.d 内有多的K开头的文件,则给予关闭
3),在新的 run level 即是 /etc/rc3.d 内有多的S开头的文件,则给予开启
[root@CentOS 7 ~]# runlevel 查询当前系统的运行级别 N 5 由于之前没切换过 runlevel,因此前一个runlevel 不存在(N) [root@CentOS 7 ~]# init 3 切换运行级别 5 3 前一个是 runlevel 5, 目前是 runlevel 3
二、在CentOS 5 6 上破解root的口令
只要能够进入并且挂载 /,然后重新设置下root的密码,就可以救回来。这是因为在启动流程中,若强制内核进入runleverl 1,默认是不需要密码即可取得一个root的shell来救援
操作流程:
1,重新启动系统
2,启动进入grub菜单后,在你要进入的菜单上面按‘e’键进入详细设置;将光标移动kernel上方并按‘a’键进入编辑界面;然后出现如下界面来处理:
按键的描述:
重点是那个特殊字体(在rhgb后面加上1, s, S, single都可以)按下[enter]就能够启动进入单用户 维护模式了。
3,进入单用户维护模式后,系统会以root的权限直接给你一个shell,此时你就能够执行“passwd”这个命令来重设root的密码。然后直接执行“init 5”就可以切换成为X窗口或“init 3”进入纯字符界面或者直接“reboot”.
4,又恢复到熟悉的界面:
三、在Centos 5 6 编写服务脚本:
要实现开机启动后自动运行脚本,则需要用到chkconfig命令
查看服务在所有级别的启动或关闭设定情形:
chkconfig[–list] [name]
SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)
添加:chkconfig–add name
格式:
#!/bin/bash
#LLLL 表示初始在哪个级别下启动,-表示都不启动
# chkconfig: LLLL nnnn
删除:chkconfig–del name
修改指定的链接类型:
chkconfig[–level levels] name <on|off|reset>
–level LLLL: 指定要设置的级别;省略时表示2345
示例:
[root@CentOS 6 init.d]# cat testservice #!/bin/bash # chkconfig:35 88 22 必须给出,指定在哪个级别下运行该服务 # description: test service 描述 prog=$(basename $0) lockfile=/var/lock/subsys/$prog start() { if [ -f $lockfile ];then echo "$prog is running yet." else touch $lockfile [ $? -eq 0 ] && echo "start $prog finished" fi } stop() { if [ -f $lockfile ];then rm -f $lockfile [ $? -eq 0 ] && echo "stop $prog finished" else echo "$prog is not running" fi } restart() { if [ -f $lockfile ];then rm -f $lockfile touch $lockfile echo "start $prog finished" fi } status() { if [ -f $lockfile ];then echo "$prog is running" else echo "$prog is stopped" fi } usage() { echo "usage:$prog {start|stop|restart|status}" } case $1 in start) start;; stop) stop;; restart) stop start;; status) status;; *) usage exit 1;; esac [root@CentOS 6 init.d]# chmod u+x testservice [root@CentOS 6 init.d]# chkconfig --add testservice [root@CentOS 6 init.d]# chkconfig --list testservice testservice 0:off1:off2:off3:on4:off5:on6:off [root@CentOS 6 init.d]#ll /etc/rc.d/rc*.d/*test* lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc0.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc1.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc2.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc3.d/S88testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc4.d/K22testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc5.d/S88testservice -> ../init.d/testservice lrwxrwxrwx 1 root root 21 Sep 18 17:42 /etc/rc.d/rc6.d/K22testservice -> ../init.d/testservice [root@CentOS 6 ~]#service testservice start start testservice finished [root@CentOS 6 ~]#service testservice stop stop testservice finished [root@CentOS 6 ~]#service testservice status testservice is stopped [root@CentOS 6 ~]#service testservice s usage:testservice {start|stop|restart|status}
总结:
作业:
1、每周2, 4, 7备份/var/log/messages文件至/logs目录中,文件名形如“messages-yyyymmdd”
* * * * 2,4,7 cp -f /var/log/messages /logs/mesages-`date +\%Y\%m\%d
2、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中
* 2 * * * /bin/egrep '^[S|M]' /proc/meminfo >> /tmp/meminfo.txt
原创文章,作者:pingsky,如若转载,请注明出处:http://www.178linux.com/45697