(来源学习Linux时,自己做的笔记)

Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理:
1。在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
     对于以K开头的文件,系统将终止对应的服务
     对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统
    由于现在的Linux系统安装完后就运行在第5个级别,即系统启动后直接进入图形界面,而不用在字符模式下登录后用startx或者xinit 来起动图形界面。建议在系统安装完成后把系统的默认运行等级设置在第3级,在字符终端登录后,再手工输入startx 命令起动图形界面。可以用如下的方法修改:
用文本编辑器修改 /etc/inittab文件,把代码:
id:5:initdefault:这一行,修改成
代码:
id:3:initdefault:保存后就reboot重起,系统就默认起动到字符界面。不同运行级别之间的 差别的在于系统默认起动的服务的不同,如运行级别3默认不启动X图形界面服务,而运行级别5 却默认起动。本质上是没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用init 命令来切换到其他运行级别。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Linux系统引导流程
*开机自检
*MBR引导
*
GRUB
*加载linux内核和image映像
*
INIT进程初始化
-------------------
流程简介
1. 加载 BIOS 的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备;
2. 读取并执行第一个开机设备内 MBR 的 boot Loader(grub 等程序);
3. 依据 boot loader 的设置加载 Kernel,Kernel 会开始检测硬件与加载驱动程序;
4. 内核启动 init;
5. 系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit);
6. init 找到/etc/inittab 文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel);
7. 触发相应的 runlevel 事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL);
8. 开始运行/etc/rc.d/rc,传入参数 X;
9. /etc/rc.d/rc 脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本;
10. /etc/rcX.d/中的脚本按事先设定的优先级依次启动;
11. 最后执行/etc/rc.d/rc.local;
12. 加载终端或 X-Window 接口。
------------------------------

一、开机流程

1. Power on开启电源
-----
2. 启动主板上的BOIS,初始化硬件:init是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是 1
init进程有以下
两个作用
1) init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所有系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况,此时那些失去父进程的子进程就都会以init作为它们的父进程
2) init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别

init的工作是根据/etc/inittable 来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块、设置网络
-------------------
/etc/inittable只实现开机的运行级别
/etc/rc.d/rc.sysinit:由init执行的第一个脚本

