Linux 开机过程

news2024/11/30 0:42:50

参考链接

  1. Linux引导过程

Linux 系统的运行级别

Linux 系统总共有设置了 7 种运行级别。分别是:

  1. 0 级:关机;
  2. 1 级:单用户模式;
  3. 2 级:无网络的多用户模式;
  4. 3 级:多用户模式(无图形界面);
  5. 4 级:未使用;
  6. 5 级:多用户模式(有图像界面);
  7. 6 级:重启。

为什么要了解早期系统的启动方式?

  1. 现在的启动方式是通过早期的启动方式优化而来的,存在很大的关联性;
  2. 很多老项目,依然使用着早期的启动方式;
  3. 新的启动方式大概在 2018 年才开始普及。

早期 Linux 的开机方式

在这里插入图片描述
大概是如下几个阶段:

  1. 开机自检:机器开机后,将根据主板 BIOS 中的设置对CPU 、内存、显卡、键盘等设备进行初步检测,检测成功后根据预设的启动顺序移交系统控制权,一般移交给本机硬盘;
    1. 硬件启动 POST:Power-On-Self-Test,加电自检,是 BIOS 功能的一个主要部分。负责完成对 CPU、主板、内存、硬盘子系统、显示子系统、串并行接口、键盘等硬件情况的检测;
    2. 主板的 ROM:BIOS 保存着有关计算机系统最重要的基本输入输出程序,系统信息设置、开机加电自检程序和系统启动自检程序等。
  2. MBR 引导:主引导扇区记录着硬盘本身的相关信息以及硬盘各个分区的大小及位置信息。如果它受到破坏,硬盘上的基本数据结构信息将会丢失,需要用繁琐的方式试探性地重建数据结构信息后,才可能重新访问原先的数据。主引导扇区内的信息可以通过任何一种基于某种操作系统的分区软件写入,但和某种操作系统没有特定的关系,即只要创建了有效的主引导记录就可以引导任意一种操作系统。当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中 MBR(Master Boot Record, 主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)。
  3. GRUP 菜单:对于 Linux 操作系统来说,GRUB(GRand Unified Bootloader,统一启动加载器)是 使用最为广泛的多系统引导器程序。系统控制权传递给 GRUB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)准备加载 Linux 内核文件,然后将系统控制权转交给 内核。需要注意的是,CentOS 7 采用的是 GRUB2 启动引导器。
  4. 加载 Linux 内核: Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间, 负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过 程。总结:把内核和镜像文件系统加载到内存中使用
  5. 启动 init 进程:
    1. 这个进程是 Linux 系统的第一个进程,PID 为 1,又叫超级进程,也叫根进程;
    2. 负责产生其他所有的用户进程,所有的进程都被挂在这个进程下。**如果这个进程退出了,那么所有进程会被 kill。**如果一个子进程的父进程退出了(子进程成为孤儿进程),那么这个子进程会被挂到这个根进程下面。
    3. Linux 又是以进程为最小执行单元,也就是说做任何事情都要依靠进程。因此这个进程的重要性不言而喻。

启动 init 进程

  1. init 进程启动后,会读取 /etc/inittab,接着根据该配置文件的启动层级和执行项来启动对应的程序。
    比如以下的代码就是一个典型的 inittab 文件:
# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
# 
id:5:initdefault:

这个文件表示 init 进程要启动的进程将会完成操作系统 5 级的功能。

  1. 执行系统初始化脚本(/etc/rc.d/rc.sysinit):对 Linux 系统一些必备的东西进行初始化,比如时钟、键盘、磁盘、文件系统等。
  2. 执行启动层级对应的脚本(/etc/rc*.d):Linux 系统不同的运行级别有不同的进程,这些进程需要依靠这些脚本来启动。(因此,早期的 Linux 系统中,如果有系统级的进程想要设置为开机启动,就将启动该进程的命令放在该文件中。)
  3. 这一步对于不同的系统运行级别是不同的。对于 3 级就是启动命令行终端,对于 5 级就是启动图形终端。然后执行 rc.local 文件;(如果有系统级的进程需要设置为开机启动,也可以写到这个文件中)。

现在 Linux 的开机方式

第一个启动的进程不再是 /etc/init 进程,而是 /lib/systemd/systemd

systemd 系统(system deamon)

