【Linux基础】1. Linux 启动过程

文章目录

  • 【 1. 内核的引导 】
  • 【 2. 运行init 】
    • 运行级别
  • 【 3. 系统初始化 】
  • 【 4. 建立终端 】
  • 【 5. 用户登录系统 】
  • 【 6. 图形模式与文字模式的切换方式 】
  • 【 7. Linux关机 】

  • Linux系统的启动过程分为 5个阶段
    (1)内核的引导。
    (2)运行 init。
    (3)系统初始化。
    (4)建立终端 。
    (5)用户登录系统。

【 1. 内核的引导 】

  • 当计算机打开电源后,首先是 BIOS(Basic Input Output System,基本输入输出系统)开机自检,按照 BIOS 中设置的启动设备(通常是硬盘)。
  • 操作系统接管硬件以后,首先 读入 /boot 目录下的内核文件
    在这里插入图片描述

【 2. 运行init 】

  • init (初始化)进程是系统所有进程的起点,我们可以把它比拟成系统所有进程的老祖宗,没有这个进程,系统中任何进程都不会启动。
  • init 程序首先是需要 读取配置文件 /etc/inittab
    在这里插入图片描述

运行级别

  • 许多程序需要开机启动。它们在Windows叫做"服务"(service),在Linux就叫做 “守护进程”(daemon)
  • init进程的一大任务,就是去运行这些开机启动的程序。
    但是,不同的场合需要启动不同的程序,比如用作服务器时,需要启动Apache,用作桌面就不需要。
  • Linux允许为不同的场合,分配不同的开机启动程序,这就叫做 “运行级别”(runlevel)。也就是说, 启动时根据"运行级别",确定要运行哪些程序。
    在这里插入图片描述
  • Linux系统有7个 runlevel 运行级别 :
级别作用
运行级别0系统停机状态,系统默认运行级别不能设为0,否则不能正常启动
运行级别1单用户工作状态,root权限,用于系统维护,禁止远程登录
运行级别2多用户状态(没有NFS)
运行级别3完全的多用户状态(有NFS),登录后进入控制台命令行模式
运行级别4系统未使用,保留
运行级别5X11控制台,登录后进入图形GUI模式
运行级别6系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

【 3. 系统初始化 】

  • 在init的配置文件中有这么一行: si::sysinit:/etc/rc.d/rc.sysinit 它调用执行了/etc/rc.d/rc.sysinit,而 rc.sysinit 是一个bash shell的脚本,它主要是完成一些系统初始化的工作,rc.sysinit 也是 每一个运行级别都要首先运行的重要脚本,它主要完成的工作有:激活交换分区,检查磁盘,加载硬件模块以及其它一些需要优先执行任务。
  • cppl5:5:wait:/etc/rc.d/rc 5这一行表示以5为参数运行/etc/rc.d/rc(其中,/etc/rc.d/rc是一个Shell脚本,它接受5作为参数)去执行/etc/rc.d/rc5.d/目录下的所有的 rc启动脚本, /etc/rc.d/rc5.d/目录下的所有的 rc启动脚本的特点
    • 这些启动脚本实际上都是一些连接文件,而不是真正的rc启动脚本,真正的rc启动脚本实际上都是放在/etc/rc.d/init.d/目录下。
    • 而这些rc启动脚本有着类似的用法,它们一般能接受start、stop、restart、status等参数。
    • 通常是K或S开头的连接文件,对于以 S 开头的启动脚本,将以start参数来运行;而如果发现存在相应的脚本也存在K打头的连接,而且已经处于运行态了(以/var/lock/subsys/下的文件作为标志),则将首先以stop为参数停止这些已经启动了的守护进程,然后再重新运行,这样做是为了保证是当init改变运行级别时,所有相关的守护进程都将重启。
  • 在每个运行级中将运行哪些守护进程,用户可以通过chkconfig或setup中的"System Services"来自行设定。
    在这里插入图片描述

【 4. 建立终端 】

  • rc执行完毕后,返回init,这时基本系统环境已经设置好了,各种守护进程也已经启动了。
  • init接下来会 打开6个终端,以便用户登录系统。在inittab中的以下6行就是定义了6个终端:
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
  • 从上面可以看出在2、3、4、5的运行级别中都将以respawn方式运行mingetty程序,mingetty程序能打开终端、设置模式。
  • 同时它会 显示一个文本登录界面,这个界面就是我们经常看到的登录界面,在这个登录界面中会提示用户输入用户名,而用户输入的用户将作为参数传给login程序来验证用户的身份。

【 5. 用户登录系统 】