init在一开始会先判断所要进入的runlevel为1~6的哪一种模式,跟着就直接进入rc.sysinit文件设置大部分和系统相关的环境。
rc.sysinit完成设置网络、主机名、加载文件系统等初始化工作
1) 获取网络环境和主机类型
首先读取网络配置文件/etc/sysconfig/network,获取主机名称与默认网关(GATEWAY)等网络环境
2) 测试与载入内存设备/proc及USB设备/sys
除载入内存设备/proc之外,还会主动检测系统上是否有USB的设备,若有,则会主动加载USB设备的驱动程序,并且尝试载入USB的文件系统
3) 决定是否启动SELINUX
4) 接口设备的检测与即插即用(PnP)参数测试
5) 用户自定义模块的加载
用户可以在/etc/sysconfig/modules/*.modules 加入自定义的模块,此时会加载到系统中
6) 加载核心的相关配置
系统会自动去读取/etc/sysctl.conf文件的设置值,使核心功能复合我们的要求
7) 设置系统时间(clock)
8) 设置终端控制台(console)的字形
9) 设置RAID和LVM等硬盘功能
10) 以FSCK检验磁盘文件系统
11) 进入磁盘配额 quota 功能(非必要)
12) 重新以可读取模式载入系统磁盘
13) 启动 quota功能
14) 启动系统随机数设备
15) 清除启动过程中的临时文件
16) 将启动相关信息加载到/var/log/dmesg文件中

/var/log/dmesg文件中能查看到系统开机的一系列流程
[root@lcl ~]# dmesg | more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gc
c version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 ED
T 2012
Command line: ro root=UUID=d43052a2-de68-41ae-9bc1-4de0e3c379d3 rd_NO_LUKS KEYB
OARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_
NO_DM rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
...
------------------------------------------
重启后出现error15,表明stage1,stage1_5,stage2被破坏
-------------------------
删除内核镜像文件和初始化虚拟磁盘文件,下图是重启后出现的现象
修复
先mount /dev/cdrom /mnt
---------------------
系统启动硬件信息
1./etc/rc.d/rc.sysinit
*由init进程调用执行
*完成设置网络、主机名、加载文件系统等初始化工作

2./etc/rc.d/rc脚本文件
*由init进程调用执行
*根据指定的运行级别,加载或终止相应的系统服务

3.红帽企业版linux服务脚本位于/etc/rc.d/init.d中
4. /etc/rc.d/rcn.d目录中
包含运行级别n执行服务状态配置的符号连接

/init = /bin/bash

Linux系统有7个运行级别(runlevel)
运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆
运行级别2:多用户状态(没有NFS)
运行级别3:完全的多用户状态(有NFS),登陆后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登陆后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

运行级别的原理:
1。在目录/etc/rc.d/init.d下有许多服务器脚本程序,一般称为服务(service)
2。在/etc/rc.d下有7个名为rcN.d的目录,对应系统的7个运行级别
3。rcN.d目录下都是一些符号链接文件,这些链接文件都指向init.d目录下的service脚本文件,命名规则为K+nn+服务名或S+nn+服务名,其中nn为两位数字。
4。系统会根据指定的运行级别进入对应的rcN.d目录,并按照文件名顺序检索目录下的链接文件
     对于以K开头的文件,系统将终止对应的服务
     对于以S开头的文件,系统将启动对应的服务
5。查看运行级别用:runlevel
6。进入其它运行级别用:init N
7。另外init0为关机,init 6为重启系统
    由于现在的Linux系统安装完后就运行在第5个级别,即系统启动后直接进入图形界面,而不用在字符模式下登录后用startx或者xinit 来起动图形界面。建议在系统安装完成后把系统的默认运行等级设置在第3级,在字符终端登录后,再手工输入startx 命令起动图形界面。可以用如下的方法修改:
用文本编辑器修改 /etc/inittab文件,把代码:
id:5:initdefault:这一行,修改成
代码:
id:3:initdefault:保存后就reboot重起,系统就默认起动到字符界面。不同运行级别之间的 差别的在于系统默认起动的服务的不同,如运行级别3默认不启动X图形界面服务,而运行级别5 却默认起动。本质上是没有区别的,更无所谓不同级别间功能强弱的问题。用户完全可自给定义不同级别的默认服务。在任何运行级别,用户都可用init 命令来切换到其他运行级别。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*Linux系统引导流程
*开机自检
*MBR引导
*
GRUB
*加载linux内核和image映像
*
INIT进程初始化
-------------------

流程简介
1. 加载 BIOS 的硬件信息、进行自我测试,并依据设定获得第一个可开机的设备;
2. 读取并执行第一个开机设备内 MBR 的 boot Loader(grub 等程序);
3. 依据 boot loader 的设置加载 Kernel,Kernel 会开始检测硬件与加载驱动程序;
4. 内核启动 init;
5. 系统初始化:(/etc/init/rcS.conf exec /etc/rc.d/rc.sysinit);
6. init 找到/etc/inittab 文件,确定默认的运行级别(X) (/etc/init/rcS.conf exec telinit $runlevel);
7. 触发相应的 runlevel 事件(/etc/init/rc.conf exec /etc/rc.d/rc $RUNLEVEL);
8. 开始运行/etc/rc.d/rc,传入参数 X;
9. /etc/rc.d/rc 脚本进行一系列设置,最后运行相应的/etc/rcX.d/中的脚本;
10. /etc/rcX.d/中的脚本按事先设定的优先级依次启动;
11. 最后执行/etc/rc.d/rc.local;
12. 加载终端或 X-Window 接口。
------------------------------

一、开机流程

1. Power on开启电源
-----
2. 启动主板上的BOIS,初始化硬件:init是所有进程的发起者和控制者。因为在任何基于Linux的系统中,它都是第一个运行的进程,所以init进程的编号(PID)永远是 1
init进程有以下
两个作用
1) init进程的第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所有系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况,此时那些失去父进程的子进程就都会以init作为它们的父进程
2) init的第二个作用是在进入某个特定的运行级别时运行相应的程序,以此对各种运行级别

init的工作是根据/etc/inittable 来执行相应的脚本,进行系统初始化,如设置键盘、字体、装载模块、设置网络
-------------------

/etc/inittable只实现开机的运行级别
/etc/rc.d/rc.sysinit:由init执行的第一个脚本

init在一开始会先判断所要进入的runlevel为1~6的哪一种模式,跟着就直接进入rc.sysinit文件设置大部分和系统相关的环境。
rc.sysinit完成设置网络、主机名、加载文件系统等初始化工作
1) 获取网络环境和主机类型
首先读取网络配置文件/etc/sysconfig/network,获取主机名称与默认网关(GATEWAY)等网络环境
2) 测试与载入内存设备/proc及USB设备/sys
除载入内存设备/proc之外,还会主动检测系统上是否有USB的设备,若有,则会主动加载USB设备的驱动程序,并且尝试载入USB的文件系统
3) 决定是否启动SELINUX
4) 接口设备的检测与即插即用(PnP)参数测试
5) 用户自定义模块的加载
用户可以在/etc/sysconfig/modules/*.modules 加入自定义的模块,此时会加载到系统中
6) 加载核心的相关配置
系统会自动去读取/etc/sysctl.conf文件的设置值,使核心功能复合我们的要求
7) 设置系统时间(clock)
8) 设置终端控制台(console)的字形
9) 设置RAID和LVM等硬盘功能
10) 以FSCK检验磁盘文件系统
11) 进入磁盘配额 quota 功能(非必要)
12) 重新以可读取模式载入系统磁盘
13) 启动 quota功能
14) 启动系统随机数设备
15) 清除启动过程中的临时文件
16) 将启动相关信息加载到/var/log/dmesg文件中

/var/log/dmesg文件中能查看到系统开机的一系列流程
[root@lcl ~]# dmesg | more
Initializing cgroup subsys cpuset
Initializing cgroup subsys cpu
Linux version 2.6.32-279.el6.x86_64 (mockbuild@x86-008.build.bos.redhat.com) (gc
c version 4.4.6 20120305 (Red Hat 4.4.6-4) (GCC) ) #1 SMP Wed Jun 13 18:24:36 ED
T 2012
Command line: ro root=UUID=d43052a2-de68-41ae-9bc1-4de0e3c379d3 rd_NO_LUKS KEYB
OARDTYPE=pc KEYTABLE=us rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_NO_LVM rd_
NO_DM rhgb quiet
KERNEL supported cpus:
Intel GenuineIntel
AMD AuthenticAMD
Centaur CentaurHauls
BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
...
------------------------------------------
重启后出现error15,表明stage1,stage1_5,stage2被破坏
-------------------------
删除内核镜像文件和初始化虚拟磁盘文件,下图是重启后出现的现象

修复
先mount /dev/cdrom /mnt

---------------------
系统启动硬件信息
1./etc/rc.d/rc.sysinit
*由init进程调用执行
*完成设置网络、主机名、加载文件系统等初始化工作

2./etc/rc.d/rc脚本文件
*由init进程调用执行
*根据指定的运行级别,加载或终止相应的系统服务

3.红帽企业版linux服务脚本位于/etc/rc.d/init.d中
4. /etc/rc.d/rcn.d目录中
包含运行级别n执行服务状态配置的符号连接



/init = /bin/bash

Linux系统开机启动流程的更多相关文章

  1. Linux系统的启动流程

    Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...

  2. Linux的开机启动流程

    Linux的开机启动流程 1.开机BIOS自检                                             --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...

  3. linux系统的启动流程梳理

    1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...

  4. 2021年3月-第01阶段-Linux基础-Linux系统的启动流程

    Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...

  5. Linux系统开机启动时的工作原理

    Linux系统开机启动时的工作原理也是深入了解Linux系统核心工作原理的一个很好的途径. 启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至 ...

  6. 原创:四种Linux系统开机启动项优命令超给力超详细详解

    老葵花哥哥又开课了 接下来是你们的齐天大圣孙悟空给你们带来的详细版Linux系统开机启动优化四种命令 第一种方法是很正常的 第二种有点难理解 第三种来自我的一个奇思妙想 本文档秉承 不要钱也不要臀部的 ...

  7. Linux 系统开机启动项清理

    一般情况下,常规用途的 Linux 发行版在开机启动时拉起各种相关服务进程,包括许多你可能无需使用的服务,例如蓝牙bluetooth.Avahi. 调制解调管理器ModemManager.ppp-dn ...

  8. [转] 浅谈Linux系统的启动流程

    原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...

  9. 浅谈Linux系统的启动流程

    Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件:  /boot/grub/grub.con ...

随机推荐

  1. Windows快捷键大全(从XP到win8.1)

    常见用法 F1 显示当前程序或者windows的帮助内容. F2 当你选中一个文件的话,这意味着“重命名” F3 当你在桌面上的时候是打开“查找:所有文件” 对话框 F5 刷新 F10或ALT 激活当 ...

  2. 简单hash[或者是哈希思想]

    题目链接 /* 有一个长度为n的只包含小写字母的字符串s,有m次操作,每次输入2个字符 A , B表示将s中的全部字符A变成B,B变成A. char sky[30],顺序记录每个字母的映射,在sky[ ...

  3. POJ 3468<线段树,区间add>

    题目连接 //位运算 k<<1 相当于 k*2 k<<1|1 相当于 k*2+1 /* 修改区间内的值,并且维护区间和. 详见代码 */ #include<cstdio& ...

  4. java 数据结构 栈的实现

    java数据结构之栈的实现,可是入栈,出栈操作: /** * java数据结构之栈的实现 * 2016/4/26 **/ package cn.Link; public class Stack{ No ...

  5. IDA_Python命令行使用

    Python>import idaapi Python>hex(idaapi.get_first_cref_from(here()))

  6. GameUnity 2.0 发布倒计时

    万众期待的 gameunity 网络游戏框架 已经完成了,现在在最后的检验调试阶段. 因为版本 改动非常之大,所以 版本号 从0.2版本 改成 2.0版本. gameunity事件部分,一如既往保持高 ...

  7. linker command failed with exit code 1 (use -v to see invocation)修改方法

    它的意思是指文件丢失或者文件重复,你就要仔细查看项目中有没有重复的文件,如有重复修改即可,如果是文件丢失,那就麻烦啦!你需要根据报错的地方进行修补文件,最为直接的方法是重新创建项目.还有另外一种情况是 ...

  8. HDOJ--ACM-Steps--2.1.3--Cake(GCD,简单数学)

    一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. Input 每行有两个数p和q ...

  9. HDU 4635 Strongly connected(强连通分量缩点+数学思想)

    题意:给出一个图,如果这个图一开始就不是强连通图,求出最多加多少条边使这个图还能保持非强连通图的性质. 思路:不难想到缩点转化为完全图,然后找把它变成非强连通图需要去掉多少条边,但是应该怎么处理呢…… ...

  10. Windows API 之 OpenProcessToken、GetTokenInformation

    The following example uses the OpenProcessToken and GetTokenInformation functions to get the group m ...