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)
上一篇 2016-09-12 05:47
下一篇 2016-09-12 08:03

相关推荐

  • 浅谈RPM

    浅谈RPM    [先絮叨下编译啊]   1、 库:其实就是一个程序模块(它没有执行入口,不能独立执行,只能被能独立运行的程序调用时执行)你可以把它想象成工具螺丝刀,可执行的程序是就是你自己;螺丝刀能自己干活吗?没有螺丝刀能拧螺丝吗?或者说你现在制作一个? 螺丝刀可以实现这个功能但需要你来执行这个动作。   2、静态编译:将程序所需要的所有的库都编…

    Linux干货 2015-04-27
  • Apache运行机制剖析

    1. B/S交互过程 浏览器(Browser)和服务器(Web Server)的交互过程:   1、  浏览器向服务器发出HTTP请求(Request)。 2、  服务器收到浏览器的请求数据,经过分析处理,向浏览器输出响应数据(Response)。 3、  浏览器收到服务器的响应数据,经过分析处理,将最终结果显示在浏览…

    Linux干货 2015-04-10
  • 联通电信双链路内网VRRP+BFD&&PPTP+MYSQL+FreeRadius实现IDC堡垒机连接IDC机房

    一、具体需求与实现 1、多wan:两条宽带接入链路,使用VRRP+BFD技术,实现链路冗余; 2、IDC机房远程管理和登录限制:使用PPTP+freeRadius+mysql实现VPN,限制指定网段或IP进行拨号认证登录IDC机房,并编写脚本检查非法用户登录IDC机房服务器情况; 3、内网VLAN划分:利于安全管理、IP分流和带宽限制; 4、内网监控:使用N…

    Linux干货 2016-08-22
  • 总考十分的学习宣言

    目标:按照学习线路图完成所有视频的学习,完成每一次的博客作业及云学堂考试,成功转型互联网运维。 宣言:我一定要转型互联网运维工程师,并在这个领域不断坚持耕耘下去,成为行业的专家,拿高薪,挣so much money,可以有钱去看看世界,去台湾环岛,去日本爬天空树,去北欧看极光,去南极看企鹅,去看盐湖和大象,去非洲看动物迁徙。一生的时间是有限的,在有限的时间里…

    Linux干货 2016-10-24
  • 六.Linux博客-2016年8月2日用户、权限

    格式说明: 操作 概念 命令 说明及举例 六.用户、权限 创建用户、修改用户、删除用户 useradd 创建一个用户 useradd -r 创建系统用户,系统用户不创建家目录 useradd -D /etc/default/useradd 默认设置配置文件 newusers +文件 批量创…

    Linux干货 2016-08-24
  • 网络管理

    网络概念 网络应用程序 Web 浏览器(Chrome、IE、Firefox等) 即时消息(QQ、微信、钉钉等) 电子邮件(Outlook、foxmail 等) 协作(视频会议、VNC、Netmeeting、WebEx 等) web网络服务(apache,nginx,IIS) 文件网络服务(ftp,nfs,samba) 数据库服务( MySQL,MariaDB…

    Linux干货 2017-05-06