Linux启动流程详解

news2024/10/6 10:28:38

ba44039394e84310a171acd1fe32099b.png


 

Linux 开机启动流程

Linux 启动顺序是指 Linux 系统从开机到进入用户登录界面的过程,它可以分为以下几个步骤:

  • 加载 BIOS:BIOS 是基本输入输出系统,它负责检测硬件设备,设置启动顺序,读取第一个启动设备的主引导记录(MBR)。

  • 加载 Boot Loader:Boot Loader 是引导加载程序,它负责加载内核文件到内存中,并传递一些参数给内核。常见的 Boot Loader 有 GRUB 和 LILO。

  • 加载内核:内核是 Linux 系统的核心,它负责管理系统资源,提供系统服务,驱动硬件设备。内核被加载后,会解压缩并初始化各种模块和组件。

  • 运行 init:init 是 Linux 系统的第一个用户空间进程,它负责启动和管理其他进程。init 会读取 /etc/inittab 文件,确定运行级别(runlevel),并执行相应的初始化脚本。

  • 启动服务:服务是 Linux 系统提供的各种功能和应用,如网络、图形界面、数据库等。服务一般由 /etc/rc.d 目录下的脚本来启动和停止,不同的运行级别对应不同的服务。

  • 建立终端:终端是 Linux 系统与用户交互的界面,它可以是文本模式或图形模式。终端由 /etc/inittab 文件中指定的程序来创建和管理,如 mingetty 或 xdm。

  • 用户登录:用户登录是 Linux 系统验证用户身份和权限的过程,它可以通过用户名和密码、公钥和私钥等方式进行。用户登录后,可以执行各种命令和操作。

       如下图所示:

fe64c82928ad4cc5aafe6b7bd44e7f0d.png

也可以简单把系统启动过程划分为五个阶段:

  • 内核引导

  • 运行init

  • 系统初始化

  • 建立终端

  • 用户登录系统

 

Linux 运行级别

Linux 的运行级别是指操作系统当前正在运行的功能级别,它可以影响系统的性能和安全性。Linux 有七个运行级别,从 0 到 6,每个运行级别都有不同的作用和特点。下面是 Linux 运行级别的简要说明:

  • 运行级别 0:系统停机状态,不能正常启动,只能关闭电源。

  • 运行级别 1:单用户工作状态,只有 root 权限,用于系统维护和修复,禁止远程登录。

  • 运行级别 2:多用户状态,没有网络文件系统(NFS)支持,适合一些不需要网络服务的场合。

  • 运行级别 3:完全的多用户状态,有网络文件系统(NFS)支持,适合服务器和命令行模式的用户。

  • 运行级别 4:系统未使用,保留给用户自定义。

  • 运行级别 5:图形用户界面(GUI)状态,有网络文件系统(NFS)支持,适合桌面和图形界面的用户。

  • 运行级别 6:系统重启状态,不能正常启动,只能重新启动系统。

 

Linux 关机

Linux 关机过程是指 Linux 系统从用户发出关机命令到系统完全停止运行的过程,它可以分为以下几个步骤:

  • 用户输入关机命令:用户可以使用不同的关机命令来发出关机请求,如 shutdown、halt、poweroff、init 等。这些命令可以指定关机的时间、模式和消息,也可以取消或延迟关机事件。

  • 系统发送信号:系统接收到关机命令后,会向所有正在运行的进程发送一个 SIGTERM 信号,通知它们即将关闭,并给它们一定的时间来保存数据和清理资源。

  • 系统终止进程:如果有些进程没有在规定的时间内响应 SIGTERM 信号,系统会向它们发送一个 SIGKILL 信号,强制终止它们。系统会按照进程的依赖关系和优先级来逐一关闭进程,直到只剩下 init 进程。

  • 系统卸载文件系统:系统关闭所有进程后,会卸载所有挂载的文件系统,并执行 fsck 命令来检查和修复文件系统的错误。如果有必要,系统会更新 /etc/mtab 文件和 /etc/fstab 文件,记录文件系统的状态。

  • 系统关闭硬件设备:系统卸载所有文件系统后,会关闭所有硬件设备,如网卡、声卡、键盘、鼠标等,并释放它们占用的内存和端口。系统会调用 ACPI 模块来管理电源管理,如休眠、待机等。

  • 系统停止运行:系统关闭所有硬件设备后,会停止内核的运行,并显示一条关机信息,如 “System halted” 或 “Power down” 。如果是重启模式,系统会重新加载 BIOS 并启动 Boot Loader 。

 

关机与重启命令

shutdown  

用来执行系统关机的命令

shutdown(选项)(参数)
-c:当执行“shutdown -h 11:50”指令时,只要按+键就可以中断关机的指令;
-f:重新启动时不执行fsck;
-F:重新启动时执行fsck;
-h:将系统关机;
-k:只是送出信息给所有用户,但不会实际关机;
-n:不调用init程序进行关机,而由shutdown自己进行;
-r:shutdown之后重新启动;
-t<秒数>:送出警告信息和删除信息之间要延迟多少秒。


shutdown -h now#立即关机