在这里插入图片描述

  • 一般来说,用户的登录方式有三种:
    (1)命令行登录
    (2)ssh登录
    (3)图形界面登录
  • 对于 运行级别为5的图形方式 用户来说,他们的登录是通过一个图形化的登录界面。登录成功后可以直接进入 KDE、Gnome 等窗口管理器。
  • 而本文主要讲的还是文本方式登录的情况:当我们看到mingetty的登录界面时,我们就可以输入用户名和密码来登录系统了。
    • Linux 的账号验证程序是 login,login 会接收 mingetty 传来的用户名作为用户名参数。
    • 然后 login 会对用户名进行分析: 如果用户名不是 root,且存在 /etc/nologin 文件,login 将输出 nologin 文件的内容,然后退出 (这通常用来系统维护时 防止非root用户登录)。
      /etc/usertty文件用于对用户作出附加访问限制:只有/etc/securetty中登记了的终端才允许 root 用户登录,如果不存在这个文件,则 root 用户可以在任何终端上登录没有其他限制。

【 6. 图形模式与文字模式的切换方式 】

在这里插入图片描述

  • Linux预设提供了六个命令窗口终端机让我们来登录。
    默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + Alt + F1 ~ F6 来切换它们。
  • 如果安装了 图形界面,默认情况下是进入图形界面的,此时我们就可以按Ctrl + Alt + F1 ~ F6来进入其中一个命令窗口界面。当我们进入命令窗口界面后再返回图形界面只要按下Ctrl + Alt + F7 就回来了。
  • 如果用的 Vmware 虚拟机,命令窗口切换的快捷键为 Alt + Space + F1至F6。如果在图形界面下按Alt + Shift + Ctrl + F1至F6 切换至命令窗口。

【 7. Linux关机 】

  • 在linux领域内大多用在服务器上,很少遇到关机的操作。毕竟服务器上跑一个服务是永无止境的,除非特殊情况下,不得已才会关机。
  • 正确的关机流程为:sync > shutdown > reboot > halt
    关机指令为:shutdown ,可以man shutdown 来看一下帮助文档。
  • 实例:运行如下命令关机
sync 将数据由内存同步到硬盘中。shutdown 关机指令,可以man shutdown 来看一下帮助文档。例如你可以运行如下命令关机:shutdown –h 10 ‘This server will shutdown after 10 mins’ 这个命令告诉我们,计算机将在10分钟后关机,并且会显示在登陆用户的当前屏幕中。shutdown –h now 立马关机shutdown –h 20:25 系统会在今天20:25关机shutdown –h +10 十分钟后关机shutdown –r now 系统立马重启shutdown –r +10 系统十分钟后重启reboot 就是重启,等同于 shutdown –r nowhalt 关闭系统,等同于shutdown –h now 和 poweroff
  • 最后总结一下, 不管是重启系统还是关闭系统,首先要运行 sync 命令,把内存中的数据写到磁盘中
  • 关机的命令有 shutdown –h now halt poweroff 和 init 0 , 重启系统的命令有 shutdown –r now reboot init 6。

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

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

相关文章

docker nginx 部署静态网站

1、dockerfile FROM nginx AS baseWORKDIR /appEXPOSE 80COPY . /app2、dockercompose.yaml version: 3 services:adminservice:container_name: adminwebbuild:context: ./dockerfile: Dockerfileports:- "5000:80"labels:description: adminwebrestart: always3、…

Java中线程状态的描述

多线程-基础方法的认识 截止目前线程的复习 Thread 类 创建Thread类的方法 继承Thread类,重写run方法实现Runnable接口,重写run方法使用匿名内部类继承Thread类,重写run方法使用匿名内部类实现Runnable接口,重写run方法使用Lambda表达式 run方法中的所有的代码是当前线程对…

ubuntu 20.04 docker

ubuntu 20.04 docker https://docs.docker.com/engine/install/ubuntu/ Ubuntu20.04下部署linux资源监控平台(docker部署)grafanaprometheusnode_exporter(docker离线包) https://blog.csdn.net/deer_cui/article/details/1340208…

React面试题:对componentWillReceiveProps的理解

React面试题:对componentWillReceiveProps的理解 回答思路:是什么--->干什么用的-->优点-->什么时候用是什么?干什么用的?优点什么时候用? 回答思路:是什么—>干什么用的–>优点–>什么时…

已知IP地址,求能容纳一定数量IP地址的DHCP服务器的主机数量和子网掩码

