一、启动过程

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控制主机

如下图:

2. 获取运行等级

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

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

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

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

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

它们都是以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文件:

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

三、总结

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

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

四、参考

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

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

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

linux系统启动过程及运行等级详解的更多相关文章

  1. ASP.NET 运行时详解 揭开请求过程神秘面纱

    对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛开乌云见晴天,接下来就 ...

  2. CentOS Linux使用crontab运行定时任务详解

    参考博文: (总结)CentOS Linux使用crontab运行定时任务详解

  3. Linux设置程序开机自启动,系统命令chkconfig及linux /etc/rc.d/目录的详解

     整理了linux下程序开启几种方式,转载相关博客做统一记录 <linux程序设置开机自启动>转载自:https://www.cnblogs.com/flcz/p/7691532.html ...

  4. Linux C 语言之 Hello World 详解

    目录 Linux C 语言之 Hello World 详解 第一个 C 语言程序 程序运行原理 编译,链接 运行时 链接库 编译器优化 Hello World 打印原理 stdout, stdin 和 ...

  5. 云计算:Linux运维核心管理命令详解

    云计算:Linux运维核心管理命令详解 想做好运维工作,人先要学会勤快: 居安而思危,勤记而补拙,方可不断提高: 别人资料不论你用着再如何爽那也是别人的: 自己总结东西是你自身特有的一种思想与理念的展 ...

  6. Oracle 11g客户端在Linux系统上的配置步骤详解

    Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...

  7. Linux Bash命令关于程序调试详解

    转载:http://os.51cto.com/art/201006/207230.htm 参考:<Linux shell 脚本攻略>Page22-23 Linux bash程序在程序员的使 ...

  8. Linux中Nginx安装与配置详解

    转载自:http://www.linuxidc.com/Linux/2016-08/134110.htm Linux中Nginx安装与配置详解(CentOS-6.5:nginx-1.5.0). 1 N ...

  9. Linux Shell编程与编辑器使用详解

    <Linux Shell编程与编辑器使用详解> 基本信息 作者: 刘丽霞 杨宇 出版社:电子工业出版社 ISBN:9787121207174 上架时间:2013-7-22 出版日期:201 ...

随机推荐

  1. [LeetCode系列]最大连续子列递归求解分析

    本文部分参考Discuss: LeetCode. 步骤1. 选择数组的中间元素. 最大子序列有两种可能: 包含此元素/不包含. 步骤2. 步骤2.1 如果最大子序列不包含中间元素, 就对左右子序列进行 ...

  2. JVM内存管理之垃圾搜集器简介

    引言 上一章我们已经探讨过GC的各个算法,那么垃圾搜集器是什么呢? 通俗的讲,使用编程语言将算法实现出来,产生的程序就是垃圾搜集器了.既然谈到了编程语言的实现,那么在讨论垃圾搜集器的时候,就已经涉及到 ...

  3. 32位centos下安装jdk1.7报Permission denied处理方式

    本文转载自:http://blog.csdn.net/snowwhitewolf/article/details/50287877 环境:centos5.8 32位jdk-7u71-Linux-i58 ...

  4. java web 程序---登陆验证注销/重定向session_login.jsp/

    思路:第一个页面是:session_login.页面,一个form表单,一个脚本,输入的名称不为空,不,则重定向 到welcome.jsp页面.否则,显示登陆失败,请输入登陆名称: 第二个页面,是we ...

  5. java代码---------打印正三角形

    总结:手打一遍 public class aaa{ public static void main(String []args){ for(int i=1;i<10;i++){ for(int ...

  6. i2c驱动程序全面分析,从adapter驱动程序到设备驱动程序

    开发板    :mini2440 内核版本:linux2.6.32.2 驱动程序参考:韦东山老师毕业班i2c 内容概括: 1.adapter client 简介    2.adapter 驱动框架   ...

  7. ALSA声卡08_从零编写之框架_学习笔记

    1.整体框架 (1)图示((DAI(全称Digital Audio Interface)接口)) 在嵌入式系统里面,声卡驱动是ASOC,是在ALSA驱动上封装的一层,包括以下三大块 (2)程序框架 m ...

  8. 【BZOJ】1878: [SDOI2009]HH的项链 (主席树)

    题目 传送门:QWQ 分析 莫队也能做,但我想练练主席树. 求k-th一样维护第i个时候的线段树,线段树来维护区间不同数. 然后查询时可以通过上下界小优化一波. 但是我的代码丑陋无比,常数巨大(捂脸 ...

  9. Clustering Factor——索引的成本指标

    使用索引是我们面对海量数据搜索是一种常用的手段.通过有效的索引访问,可以使我们更快的访问到需要的数据,减少物理.逻辑IO,从而提高系统性能.在CBO时代,Oracle对于提交SQL的执行路径是有所选择 ...

  10. struts2的搭建和简单的例子(采用struts-2.5.2版本)

    struts框架的概述: 当2001年初,Struts的第一个版本在apache网站上发布,它提供了一种分离视图和业务应用逻辑的web应用方案. 在Struts诞生之前,开发人员都是在jsp里写入处理 ...