一、系统启动流程

一般来说,Linux 系统的启动流程是这样的:

1. 开机之后,位于计算机主板 ROM 芯片上的 BIOS 被最先读取,在进行硬件和内存的校验以及 CPU 的自检没有异常后, BIOS 将被加载到内存中。

2. BIOS 按照其设置的设备启动顺序,依次尝试加载含有 MBR 信息的可启动设备(一般是硬盘,可设置),然后将控制权交给 MBR 中的 Bootloader(引导程序)。

3. Linux 中使用 GRUB(多操作系统引导程序)作为 Bootloader。GRUB 可以识别(根)文件系统并加载 Kernel(内核),同时将系统的控制权交给 Kernel。

4. Kernel 极其精简,加载过程中也可能会加载一些必要的模块打包文件。

5. 随同 Kernel 一起加载的还有 init(/sbin/init)进程,是 Linux 启动的第一个进程,它负责加载文件系统并根据运行级别启动(重启)和关闭相应服务,最后初始化字符终端和/或启动图形终端,等待用户登录。

至此,系统启动完成。

二、流程详解

1. BIOS(Basic Input Or Output,基本输入输出系统)

BIOS 是计算机启动后最先被读取的系统,在硬件和内存的校验以及 CPU 的自检通过、没有异常后,BIOS 将被加载到内存里。BIOS 主要存储了设备(一般是硬盘,可在 BIOS 界面设置)的启动顺序,BIOS 依次尝试加载含有 MBR 信息的可启动设备,找到后将控制权交给 MBR 中的 Bootloader。

2. MBR(Master Boot Record,主引导记录)

MBR 在磁盘上的第一个扇区(1 扇区占 512 字节),它的前 446 字节是 Bootloader(引导程序),后 4 个 16 字节是最多 4 个主分区信息,最后 2 字节 55 AA 是启动标识。

Linux 中使用 GRUB 作为 Bootloader。

3. GRUB(GRand Unified Bootloader,多操作系统引导程序)

GRUB 是现在 Linux 使用的主流引导程序,可以用来引导现在几乎所有的操作系统。

GRUB 是模块化的,运行时会经历如下阶段:

(1)stage1:stage 1 大小 512 字节(和 MBR 一样大),是 MBR 的备份,MBR 损坏时可以从这里得到一个备份。

(2)*_stage1_5:用于识别多种类型文件系统的文件。CentOS 6 以后的版本默认文件系统是 ext4,会相应地识别 e2fs_stage1_5 文件。识别后,加载文件系统。

(3)stage2:根据 GRUB 配置文件 /boot/grub/grub.conf 的内容来决定如何加载 Kernel。该文件内容一般如下:

参数详解:

default:默认启动的内核编号,从0开始(每个内核信息由title标识)
timeout:等待用户选择要启动的内核的超时时间,单位为秒
splashimage:使用的背景图片
hiddenmenu:隐藏菜单
title:操作系统或内核的标题
root:内核所在的分区,(hd0,1)表示第1块磁盘的第1个分区
(在grub中,设备统统以hd开头,并紧跟一个数字作为各磁盘设备的标记,从0开始编号;分区也是从0开始编号,而我的(hd0,1)是因为我的第0个分区是swap交换分区)
kernel:要加载的内核文件,后面附带启动参数
initrd:额外驱动或模块的打包文件,ram disk 或 ram fs 文件(通常是归档压缩文件,以.img为文件名后缀)

4. Kernel(内核)

GRUB 的最后阶段 stage2 会根据 GRUB 配置文件 /boot/grub/grub.conf 的内容来加载 Kernel,并将系统控制权交给 Kernel。

命令 dmesg 可以用来查看本次启动时内核的输出信息。

5. init(Linux 启动的第一个进程)

init 进程是 Linux 启动的第一个进程,PID 为 1,其他所有进程是它的子进程。