默认启动的系统级进程通过系统目录进行配置(代替 /etc/inittab 的配置方式),配置目录为:

  1. /etc/systemd/system
  2. /run/systemd/system
  3. /lib/systemd/system

优先级从高到低,systemd 依次从这些目录中读取配置文件。启动这些配置文件对应的进程。如果同一服务在三个地方都配置了,优先级高的会覆盖优先级低的
如果想要配置启动自己的进程,只要在 /etc/systemd/system 目录下添加自己编写好的配置文件即可。/run/systemd/system 是系统用来配置服务的,一般不需要管。

读懂配置文件

配置文件分为三部分:

  1. unit 块:启动顺序与依赖关系;
  2. service 块:启动行为;
  3. install 块:定义如何安装这个配置文件,即如何做到开机自启

systemd 系统比 init 好在哪里

systemd 系统配置非常规范,systemd 系统可以对这些配置文件按照固定的格式优化,比如可以让多个服务同时启动,大幅提高服务启动效率。
而 init 系统仅仅是在配置文件中增加脚本启动命令,具体是什么格式完全由开发人员确定。容易导致整个系统难以优化,各种服务只能线性的依次启动,效率很低。

systemd 系统资源划分

systemd 系统划分为 12 个 unit:

  1. service unit:服务单元
  2. target unit:运行级别单元
  3. device unit:设备单元
  4. mount unit:文件系统的挂载点单元
  5. automount unit:自动挂载点单元
  6. path unit:路径单元
  7. scope unit:不是由systemd启动的外部进程
  8. slice unit:进程组单元
  9. snapshot unit:systemd快照单元
  10. socket unit:套接字单元
  11. swap unit:文件交换单元
  12. timer unit:定时器单元

systemctl 是 systemd 的主要命令,可以用于管理服务单元

  1. systemctl enable httpd.service:使某任务开机自启
  2. systemctl disable httpd.service:使某服务不开机自启
  3. systemctl status httpd.service:服务详细信息
  4. systemctl list-units --type=service:显示所有已经启动的服务
  5. systemctl start httpd.service:启动某服务
  6. systemctl stop httpd.service:停止某服务
  7. systemctl restart httpd.service:重启某服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/572266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

EasyDSS调用录像回看接口出现报错“请先合成mp4”,是什么原因?

EasyDSS支持一站式的上传、转码、直播、回放、嵌入、分享功能,具有多屏播放、自由组合、接口丰富等特点。平台可以为用户提供专业、稳定的直播推流、转码、分发和播放服务,全面满足超低延迟、超高画质、超大并发访问量的要求。 有用户反馈,在…

内网搭建 SFTP 服务器

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

Spring Security 6.x 系列【44】微服务篇之统一身份认证实现方案

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot 版本 3.0.4 本系列Spring Security 版本 6.0.2 源码地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目录 1. 单体架构2. 微服务架构2.1 概述2.2 统一身份认证3. 认证方式3.1 JWT3.2 …

【TI毫米波雷达笔记】IWR6843AOPEVM-G+DCA1000EVM的mmWave Studio数据读取、配置及避坑

【TI毫米波雷达笔记】IWR6843AOPEVM-GDCA1000EVM的mmWave Studio数据读取、配置及避坑 硬件方面连接好以后 就可以打开mmWave Studio了 配置 如果硬件配置成功 则可以通过mmWave Studio的Output看到配置信息 按照如图步骤 在radar api里面一步步来操作 其中 RS232选择波特率…

细节有惊喜!详解Web自动化框架UI自动截图与画面回放实现!

目录 前言: Web自动化测试框架基本结构及原理 UI自动截图实现方法 基于Selenium截图实现UI自动截图的过程如下: 基于Selenium截图的代码实现如下: 基于爬虫截图实现UI自动截图的流程如下: 基于爬虫截图的代码实现如下&#…

