linux 文件十六进制阅读_Linux引导101

2023-11-15

对于Ubuntu 18.04

cdbdb54b9443a7a4717f4a36bd2aa269.png

> Photo by Adi Goldstein on Unsplash

让我们从Wikipedia如何描述引导程序开始:

通常,自举通常是指自启动过程,应该在没有外部输入的情况下进行。 在计算机技术中,该术语(通常简称为引导)是指在开机后将基本软件加载到计算机内存中的过程,尤其是操作系统,然后该操作系统将根据需要负责加载其他软件。

f02d1dcce596dcb465080143cea29ddc.png

> The saying "to pull oneself up by one's bootstraps" was an old phrase referring to an impossible t

在Linux中,典型的引导过程分为6个不同的阶段。 在这里,我尝试通过一些示例清晰地描述每个阶段。 在下面,您可以看到高级启动过程。

976c19fb8ee47663eac4693b3d807c2a.png

> Typical booting processes

引导从BIOS开始。 什么是BIOS? 它代表"基本输入/输出系统",它是一个小程序,用于在可启动媒体(例如硬盘,CD-ROM,USB等)上寻找引导加载程序。

BIOS程序与OS完全独立,并且在执行任何其他引导过程之前执行。 它对CPU,内存和其他存储设备执行简短的完整性检查,以确保系统可启动。 它还收集所有可用的可启动设备的列表,并根据其可配置的优先级列表开始启动它们。 如果无法启动设备,它将转到列表中的下一个设备。 例如,以下是启动优先级顺序列表的示例。

59da793d7e28712a4ed5dda3525739ae.png

> A list of available Bootable media. You can change this order as you wish.

在这些可启动媒体的每一个上,都有一个包含启动加载程序信息的小文件。 该文件称为主引导记录(MBR),BIOS的工作是查找该文件并阅读说明以查找引导加载程序。

MBR是一个非常小的文件(大小为512字节),位于可引导磁盘(例如硬盘,USB等)的第一个扇区上。 该文件包含主引导程序,分区表和MBR验证检查的信息。

第一部分,主引导加载程序,包含可执行代码,以用作已安装的OS的加载程序-由于其体积有限,通常用于将控制权传递给加载程序的第二阶段(GRUB)。 第二部分,分区表,包含有关在该介质上如何组织包含文件系统的逻辑分区的信息(例如,分区的数量及其类型)。 最后一部分是MBR验证检查,它是2个字节的签名(又称幻数)。 如果是(0x55,0xaa)(十六进制格式),则BIOS将尝试引导系统。 如果不是,那么您将从BIOS中收到一条错误消息,提示它找不到可引导磁盘。

11bfaf49f322fcf50d7f53bf7b0c1c44.png

> Master Boot Record(MBR), which is always located at cylinder 0, head 0, and sector 1, the first se

BIOS找到引导加载程序后,便将引导程序代码加载到内存中,从而启动引导加载程序进程。

在Ubuntu中,第二阶段的引导程序是GRUB。 它代表GRand Unified Bootloader,它属于GNU项目。

这是一个小型软件包,负责启动操作系统并了解文件系统。 如果您的计算机上安装了多个内核映像,或特定操作系统的多个配置,则GRUB允许您引导其中一个。 它显示一个启动屏幕,等待几秒钟,如果没有用户输入,则它将加载其配置文件中指定的默认内核映像。 在下面,您可以看到我的计算机上安装了许多内核映像。 您可以通过键入$ dpkg –list |查看列表。 CLT上的grep linux-image。

0c82487e825a48e518b90e40559d97ed.png

> List of all available linux kernel images on my computer

6c15d6a767651225f51aa708090f1b15.png

> The default linux kernel on my computer.

对于每个操作系统或内核配置,GRUB在其配置文件上都有一组说明。 该配置位于/boot/grub/grub.cfg中。

配置文件包含有关内核和initrd(初始RAM磁盘)映像的信息。 initrd映像包含加载实际OS文件系统所需的模块/驱动程序。 内核将这些映像用作临时根文件系统。 加载根文件系统后,内核会卸载这些临时文件并加载实际文件系统。

f9ef1e275e2c0bef65a5be68a20337e1.png

> The contents of boot directory. You can see initrd images on the directory

现在,内核接管了。 但是什么是内核? 它是OS的核心,可提供对服务和硬件的访问。 它是一个压缩的图像文件,其位置在GRUB配置文件中指定。

现在,当内核加载到内存中时,执行将通过检查处理器系列和体系结构开始。 内核执行许多特定于硬件的操作。 它使用" initramfs"读取驱动程序和启动系统所需的模块。 它还按照GRUB配置文件中的指定挂载"根文件系统"。

在此阶段,内核执行/ sbin / init二进制文件。 它是Linux内核在用户空间中第一个执行的程序。 您可以检查此二进制文件的进程ID(PID),始终为1。