shutdown -h 10#十分钟后自动关机

shutdown +10 "System will shutdown after 10 minutes"#指定10分钟后关机,同时送出警告信息给登入用户

shutdown -r now  #重启

shutdown -r 10   #十分钟后自动重启

shutdown  -r  21:00  #21:00的时候自动重启

shutdown -c    #取消重启

 

halt

关闭正在运行的Linux操作系统

halt(选项)
-d:不要在wtmp中记录;
-f:不论目前的runlevel为何,不调用shutdown即强制关闭系统;
-i:在halt之前,关闭全部的网络界面;
-n:halt前,不用先执行sync;
-p:halt之后,执行poweroff;
-w:仅在wtmp中记录,而不实际结束系统。

halt    #立刻关机

halt -p     # 关闭系统后关闭电源。

halt -d     # 关闭系统,但不留下纪录。

 

poweroff

关闭Linux系统,关闭记录会被写入到/var/log/wtmp日志文件中

poweroff [选项]
-n 关闭之前不同步
-p 当被称为halt时关闭电源
-v 增加输出,包括消息
-q 降低输出错误唯一的消息
-w 并不实际关闭系统,只是写入/var/log/wtmp文件中
-f 强制关机,不调用shutdown

poweroff   #立刻关机

reboot

重新启动正在运行的Linux操作系统

reboot(选项)
-d:重新开机时不把数据写入记录文件/var/tmp/wtmp。本参数具有“-n”参数效果;
-f:强制重新开机,不调用shutdown指令的功能;
-i:在重开机之前,先关闭所有网络界面;
-n:重开机之前不检查是否有未结束的程序;
-w:仅做测试,并不真正将系统重新开机,只会把重开机的数据写入/var/log目录下的wtmp记录文件。

reboot        #重启。
reboot -w     #做个重开机的模拟(只有纪录并不会真的重开机)。

init

init进程是所有Linux进程的父进程

init(选项)(参数)
#0 停机(千万不能把initdefault 设置为0)
#1 单用户模式
#2 多用户,没有 NFS(和级别3相似,会停止部分服务)
#3 完全多用户模式
#4 没有用到
#5 x11(Xwindow)
#6 重新启动(千万不要把initdefault 设置为6)

init 0   #关机

init     #重启

 

希望今天的分享对你有所帮助,欢迎点赞收藏转发,感谢🙏

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

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

相关文章

Java小型操作系统模拟(采用策略模式结合反射进行搭建,支持一些简单的命令)

Java小型操作系统模拟 项目说明第一阶段&#xff1a;反射结合策略模式搭建基本的命令结构第二阶段&#xff1a;注解结合反射与策略模式&#xff0c;将结构进一步规范第三阶段&#xff1a;开启新的窗口&#xff0c;将控制台输入切换到新窗口中&#xff0c;同时创建右键菜单&…

如何理解Diffusion

Diffusion算法可以有多个角度进行理解&#xff0c;不同的理解方式只是对目标函数进行了不同的解释。其主体思想是不变的&#xff0c;可以归纳为&#xff1a; 训练时通过图片逐步添加噪声&#xff0c;变为一个纯噪声。然后学习每一步的噪声。推理时给定一个随机噪声图片&#x…

Leetcode | Binary search | 22. 74. 162. 33. 34. 153.

22. Generate Parentheses 要意识到只要还有左括号&#xff0c;就可以放到path里。只要右括号数量小于左括号&#xff0c;也可以放进去。就是valid的组合。recurse两次 74. Search a 2D Matrix 看成sorted list就好。直接用m*n表示最后一位的index&#xff0c;并且每次只需要 …

Android启动速度优化

本节主要内容&#xff1a;了解APP启动流程、启动状态、查看启动时间、CPU Profile定位启动耗时代码、StrictMode严苛模式检测不合理写法、解决启动黑白屏问题。 一、APP启动流程 ①用户点击桌面App图标&#xff0c;Launcher进程采用Binder IPC向system_server进程发起startAc…

Spring Boot集成Swagger3.0,Knife4j导出文档

文章目录 Spring Boot集成Swagger3.0,Knife4j导出文档效果展示如何使用简要说明添加依赖添加配置类测试接口token配置位置 官网 说明情况 demo Spring Boot集成Swagger3.0,Knife4j导出文档 效果展示 如何使用 简要说明 Knife4j的前身是swagger-bootstrap-ui,前身swagger-boo…

day48-Random Image Feed(随机图片显示)

50 天学习 50 个项目 - HTMLCSS and JavaScript day48-Random Image Feed&#xff08;随机图片显示&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&…

msvcp120.dll丢失的解决方法?有什么解决方法比较推荐?

第一&#xff1a;介绍几种可能导致msvcp120.dll文件丢失或损坏的原因 损坏的程序安装&#xff1a;在安装某个程序时&#xff0c;可能会出现意外中断或其他错误&#xff0c;导致msvcp120.dll文件未能正确地被安装或被破坏。这可能是由于软件安装过程中的错误、病毒感染或硬件问题…

OSPF协议RIP协议+OSPF实验(eNSP)

