zoukankan      html  css  js  c++  java
  • 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运行级别有哪些?怎么查看修改运行级别?

  • 相关阅读:
    容器跨主机网络通信学习笔记(以Flannel为例)
    Kubernetes控制器Job和CronJob
    记一次使用Flannel插件排错历程
    Kubernetes控制器Deployment
    Kubernetes如何通过StatefulSet支持有状态应用?
    react18 来了,我 get 到...
    gojs 实用高级用法
    vuecli3 vue2 保留 webpack 支持 vite 成功实践
    calibre 报错 This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem. 解决
    unable to recognize "*.yaml": no matches for kind "RoleBinding" in version "rbac.authorization.k8s.io/v1beta1"
  • 原文地址:https://www.cnblogs.com/harrymore/p/8616156.html
Copyright © 2011-2022 走看看