• linux系统启动过程及运行等级详解


    一、启动过程

    1. 开机流程简述

    1)加载BIOS硬件信息,并获取第一个启动设备的代号

    2)读取第一个启动设备的MBR的引导加载程序的启动信息

    3)加载核心操作系统的核心信息,核心开始解压缩,并且尝试驱动所有硬件设备

    4)核心执行init程序并获取运行信息

    5)init执行/etc/rc.d/rc.sysinit文件

    6)启动核心的外挂模块(/etc/modprobe.conf)

    7init执行运行的各个批处理文件(Script

    8)init执行/etc/rc.d/rc.local

    9)执行/bin/login程序,等待用户登录

    10)登录之后开始以shell控制主机

    如下图:

    clip_image002

    2. 获取运行等级

    在第4步中,init是系统第一个执行的程序(PID1,它读取文件/etc/inittab来获取运行等级(Run level,后面它就是通过这个运行等级的设置值来启动不同的服务项目的。

    3. 根据运行等级启动脚本

    在第7步中,init根据前面获取的运行等级,来启动相关的服务。那么服务脚本存放在哪里呢?

    服务脚本根据运行等级N存放在/etc/rc.d/rcN.d目录中,如下图所示:

    clip_image004

    选其中一个目录,如rc3.d查看一下里面的文件,可以发现里面都是链接文件:

    clip_image006

    它们都是以K或者S为开头的文件,链接到/etc/rc.d/init.d里的shell脚本。这些脚本都使用case…esac语法,而且支持的变量($1)主要有startstop,一般来说,如果想要启动一些服务,譬如sysstat,需要使用:

    /etc/rc.d/init.d/sysstat start

    如果关闭该服务,就使用:

    /etc/rc.d/init.d/sysstat stop

    所以要在运行等级3下执行某个服务,就要将其写入/etc/rc.d/rc3.d中,但既然服务已经在/etc/rc.d/init.d(为了方便,系统建了一个符号链接/etc/init.d指向了/etc/rc.d/init.d)里建好了,自然可以使用链接方式链接到/etc/rc.d/init.d/内的相关shell脚本,不过考虑到start或stop变量,就有了S和K开头的文件名了。

    另外,不同的服务有可能是相关联的,譬如,要启动WWW服务,总需要网络,所以/etc/rc.d/init.d/network就需要先启动,于是系统通过在S或K后面接一个数字来表示执行权限,以决定执行顺序。总结一下:

    · 在/etc/rc.d/rcN.d内以S开头的文件,为开机时需要启动的服务

    · 在目录中以K开头的文件,为关机时需要关闭的服务

    · S和K后面接的数字,表示该文件的执行权限,数字越小权限越大,越早被执行

    二、运行等级

    1. linux7个运行等级

    · 0 - halt:系统关机,默认运行等级不能设为0,否则不能正常启动

    · 1 - single user mode:单用户维护模式,root权限,用于系统维护,禁止远程登陆

    · 2 - Multi-user,without NFS:多用户模式,和等级3类似(没有NFS)

    · 3 - Full multi-user mode:完整的含有网络功能的多用户纯文本模式

    · 4 - unused:系统未使用,保留给用户自定义

    · 5 - X11:与等级3类似,但使用X Windows

    · 6 - reboot:重新启动,默认运行等级不能设为6,否则不能正常启动

    2. 查看当前运行等级

    使用runlevel命令,结果会显示两个数字,第一个数字表示前一个运行等级,第二个表示当前运行等级,如果没切换过,则第一个数字显示为N

    3. 临时切换运行等级

    使用命令init RunLevel,RunLevel为你需要切换的运行等级。但重启后恢复原来的运行等级。

    另外,如果系统安装了X-Windows,而且当前运行等级不是5,可以直接输入startx开启图形界面,但是奇怪的是并不影响当前运行等级(笔者的系统是centos6.5系统)。

    4. 修改默认运行等级

    编辑 /etc/inittab文件:

    clip_image008

    将id后面的数字改为你需要的运行等级,保存,重启。

    三、总结

    本文主要想理清楚的其实是运行等级执行权限这些在linux系统中起到的作用,所以开篇简单的讲述了一下开机流程,然后抓其中的两个步骤,讲解系统如何根据运行等级组织脚本文件,并通过执行权限去执行相应的服务脚本,最后深入讲述运行等级的具体意义,以及改变运行等级的方法。

    在这里声明一下,本文讲的开机过程根据不同的系统会有一定的差异(特别是centos7.x系统),但是本质上还是这一套思路。

    四、参考

    1.《鸟哥的linux私房菜》(第二版)

    2. Linux启动顺序、运行级别及开机启动

    3. Linux运行级别有哪些?怎么查看修改运行级别?

  • 相关阅读:
    shell安装kettle
    shell安装jdk
    shell脚本之系统初始化设置(设置selinux、设置ulimit、设置firewalld、设置time_zone)
    关闭防火墙
    todo的使用
    Android Dagger2.0 学习一下
    Android零碎知识点
    windows7 服务中上找不到mysql
    AS 3.1 多library合并打包成aar的正确方式(fat-aar)
    Alexander的Python机器学习 之目录分析。
  • 原文地址:https://www.cnblogs.com/harrymore/p/8616156.html
Copyright © 2020-2023  润新知