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

相关推荐

  • 文件的查找与压缩归档

    文件的查找与压缩归档 locate find 压缩与归档 locate 主要用途 查询系统上预建的文件索引数据库 locate – find files by namelocate [OPTION]… PATTERN… locate查询文件时,会去搜索/var/lib/mlocat…

    Linux干货 2016-08-21
  • Linux 第五天: (08月01日) Linux用户组管理

    Linux 第五天: (08月01日) Linux用户组管理         管理员 root,0普通用户 1-65535系统用户 1-499(centos6), 1-999(centos7)登录用户 500(centos6)+, 1000(centos7)+   /etc/passwd 用户及属性/etc/…

    Linux干货 2016-08-08
  • 程序包管理yum

    YUM: YellowdogUpdate Modifier,rpm的前端程序,用来解决软件包相关依赖性,可以在多个库之间定位软件包 存储了众多rpm包,以及包的相关的元数据文件(放置于特定目录下:repodata) 文件服务器:     ftp://     http:// &n…

    Linux干货 2016-08-23
  • 学习宣言~~

    学如逆水行舟,不进则退。

    Linux干货 2016-12-26
  • Linux系统性能工具

    linux中几款常用的系统性能分析工具: 1.vmstat命令 解释: 虚拟内存信息 用法: vmstat [options] [delay [count]] vmstat 2 5 //每2秒刷新一次,一共刷新5次 输出属性: procs: r:可运行(正运行或等待运行)进程的个数,和核心数有关 b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度) mem…

    Linux干货 2017-12-19
  • linux初学

    计算机的组成及其功能。现代计算机体系将计算机分为控制器、运算器、存储器、输入设备和输出设备5个部分控制器:控制器是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,并根据具体要求进行控制、调度程序、数据、地址,协调计 算机各个部分工作,协调计算机各部分工作及内存、IO设备等的访问运算器:运算器是对数据进行各种算数运算和逻辑运算也就是对数据进行加工,…

    Linux干货 2018-02-25