Linux 的 init 进程是由传统的 sysvinit 演变而来的,init 进程读取的配置文件 /etc/inittab 仅保留了 sysvinit 的 inittab 文件定义的默认运行级别 runlevel,其他的配置则分散到了 /etc/init/*.conf 多个文件中。

init 进程会根据 /etc/inittab 文件定义的 runlevel 去执行相应目录下的脚本。

6. runlevel(运行级别)

命令 runlevel 可显示上一个及当前 runlevel。命令 init 可用来改变当前的 runlevel。

Linux 的 runlevel 有 7 个:

0:系统停机,默认运行级别不能设为0,否则不能正常启动
1:单用户模式,root权限,用于系统维护,禁止远程登陆
2:多用户模式(无网络)
3:多用户状态(命令行界面)
4:保留未使用
5:多用户模式(X11图形化界面)
6:系统重启,默认运行级别不能设为6,否则不能正常启动

这 7 个 runlevel 分别对应了 /etc/rc.d/rc[0-6].d/ 七个目录:

每个目录存储了所有以 K* 和 S* 开头的文件,K 开头的文件表示从其他 runlevel 切换过来需要开启(重启)的服务,S 开头的文件表示从其他 runlevel 切换过来需要关闭的服务。

三、单用户修改root密码

在开机启动时,为内核传递参数 "1" 或 "single" ,可让系统进入单用户模式(runlevel 1)。单用户模式下不启动任何服务,直接以 root 用户登录,并且不需要密码,可以使用 passwd 修改 root 密码。

操作步骤如下:

开机后,在 GRUB 引导等待用户选择要加载内核的超时时间内,随意按下一个键,进入内核的选择界面。

上图中,选中目标版本内核,按下 "e" 键进入编辑。

上图中,选中 kernel,按下 "e" 键进入编辑。

上图中,在行末尾为内核传递参数 "1" 或 "single" ,回车确定,按 "b" 启动。

上图中,成功进入单用户模式,并且是 root 用户登录。使用 passwd 修改 root 密码,然后 exit 退出,正常重启即可。

四、GRUB加密

管理员可以通过单用户模式修改 root 密码,但是这也导致任何人都可能通过这种方式入侵系统。为了防止这种危险,可以进行 GRUB 加密。

1. 在 root 用户下输入 grub-md5-crypt 命令,然后输入为 GRUB 设置的密码,产生一组 MD5 加密后的密文。

2. 将得到的密文添加到 GRUB 配置文件 /boot/grub/grub.conf 中。

这样在用户在开机后要编辑内核时就会强制要求输入 GRUB 密码,剔除了非法修改 root 密码的可能。

其次,也可以在 title 段添加一个 passward,它是用于内核(系统)启动时要求输入的密码。

参考链接:

Linux系统启动流程

图解Linux系统启动流程

Linux系统启动过程

linux中inittab文件详解

Linux系统有7个运行级别(runlevel)

CentOS 6.4 Grub加密码

Linux 入门记录:十八、Linux 系统启动流程 + 单用户修改 root 密码 + GRUB 加密的更多相关文章

  1. Linux 入门记录:八、Linux 文件系统

    一.文件系统 操作系统通过文件系统管理文件及数据,磁盘或分区需要创建文件系统之后,才能被操作系统所用,创建文件系统的过程又称之为格式化.没有文件系统的设备又称之为裸设备(raw),某些环境会需要裸设备 ...

  2. Linux系统学习 十八、VSFTP服务—虚拟用户访问—配置虚拟用户访问

    配置虚拟用户访问 首先至少要关闭userlist 改完配置文件是要重启服务来使它生效 其实在刚装好vsftp的时候的配置文件不用修改的情况下配置虚拟用户访问控制是最好的 local_root选项不影响 ...

  3. Linux 入门记录:二十、Linux 包管理工具 YUM

    一.YUM(Yellowdog Updater, Modified) 1. YUM 简介 RPM 软件包形式管理软件虽然方便,但是需要手动解决软件包的依赖问题.很多时候安装一个软件首先需要安装 1 个 ...

  4. Bootstrap入门(十八)组件12:徽章与巨幕

    Bootstrap入门(十八)组件12:徽章与巨幕 1.徽章 2.巨幕 1.徽章 给链接.导航等元素嵌套 <span class="badge"> 元素,可以很醒目的展 ...

  5. MyBatis基础入门《十八》动态SQL(if-where)

    MyBatis基础入门<十八>动态SQL(if-where) 描述: 代码是在<MyBatis基础入门<十七>动态SQL>基础上进行改造的,不再贴所有代码,仅贴改动 ...

  6. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  7. Shell 快速入门(十八):特殊符号的使用

    在 Shell 语言中,经常会看到中括号和括号组成的特殊标识,例如:[].[[]].(()).$(()).().这些符号经常使我们非常迷惑,弄清楚它们之间的作用和区别非常必要. 在开始之前,我们先来学 ...

  8. Linux下如何修改root密码以及找回root密码

    Linux下修改root密码方法 以root身份登陆,执行: passwd 用户名 然后根据提示,输入新密码,再次输入新密码,系统会提示成功修改密码. 具体示例如下: [root@www ~]# pa ...

  9. Linux 入门记录:十五、Linux 网络基本配置

    一.以太网(Ethernet) 以太网(Ethernet)是一种计算机局域网技术.IEEE 组织的 IEEE 802.3 标准制定了以太网的技术标准,它规定了包括物理层的连线.电子信号和介质访问层协议 ...

随机推荐

  1. 【bzoj1727】[Usaco2006 Open]The Milk Queue 挤奶队列 贪心

    题目描述 Every morning, Farmer John's N (1 <= N <= 25,000) cows all line up for milking. In an eff ...

  2. Oracle DB_LINK如何使用

    语句,或可通过可视化操作 -- Create database link create database link DBL_TESTconnect to UID identified by PSWus ...

  3. 【hackerrank】Week of Code 26

    在jxzz上发现的一个做题网站,每周都有训练题,题目质量……前三题比较水,后面好神啊,而且类型差不多,这周似乎是计数专题…… Army Game 然后给出n*m,问需要多少个小红点能全部占领 解法:乘 ...

  4. BZOJ3197:[SDOI2013]刺客信条——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3197 故事发生在1486 年的意大利,Ezio 原本只是一个文艺复兴时期的贵族,后来因为家族成员受 ...

  5. BZOJ5289 & 洛谷4437:[HNOI/AHOI2018]排列——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5289 https://www.luogu.org/problemnew/show/P4437 考虑 ...

  6. URAL1297:Palindrome——题解

    http://acm.timus.ru/problem.aspx?space=1&num=1297 https://vjudge.net/problem/URAL-1297 给定一个字符串,求 ...

  7. 模板:数论 & 数论函数 & 莫比乌斯反演

    作为神秘奖励--?也是为了方便背. 所有的除法都是向下取整. 数论函数: \((f*g)(n)=\sum_{d|n}f(d)g(\frac{n}{d})\) \((Id*\mu)(n)=\sum_{d ...

  8. 20165218 2017-2018-1《Java程序设计》第二周学习总结

    20165218 2017-2018-1 <Java程序设计>第2周学习总结 教材学习内容总结 Ch2 基本数据类型与数组 Unicode字符集之中所有都叫做"字母", ...

  9. atom的快捷键,你hold住吗?

    命令面板:Ctrl+Shift+P设置窗口:Ctrl+,另存为: Ctrl+Shift+S添加文件:Ctrl+O添加文件夹:Ctrl+Alt+O工程内查找 :Cmd+Shift+F a,m,delet ...

  10. 数据治理(Data Governance)

    今天看到一篇数据治理的论文,以下为论文内容的记录与学习. 数据治理是指将数据作为企业资产而展开的一系列的具体化工作,是对数据的全生命周期管理.数据治理的目标是提高数据质量(准确性和完整性),保证数据的 ...