1db5e236e961f34fabf378e4d8008ef6.png

> You can check a program's PID with $ ps -ef command

在此阶段,init程序将启动init进程,该进程运行一系列初始化脚本,称为init.d bash脚本。 您可以在/etc/init.d目录中检查这些脚本。 每个守护程序或服务都有一个脚本。

294c179a2770c6102d7f03273daaf21c.png

> init.d scripts

该初始化从运行程序级别0到6(从0到init 6)的init运行程序开始。 程序分为6个目录(每个init级别)。 目录名称的格式为/etc/rc.*d,每个目录包含特定于该程序级别的文件。 根据运行级别(目标),内核开始从以下目录之一执行程序:

· init 0暂停/etc/rc0.d上的文件

· 位于/etc/rc1.d上的init 1个单用户模式文件

· init 2多用户模式,在/etc/rc2.d上没有NFS文件

· 在/etc/rc3.d上具有NFS文件的init 3多用户模式

· 初始化/etc/rc4.d上的4个未使用的文件

· 位于/etc/rc5.d上的init 5 X11- GUI模式文件

· init 6重新启动/etc/rc6.d上的文件

在每个目录中,文件有两种类型,一种是启动脚本,以字母S开头,另一种是停止/杀死脚本,其以字母K开头。第一个字母后有一个数字 ,显示执行顺序。

参考文献

· Linux引导过程-如何执行(链接)

· Linux引导过程(链接)

· Linux引导过程(链接)

如果您发现本文有帮助,请与您的朋友和同事分享。 如果您还有其他疑问,可以在Linkedin上找到我,或者给我发送电子邮件smohajer85@gmail.com。

