CentOS 6 系统启动流程

一、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’键进入编辑界面;然后出现如下界面来处理:

wKioL1fRaSKzUx5lAAAGc_n8xiE406.png

  按键的描述:

wKiom1fRaE3TUaJAAAAKdGIuWIg753.png

  重点是那个特殊字体(在rhgb后面加上1, s, S, single都可以)按下[enter]就能够启动进入单用户   维护模式了。

wKiom1fRaTihviBXAAASZQ6ndr8183.png

3,进入单用户维护模式后,系统会以root的权限直接给你一个shell,此时你就能够执行“passwd”这个命令来重设root的密码。然后直接执行“init 5”就可以切换成为X窗口或“init 3”进入纯字符界面或者直接“reboot”.

wKiom1fRaXLxXjxfAAAUydZiHhs360.png

4,又恢复到熟悉的界面:

wKioL1fSOjzxTXgYAAAFvyhByj4590.png


三、在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}


总结:

wKiom1fVFW2zMFtaAADjN2Tg7hc561.png

作业:

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

(0)
pingskypingsky
上一篇 2016-09-12
下一篇 2016-09-12

相关推荐

  • 计算机的组成及其功能

    <p> Debian     基于Debian二次开发的:Ubuntu RedHat 不同的发行版都是基于linux内核进行二次开发而来。 查看内核版本命令: uname -r [root@localhost ~]# uname -r 3.10.0-327.18.2.el7.x86<em>64 查看发行版本命令: …

    Linux干货 2016-06-23
  • 马哥教育网络班20期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 cp -r /etc/skel/ /home/tuser1 chmod o-rwx /home/tuser1/.* 2、编辑/etc/group文件,添加组hadoop。 e…

    Linux干货 2016-06-26
  • 文件查找

        Linux上的所有资源都以文件的形式存在,如果是手工查找的话,势必会浪费太多的时间,这里推荐俩款大家用于查找的工具。 文件查找    文件查找经常用到的俩款软件,locate和find    二者区别 locate:1) 非实时查找;    &nbsp…

    Linux干货 2016-08-18
  • 创建目录树

    创建目录树 [wing@bogon ~]$ mkdir -pv /tmp/mylinux/{bin,boot/grub,dev,etc/{rc.d/init.d,\ sysconfig/network-scripts},\ lib/modules,lib64,proc,sbin,sys,tmp,usr/local{bin,sbin},\ var/{lock,…

    Linux干货 2017-07-24
  • 正则表达式与例题

    正则表达式与例题  一BRE 和ERE 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能 程序支持:grep ;sed ;  awk ; vim ; less ; nginx ; varnish 元字符分类:字符匹配  匹配次数  位置锚定  分组 二.基…

    Linux干货 2017-07-29
  • 第7天:磁盘文件管理

    http://note.youdao.com/yws/public/redirect/share?id=57ab13d4749920de1fbb0d4953fcd21b&type=false

    Linux干货 2016-08-18