本篇博客主要讲解单区域的ospf&#xff0c;多区域的仅作了解。 目录 一、OSPF路由协议概述 1.内部网关协议和外部网关协议 二、OSPF的应用环境 1.从以下几方面考虑OSPF的使用 2.OSPF的特点 三、OSPF重要基本概念 3.1&#xff0c;辨析邻居和邻接关系以及七种邻居状态 3…

BPMNJS插件使用及汉化(Activiti绘制流程图插件)

BPMNJS插件运行最重要的就是需要安装nodejs插件,这不一定要安装和测试好。 主要是使用npm命令 1、配置BPMNJS插件绘制activiti7工作流 1.1、安装和配置nodejs 插件 1.1.1、下载nodejs 下载地址:https://nodejs.org/en 1.1.2、安装nodejs,傻瓜式安装 安装之后在安装…

【etcd】docker 启动单点 etcd

etcd: v3.5.9 etcd-browser: rustyx/etcdv3-browser:latest 本文档主要描述用 docker 部署单点的 etcd&#xff0c; 用 etcd-browser 来查看注册到 etcd 的 key 默认配置启动 docker run -d --name ai-etcd --networkhost --restart always \-v $PWD/etcd.conf.yml:/opt/bitn…

一文搞懂mysql(安装、基础命令、存储文件)

1、安装 除此之外&#xff0c;windows在安装前需要额外补加两个东西 dxwebsetup.exe、 vcredist_x64.exe 这俩随便一搜就能找到 在安装前者时要注意取消勾选bing工具栏 mysql下载链接 2、初始化 管理员身份打开cmd >> "path_to_mysql/bin/msqld.exe" --initi…

Windows11+Opencv+Clion编译源码

Windows11OpencvClion编译源码 参考&#xff1a;https://www.robotsfan.com/posts/69395e08.html 注意事项 编译过程中使用的软件&#xff0c;开源码等所有工具的安装路径一定不要有中文和空格。cmake过程会下载一些文件&#xff0c;如果是局域网的话可能下载不下来&#xf…

力扣 70. 爬楼梯

题目来源&#xff1a;https://leetcode.cn/problems/climbing-stairs/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a; 本质上是一道斐波那契数题。 动规五部曲&#xff1a;定义一个一维数组来记录不同楼层的状态 确定dp数组以及下标的含义。dp[i]&am…

【Java】JDBC快速入门及详解(MySQL版)

文章目录 1. JDBC概述2. JDBC快速入门2.1 下载驱动jar包2.2 数据准备2.3 创建工程2.4 编写代码 3. JDBC API详解3.1 DriverManager3.2 Connection3.2.1 获取执行SQL对象3.2.1 管理事务 3.3 Statement3.3.1 执行DML语句3.3.2 执行DDL语句 3.4 ResultSet3.4.1 ResultSet对象方法3…

统信UOS V20桌面专业版(1060)

统信UOS V20桌面专业版&#xff08;1060&#xff09;也是发布许久我来发一下体验感受吧。 1.如果你是首次接触统信UOS&#xff0c;1060版本提供了快速上手指南&#xff0c;可以帮助你快速了解统信UOS的基础功能和办公实用小技巧&#xff0c;让你快速上手&#xff0c;降低使用门…

Dockerfile简介

1、什么是Dockerfile 要获得镜像&#xff0c;可以从Docker仓库中进行下载。那如果我们想自己开发一个镜像&#xff0c;那该如何做呢&#xff1f;答案是&#xff1a;Dockerfile Dockerfile其实就是一个文本文件&#xff0c;由一系列命令和参数构成&#xff0c;Docker可以读取Do…

Pytest自动化测试 - 必知必会的一些插件

这可能是B站最详细的pytest自动化测试框架教程&#xff0c;整整100小时&#xff0c;全程实战&#xff01;&#xff01;&#xff01; ​ Pytest拥有丰富的插件架构&#xff0c;超过800个以上的外部插件和活跃的社区&#xff0c;在PyPI项目中以“ pytest- *”为标识。 本篇将列举…

python——案例二 求两个数的和

#案例二 求两个数的和 num1input(请输入第一个数字&#xff1a;) num2input(请输入第二个数字&#xff1a;) sumfloat(num1)float(num2) #计算公式 print(sum) #显示结果 输入num11、num22得到结果sum3

从Vue2到Vue3【七】——Vue2中响应式原理的实现及其缺陷

系列文章目录 内容链接从Vue2到Vue3【零】Vue3简介从Vue2到Vue3【一】Composition API&#xff08;第一章&#xff09;从Vue2到Vue3【二】Composition API&#xff08;第二章&#xff09;从Vue2到Vue3【三】Composition API&#xff08;第三章&#xff09;从Vue2到Vue3【四】C…

JVM入门篇-JVM的概念与学习路线

JVM入门篇-JVM的概念与学习路线 什么是 JVM 定义 Java Virtual Machine - java 程序的运行环境&#xff08;java 二进制字节码的运行环境&#xff09; 好处 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收功能数组下标越界检查多态 比较 jvm jre jdk 常…