(本文翻译自Saeed Mohajeryami的文章《Linux Bootstrapping 101》,参考:https://medium.com/datadriveninvestor/linux-bootstrapping-101-2c2a8c067253)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux 文件十六进制阅读_Linux引导101 的相关文章

  • Node.js Buffer的简单使用

    Node js 目前支持的字符编码包括 ascii 仅支持 7 位 ASCII 数据 如果设置去掉高位的话 这种编码是非常快的 utf8 多字节编码的 Unicode 字符 许多网页和其他文档格式都使用 UTF 8 utf16le 2 或
  • JVM 垃圾回收

    JVM 垃圾回收 写在前面 本节常见面试题 问题答案在文中都有提到 如何判断对象是否死亡 两种方法 简单的介绍一下强引用 软引用 弱引用 虚引用 虚引用与软引用和弱引用的区别 使用软引用能带来的好处 如何判断一个常量是废弃常量 如何判断一个
  • Linux基线检查( 一)

    什么是基线 即安全基线配置 诸如操作系统 中间件和数据库的一个整体配置 这个版本中各项配置都符合安全方面的标准 比如在系统安装后需要按安全基线标准 将新机器中各项配置调整到一个安全 高效 合理的数值 风险分类 系统 等保三级 CentOS
  • linux 普通用户 Cannot create VM thread. Out of system resources.

    在linux系统下开发 使用普通用户进行应用部署 出现JVM内存问题如下 Error occurred during initialization of VM Cannot create VM thread Out of system re
  • Basic Level 1023 组个最小数 (20分)

    题目 给定数字 0 9 各若干个 你可以以任意顺序排列这些数字 但必须全部使用 目标是使得最后得到的数尽可能小 注意 0 不能做首位 例如 给定两个 0 两个 1 三个 5 一个 8 我们得到的最小的数就是 10015558 现给定数字 请
  • Python学习笔记第六十四天(Matplotlib 网格线)

    Python学习笔记第六十四天 Matplotlib 网格线 普通网格线 样式网格线 后记 Matplotlib 网格线 我们可以使用 pyplot 中的 grid 方法来设置图表中的网格线 grid 方法语法格式如下 matplotlib
  • 系统架构设计师(第二版)学习笔记----信息系统基础

    原文链接 系统架构设计师 第二版 学习笔记 信息系统基础 文章目录 一 信息系统概述 1 1 信息系统的5个基本功能 1 2 信息系统发展阶段 1 3 初始阶段的主要特点 1 4 传播阶段的主要特点 1 5 控制阶段的主要特点 1 6 集成
  • lock_guard和unique_lock

    锁 锁用来在多线程访问同一个资源时防止数据竞险 保证数据的一致性访问 多线程本来就是为了提高效率和响应速度 但锁的使用又限制了多线程的并行执行 这会降低效率 但为了保证数据正确 不得不使用锁 它们就是这样纠缠 本文主要讨论 c 11 中的两
  • 网络安全工程师的职责 103.219.28.X

    网络安全工程师是专门从事网络安全防护 攻击和事故处理等工作的技术人员 其主要职责包括 评估和分析网络漏洞和威胁情况 制定网络安全策略和方案 开发和实施安全解决方案 监控和维护网络安全系统 应对网络攻击和事故等 他们需要掌握网络安全技术 网络
  • DateTime关于时区的学习

    一 时区的概念 首先来了解时区的概念 为了解决世界不同各地在时间上的差异 人们定义了时区 时区是地球上的区域使用同一个时间定义 人们将时区分为24个 它们是中时区 零时区 东1 12区 西1 12区 每个时区横跨经度15度 时间正好是1小时
  • SQL Server临时表

    创建临时表 方法一 create table 临时表名 字段1 约束条件 字段2 约束条件 create table 临时表名 字段1 约束条件 字段2 约束条件 方法二 select into 临时表名 from 你的表 select i
  • 【JAVA设计模式】之桥接模式(BridgePattern)

    桥接模式的作用是将两样东西连接起来 比如桥梁把河的两岸连接起来 桥接模式把 类的功能层次结构 和 类的实现层次结构 连接起来 类的层次结构 类的功能层次 父类通过定义抽象方法来定义接口API 类的实现层次 子类通过实现具体方法来实现接口AP
  • FP64、FP32、FP16、FP8简介

    目录 1 单精度浮点数FP32的表示 2 半精度浮点数FP16的表示 3 双精度浮点数FP64的表示 4 FP8 5 写在最后 1 单精度浮点数FP32的表示 浮点数由三部分组成 符号位 指数部分 尾数部分 以单精度浮点数为例 如图所示 符
  • 好多粉使用百度OCPC api提交后如何手动选择有效咨询回传?

    推广每天会有复制 虽然绝大部分是正常的数据 但也有可能有的是同行刷的 有的是没有添加成功的数据 如果不处理 会造成无效数据上传 只能投放的AI可能就要被某些别有用心的人玩坏了 所以我们为解决这个痛点 开发了手动回传功能 并且系统自动帮你标识
  • VS2019现有项目添加Qt界面

    目录 Qt安装教程 Qt下载 Qt安装 VS Qt插件 配置Qt插件 配置包含目录及链接器 添加QT界面 添加UI界面 配置文件属性 编译UI文件 添加 h和 cpp文件 简单运行测试 双击ui文件打开Qt Designer闪退问题 与VS
  • c++实现霍夫曼编码

    c 实现霍夫曼编码 计算信源的熵 平均码长 编码效率 冗余度与压缩比 考虑到指针可能对新手不太友好 这里用的是vector容器 用法类似数组 可以动态扩容 存储树形结构 大致原理就是n号结点的左右子树分别是2n和2n 1号结点 Huffma
  • XMPP客户端库Smack 4.1.4版官方开发文档之五

    本文转载自 博客主页 http blog csdn net chszs 五 名单Roster和在线状态Presence 名单可以让你跟踪其他用户是否在线 而且名单可以让你把用户组织到群组 比如朋友群或工作群 而其它的即时通信IM系统则把名单
  • 7个高频出现的面试题

    收集了2022年所有学生的面试题后 我整理出了7个高频出现的面试题 一起来看看 高频问题1 请自我介绍下 高频问题2 请介绍下最近做过的项目 高频问题3 请介绍下你印象深刻的bug 高频问题4 Fiddler工具怎么使用的 高频问题5 说一
  • 判断是否为数字的两种办法

    今天在写angular的ts中碰到一个问题 就是需要判断用户id是否是number类型还是uuid 在这里我采用了两种办法 1 使用typeof 判断是什么类型 if typeof res userInfo id number alert

随机推荐

  • sar 命令

    NAME sar Collect report or save system activity information SYNOPSIS sar A b B C d h i interval m p q r R S t u ALL v V
  • 2.2 SSD之地址映射

    LBA Logical Block Address 表示用户操作 读写 数据的位置 PBA Physics Block Address 表示数据在硬盘的真实位置 在HDD时代 数据可以覆盖写 LBA和PBA直接对应不会更改 但是SSD时代
  • leetcode-453. 最小操作次数使数组元素相等-js

    题目 代码 关键 每次操作使 n 1 个元素增加 1 相当于使1个元素减小 1 所以算出每个元素减小到最小元素的次数即可 var minMoves function nums const minNum Math min nums retur
  • BootStrap-table 复选框默认选中(checkbox)

    BootStrap table 复选框默认选中 checkbox bootstrap table colums 写法 var columns field checked checkbox true formatter stateFormat
  • 基于深度学习的人脸识别综述

    本文转载自 https xraft github io 2018 03 21 FaceRecognition 作者 Caleb Ge 葛政 如有侵权请告知删除 下文中的 我 均为原文作者 另附有查找的其他参考链接 论文介绍方面链接 1 ht
  • 第三章-Python中的数据类型

    欢迎来到python的世界 博客主页 卿云阁 欢迎关注 点赞 收藏 留言 本文由卿云阁原创 本阶段属于练气阶段 希望各位仙友顺利完成突破 首发时间 2021年3月14日 希望可以和大家一起完成进阶之路 作者水平很有限 如果发现错误 请留言轰
  • ubuntu下编译问题集锦

    1 DSO missing from command line 一般是库链接顺序不对 将依赖于其他库的lib放在前面 库放在后面就行 2 fatal error ceres ceres h No such file or directory
  • CTF中那些脑洞大开的编码和加密

    0x00 前言 正文开始之前先闲扯几句吧 玩CTF的小伙伴也许会遇到类似这样的问题 表哥 你知道这是什么加密吗 其实CTF中脑洞密码题 非现代加密方式 一般都是各种古典密码的变形 一般出题者会对密文进行一些处理 但是会给留一些线索 所以写此
  • vant使用时覆盖默认样式

    在我们使用vant的时候 有时候一些组件的默认样式并不能满足我们项目的需求 这个时候我们可以使用下面的办法 覆盖掉默认样式 亲测有效 vant覆盖默认样式的写法 v deep van cell not last child after le
  • transform的scale属性实现对大屏的适配

    最近公司做的大屏用到了transform的scale属性来对大屏网页 进行缩放 缺点 需要给项目大屏 设定固定的宽高 当使用的屏幕分辨率和项目不一致时 会出现左右或者上下的留白 如果设计稿是1920 1080的尺寸 项目中用px来写宽高的话
  • QT 自学内容 day06 文件的打开,读取,写入,输出内容的时候编码方式的修改,文件的创建日期,和最后的修改时间

    1 打开文件 头文件 include
  • 在图像间进行特征匹配

    特征匹配 目标 我们将要学习在图像间进行特征匹配 使用 OpenCV 中的蛮力 Brute Force 匹配和 FLANN 匹配 Brute Force 匹配的基础 蛮力匹配器是很简单的 首先在第一幅图像中选取一个关键点然后依次与第二幅图像
  • python自(2)切片 字典 遍历删除添加修改查询定义函数函数返回值作用域序列化异常报错urllib使用一个类型六个方法下载 视频音频图片

    切片 切片 s hello word 下标索引为0的 print s 0 h 左闭右开 左是下标开始的 右是几个索引值 例如从0开始算 4个索引值 print s 0 4 hell 更改起始值的开始位置 print s 1 ello wor
  • 产品经理的思考-概括

    思考 断断续续从技术转产品已经两年时间 从2021年的按部就班 到2022年的兵荒马乱 从技术到产品会有优势 但也有自身的枷锁 如何发挥优势 跳出枷锁 是一个不断思考和突破的过程 比较转岗会有蜜月期 但是漫长的痛苦才是现实 从技术到产品是需
  • 再谈Qt实现Rasdial拨号问题(说说项目中遇到的问题和解决方案)

    上一篇 Qt实现Rasdial宽带拨号 讲解了下最简单的宽带拨号方式 但是在实际项目开发中 发现 这种做法是不好的 效率低 有时拨号失败 而且上一回 我们是采用异步拨号来实现 这个做法是不行的 我们需要实现同步拨号 那么我们应该借助api函
  • unity3d读取Excel小白教程

    1 课前准备准备三个文件 Excel dll ICSharpCode SharpZipLib dll System Data dll 如图 下载地址 链接 https pan baidu com s 1B2Sue9iw4qWzwjb1uJ6
  • vue3中使用vueQuill富文本编辑器详细教程,图片上传-图片压缩

    vueQuill是支持vue3的富文本编辑器组件 使用简单方便 官方网址 https vueup github io vue quill 效果图 1 安装 在官网有详细的安装教程 npm或者yran下载 npm install vueup
  • OSPF学习总结

    对于OSPF的学习重点总结 一个DR 三个表 五种包 七种状态 路径寻优 实时更新 OSPF介绍 一种链路状态和内部网关协议 所谓链路状态就是指 链路上的路由器与哪些路由器相邻以及它们之间的距离 度量值 是多少 来确定一条最短路径 内部网关
  • 汇编语言+IDA安装问题解决汇总

    利用汇编语言计算机和人类链接更为便捷如下图所示 寄存器 简单讲就是CPU可以存储数据的器件 一个CPU可以有多个寄存器 AX BX是两个不同的寄存器 16位处理器有14个寄存器 AX BX CX DX SI DI SP BP IP CS S
  • linux 文件十六进制阅读_Linux引导101

    对于Ubuntu 18 04 gt Photo by Adi Goldstein on Unsplash 让我们从Wikipedia如何描述引导程序开始 通常 自举通常是指自启动过程 应该在没有外部输入的情况下进行 在计算机技术中 该术语