springboot+vue4S店车辆管理系统(java项目源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的4S店车辆管理系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风…

【评测】真我Realme GT Neo5手机性能评测

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 目录 购买记录 鲁大师评测 安兔兔评测 个人使用感受 优点 几个明显的体验感不好的点 大图、多图预警! 配置说明: 运行内存:12GB存储容量:256GB充电功率&#…

4.spring总结

文章目录 一、spring总结1、Spring三级缓存解决什么问题?2、Spring支持的几种bean的作用域?3、pring bean是否是线程安全?4、*Spring框架中bean的生命周期*?5、哪些是重要的bean生命周期方法?你能重载它们吗&#xff1…

《微服务实战》 第二十三章 Redis RDB AOF

前言 Redis 提供了两种持久化机制:第一种是 RDB,又称快照(snapshot)模式,第二种是 AOF 日志,也就追加模式。 1、RDB RDB 即快照模式,它是 Redis 默认的数据持久化方式,它会将数据…

【Flutter 工程】004-代码生成:functional_widget

【Flutter 工程】004-代码生成:functional_widget 文章目录 【Flutter 工程】004-代码生成:functional_widget一、概述1、Flutter 开发痛点2、functional_widget 函数小部件3、主页 二、基本使用1、安装 functional_widget2、传统写法3、运行结果4、代码…

App Inventor 2 连接打印机(Printer),自定义打印的实现

本教程主要分享App Inventor 2连接网络打印机进行自定义打印的思路及方法,这里只进行思路的讲解及关键步骤的效果演示,细节需自行完善。主要用到社交应用组件中的信息分享器组件。 打印App示意图 连接打印机教程(难度系数:★★&a…

值得尝试的Voyager Linux,没有Snap,出色的定制

一直以来我都不喜欢 Ubuntu GNOME 的默认外观,而且对Ubuntu强制使用Snap应用不是很喜欢,之前我用的是Ubuntu MATE这个发行版,直到我听说了Voyager Linux。今天特意安装试用了一下Voyager Linux 23.04,有几点功能我很喜欢&#xff…

适用于 Windows 电脑的 6 款最佳视频转换器

视频转换器可以帮助您转换和播放设备上不受支持的视频格式。减小视频文件大小、以通用格式组织所有视频或与他人共享文件以在不同设备上播放也很方便。 Windows 有很多视频转换器可供选择。有些是免费的,有些则提供适合专业用户的高级功能。在本指南中,…

Java程序设计入门教程--Java语言概述

目录 1.1 Java语言诞生与发展 1.2 Java语言的特点 1.3 运行机制与虚拟机 1.1 Java语言诞生与发展 Java语言的诞生最早可以追溯至1991年,那时称为OAK语言,是SUN公司为一些消费性电子产品而设计的一个通用环境,其最初目的只是为了开发一种独…

完美解决接口测试难题,数据驱动带签名混合封装框架实现

目录 前言: 一、框架概述 二、框架架构 三、代码实现 四、实战步骤 五、总结 前言: 接口自动化测试是保障软件质量的重要手段之一,其自动化程度越高,越能有效提高软件测试效率。而接口自动化测试中,接口测试框架…

推荐 6 款还不错的文档协作工具~

你们团队是否正在寻找便捷丰富功能的文档协作软件? 文件协作软件帮助你和你的团队更有效地工作,并进行实时协作,为创新创造更多的空间。 但是,今天有数百种文档协作工具,你应该选择哪一种呢? 为了帮助你…

SpringSecurity的认证原理及如何自定义认证结合MyBatis替换原数据源

文章目录 一、自定义认证二、自定义登录界面三、自定义成功的处理1、前后端分离返回json 四、如何在前端显示异常1、传统的方法2、前后端分离返回错误的json 五、注销登录配置1、注销登录前后端不分离2、前后端分离的方法 六、登录⽤户数据获取1、SecurityContextHolder2、Secu…

【Netty】Netty 程序引导类(九)

文章目录 前言一、引导程序类二、AbstractBootStrap 抽象类三、Bootstrap 类四、ServerBootstrap 类五、引导服务器5.1、 实例化引导程序类5.2、设置 EventLoopGroup5.3、指定 Channel 类型5.4、指定 ChannelHandler5.5、设置 Channel 选项5.6、绑定端口启动服务 六、引导客户端…

STL-reverse_iterator 反向迭代器

回顾 对于STL中的容器,迭代器(iterator)是很重要的部分,同时迭代器也是STL六大组件之一,在之前我们实现vector和list中,我们已经对于迭代器有了初步的认识,为什么设计迭代器? 就是为了能像数组中的指针一样…

虹科干货|创新求变:虹科Redis企业版数据库驱动金融实时业务

BDO调查显示,43%的金融企业正计划全力加速数字化转型,互联网巨头与金融科技初创公司正在颠覆传统。”与此同时,客户行为、消费习惯和期望持续变化,以客户为中心的快速金融服务已成趋势,企业微服务、云原生应用亟需一组…