求能容纳的主机数量:2的n次方-2 > 所需的主机数量 [由于广播地址(255)和网络地址(0)要保留,所以求主机数量时要-2] 子网掩码:采用1 2 4 8法(2的0次方、2的1次方、2的2次方、2的3次…

第二百一十六回 分享一种更新页面数据的方法

文章目录 1. 概念介绍2. 实现方法2.1 实现思路2.2 实现方法3. 示例代码4. 内容总结我们在上一章回中介绍了"如何创建单例模式"相关的内容,本章回中将 分享一种更新页面数据的方法.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍一种更新页…

测站坐标系统 -- 东北天(ENU)坐标系、站心坐标系

目录 一、测站坐标系的定义 二、测站坐标系与地心地固坐标系的转换 2.1地心地固坐标系转到测站坐标系 2.2测站坐标系转到地心地固坐标系 三、方位角和高度角的计算 一、测站坐标系的定义 测站坐标系统以观测站( 或地面上某一个观测点 ) 为中心建立坐标系统,将这…

SQL基础:记录的基本操作

在上一节中,我们进行了表的新建,这一节我们讲一下记录的增加、修改、删除、查询。 增加 增加即使用insert语句, INSERT INTO users (user_id, username, password, email) VALUES (2, jane_smith, pass456, janeexample.com);查看插入的数…

代码随想录第三十六天(一刷C语言)|背包问题理论基础分割等和子集

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。 一、背包问题 题目:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装…

C语言实现顺序队列

在C语言中,顺序队列是一种数据结构,它是一种先进先出(FIFO)的线性表。顺序队列通常使用数组来实现,具有以下特点: 队列元素的插入操作(入队)只能在队尾进行,而删除操作&…

Docker的安装及使用

目录 安装Docker 安装yum工具 更新本地镜像源 安装docker 启动docker 关闭防火墙 docker启动命令 配置镜像加速 docker的使用 拉取nginx 查看本地镜像 把镜像文件nginx导出成tar文件 查看是否导出成功 ​编辑 删除本地镜像nginx:latest 导入镜像文件nginx 拉取…

Unity工具栏介绍

File 在Unity的工具栏中,File(文件)选项提供了一些重要的功能,使你能够管理项目和资源。以下是File选项中常见的功能: 1. New Project(新建项目): 创建一个新的Unity项目。你可以…

Java项目-瑞吉外卖项目优化Day1

创建新仓库 push项目 新建分支v1.0做优化 导入Redis相关配置 导入坐标。 实现配置类,重写序列化器,也可以直接用StringRedisTemplate。 application.xml配置: 实现缓存短信验证码 将手机号与验证码存进redis。 从redis中获取验证码&…

微信小程序长按图片识别二维码

设置show-menu-by-longpress"true"即可&#xff0c;长按图片后会弹出一个菜单&#xff0c;若图片中包含二维码或小程序码&#xff0c;菜单中会有响应入口 <image src"图片地址" show-menu-by-longpress"true"></image>官方说明

spring 配置模型

一、引言 本文将会介绍spring的配置模型、配置初始化和动态刷新。 二、技术细节 1、配置模型 Environment ->Profile -> active / defaultMutablePropertySources -> PropertySourcer -> servlet,system,springPropertyResolver -> PropertyConvensionMutabl…

大语言模型(LLM)与 Jupyter 连接起来了!

现在&#xff0c;大语言模型&#xff08;LLM&#xff09;与 Jupyter 连接起来了&#xff01; 这主要归功于一个名叫 Jupyter AI 的项目&#xff0c;它是官方支持的 Project Jupyter 子项目。目前该项目已经完全开源&#xff0c;其连接的模型主要来自 AI21、Anthropic、AWS、Co…

专栏十六:bulk以及单细胞空转中的progeny通路分析

progeny本身有自己的R包,可以提取通路基因集信息,团队把他嵌入另一个R包decoupleR中完成富集分析。decoupleR自己有详细的针对bulk和scRNAseq的教程 简单安装一下 devtools::install_github(saezlab/OmnipathR) devtools::install_github("saezlab/progeny") Bio…

6 最大积水量

蛮力求解 #include <iostream> using namespace::std; using std::cout; using std::cin; int zdjsl(int n, int height[]) {int sum 0;int left_max[n];int right_max[n];left_max[0] height[0];right_max[n-1] height[n-1];for(int i1; i<n; i){left_max[i] m…

Python自动化测试系列[v1.0.0][单元测试框架Unittest详解]

[单元测试的含义] Unittest单元测试框架的设计灵感来源于Junit(Java语言的单元测试框架)&#xff0c;它与其他语言的单元测试框架风格相类似&#xff0c;支持自动化测试、为测试共享setUp和shutDown、它可以在将测试用例聚合到一起形成一个集合一起执行的同时在测试报告中展示…

arcmap + oracle11g 迁移数据 报错 copyFeatures失败

原因排查&#xff1a; 1.通过这个界面&#xff0c;我们无法查到真正的原因&#xff0c; 2.将数据拷贝到我们自己的arcmap服务器中&#xff0c;采用 单个要素 导入&#xff0c;从result面板中查找原因&#xff1b; 从上面这个图中&#xff0c;看到关键信息 DBMS error ORA-016…