Linux之引导和服务篇

系统引导是操作系统运行的开始,在用户能够正常登录之前,Linux的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备。

一. 引导过程

开机自检--->MBR引导--->GRUB菜单--->加载Linux内核--->init进程初始化

详解:

开机自检:服务器主机开机之后,将根据主板BIOS(基本输入输出系统)中的设置对CPU,内存,显卡,键盘等设备进行初步检测,检测成功后根据预设的启动程序移交系统控制权,大多数的时候会移交给本地硬盘。

MBR引导:当从本机硬盘中启动系统时,首先根据硬盘第一个扇区中MBR(主引导记录)的位置,将系统的控制权传递给包含操作系统引导文件的分区,或者直接根据MBR记录中的引导信息调用启动菜单(如GRUB)。

GRUB菜单:对于Linux系统而言,GRUB算是使用最广泛的多系统引导程序了。系统控制权传递给GRUB之后,将会显示启动菜单提供给用户选择,并根据所选项(或者采用默认值)加载Linux内核文件,然后将系统的控制权转交给内核。

加载Linux内核:Linux内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配和调度。内核接过系统控制权以后,将完全掌控整个Linux操作系统的运行过程。

init进程初始化:为了完成进一步的系统引导过程,Linux内核首先将系统中的 “/sbin/init” 程序加载到内存中运行(运行中的程序称为进程),init进程负责完成一系列的系统初始化过程,最后等待用户进行登录。

1.2 init进程

       Linux系统中的进程(运行中的程序)使用数字进行标记,每个进程的身份标记号称为PID。在引导Linux系统过程中,“/sbin/init” 是内核第一个加载的程序,因此 init 进程对应的PID号总是“1”。

       init进程运行以后将陆续执行系统中的其他程序,不断生成新的进程,这些进程称为init进程的子进程,反过来说,init进程是这些进程的父进程。当然,这些子进程也可以进一步生成各自的子进程,依次不断的繁衍下去,最终构成一棵枝繁叶茂的进程树,共同为用户提供服务。

        由此可见,init进程是维持整个Linux系统运行的所有进程的始祖,它不可以轻易被终止。需要切换不通过的系统运行状态时,可以向 init 进程发送正确的执行参数,由init自身完成相关的操作。

二. 服务

传统init依赖于串行执行Shell 脚本启动服务,导致效率低下,系统启动速度较慢    排队
systemd能够将更多的服务进程并行启动,并且具有提供按需启动服务的能力,使得启动更少进程,从而提高系统启动速度。

Linux 启动阶段始于内核加载了 init 或 systemd(取决于具体发行版使用的是旧的方式还是还是新的方式)之后。init  和 systemd 程序启动并管理所有其它进程,它们在各自的系统上都被称为“所有进程之母”。

systemd

1.特性:

  • 系统引导时实现服务并行启动;

  • 按需启动守护进程;

  • 自动化的服务依赖关系管理

  • 同时采用socket式与D-Bus总线式激活服务;

  • socket与服务程序分离;

  • 向后兼容sysv init脚本;

  • 使用systemctl 命令管理,systemctl命令固定不变,不可扩展,非由systemd启动的服务;

  • systemctl无法与之通信和控制;

  • 系统状态快照;

2. systemd 的 unit 文件

        unit表示不同类型的systemd对象,通过配置文件进行标识和配置;文件中主要包含了系统服务、监听socket、保存的系统快照以及其它与init相关的信息等。

        在systemd中不同类型的systemd对象被统一称为单元,是让系统知道该如何进行操作和管理资源的主要对象,所以systemd有许多单元类型。
       systemd单元文件最初默认存放在/lib/systemd/system目录中,每当安装新的软件都会自动在这个目录中添加一个配置文件。其实Unit 按照systemd 约定,应该被放置指定的三个系统目录之一中。这三个目录是有优先级的,如下所示,越靠上的优先级越高。因此,在三个目录中有同名文件的时候,只有优先级最高的目录里的那个文件会被使用。

/etc/systemd/system:系统或用户自定义的配置文件

/run/systemd/system:软件运行时生成的配置文件

/usr/lib/systemd/system:系统或第三方软件安装时添加的配置文件。

Systemd 默认从目录 /etc/systemd/system/ 读取配置文件。但是,里面存放的大部分文件都是符号链接,指向目录 /usr/lib/systemd/system/,真正的配置文件存放在指向的目录。

        而 systemd 通过不同的文件后缀来区分这些配置文件。systemctl 命令用于管理各种类型的systemd单元,可以使用“systemctl -t help”命令来查询systemd支持的单元类型。

部分具体如下图:

详解:

单元类型后缀名作用
Service.service封装守护进程的启动、停止、重启和重载操作,是最常见的一种 Unit 文件
Socket.socket描述一个进程间通信的套接字
Device.device描述一个内核识别的设备文件
Mount.mount描述一个文件系统的挂载点
Automoun .automount描述一个文件系统的自动挂载点
Swap.swap描述一个内存交换设备或目录
Timer.timer描述一个定时器(用于实现类似cron的调度任务)
Path.path描述一个文件系统中文件或目录(path 路径)
Snapshot.snapshot用于保存一个systemd的状态(snapshot 快照)
Scope.scope使用systemd的总线接口以编程的方式创建外部进程
Slice.slice描述居于Cgroup的一组通过层次组织的管理系统进程
Target.target描述一组systemd的单元(target 目标)。它替代了 SysV-init 运行级别的作用,并提供更灵活的基于特定设备事件的启动方式
unit文件组成格式

以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,1、yes、on、true 都是开启,0、no、off、false 都是关闭
时间单位默认是秒,所以要用毫秒(ms)分钟(m)等须显式说明

service unit file文件通常由三部分组成:
[Unit]:定义与Unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等。
[Service]:与特定类型相关的专用选项;此处为Service类型。
[Install]:定义由“systemctl enable”以及"systemctl disable“命令在实现服务启用或禁用时用到
的一些选项。

这三段下的常用选项详解:

Unit段的常用选项:
Description:描述信息
After:定义unit的启动次序,表示当前unit应该晚于哪些unit启动,其功能与Before相反
Requires:依赖到的其它units,强依赖,被依赖的units无法激活时,当前unit也无法激活
Wants:依赖到的其它units,弱依赖
Conflicts:定义units间的冲突关系

Service段的常用选项:
Type:定义影响ExecStart及相关参数的功能的unit进程启动类型
EnvironmentFile:环境配置文件
ExecStart:指明启动unit要运行命令或脚本的绝对路径
ExecStartPre: ExecStart前运行
ExecStartPost: ExecStart后运行
ExecStop:指明停止unit要运行的命令或脚本
Restart:当设定Restart=1 时,则当次daemon服务意外终止后,会再次自动启动此服务
RestartSec: 设置在重启服务( Restart= )前暂停多长时间。 默认值是100毫秒(100ms)。 如果未指
定时间单位,那么将视为以秒为单位。 例如设为"20"等价于设为"20s"。
PrivateTmp:设定为yes时,会在生成/tmp/systemd-private-UUID-NAME.service-XXXXX/tmp/目录

Install段的常用选项:
Alias:别名,可使用systemctl command Alias.service
RequiredBy:被哪些units所依赖,强依赖
WantedBy:被哪些units所依赖,弱依赖
Also:安装本服务的时候还要安装别的相关服务


注:对于新创建的unit文件,或者修改了的unit文件,要通知systemd重载此配置文件,而后可以选择重启systemctl daemon-reload

自制systemctl来管理文件,具体如下图:

系统运行级别
0关机
1单用户模式(root自动登录), single, 维护模式
2多用户模式,启动网络功能,但不会启动NFS;维护模式
3多用户模式,正常模式;文本界面
4预留级别;可同3级别
5多用户模式,正常模式;图形界面
6重启
emergency/emergency.target急救模式







 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

pandas进行数据计算时如何处理空值的问题?

目录 1.数据预览: 2.解决方法 (1)问题示例 (2)方法 A.方法一 B.方法二 1.数据预览: 2.解决方法 (1)问题示例 如下图如果不理睬这些空值的话,计算总分便也会是空值…

Chapter 10 类的继承(上篇)

目的:了解三种继承方式,并清楚其中的差别 🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃🎃…

安科瑞微电网能量监测系统Acrel-2000MG 储能电站监测预警

在新型电力系统中,储能将成为至关重要的一环,是分布式光伏、风电等新能源消纳以及电网安全保障必要保障,在电源侧、电网侧、用户侧都会得到广泛的应用。《电力现货市场基本规则(征求意见稿)》以及各地出台的扶持政策给…

Axure RP软件揭秘:设计师的秘密武器

Axure rp是一种快速原型设计工具,可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型,还可以在Axure rp中完成一系列用户体验设计。在本文中,我们将根据用户体验设计师的真实经验,触发用户体验设计师的实际工作…

我们公司都用哪些软件?强烈推荐这些

大家好,我是鱼皮。周末给大家分享一些轻松的干货吧,聊聊我们公司在用的软件,说不定能帮大家提高学习工作效率呢~ 我把软件分为四大类:团队协作、内容创作、文件共享、效率提升,分别介绍,便于大家选取。 团队…

Flink会话集群docker-compose一键安装

1、安装docker 参考,本人这篇博客:https://blog.csdn.net/taotao_guiwang/article/details/135508643?spm1001.2014.3001.5501 2、flink-conf.yaml flink-conf.yaml放在/home/flink/conf/job、/home/flink/conf/task下面,flink-conf.yaml…

如何利用静态代理IP优化跨境电商运营

文章目录 什么是跨境电商心得分享IP的重要性如何注册小结 什么是跨境电商 跨境电商,即跨境电子商务,是指在不同关境(国境)之间通过互联网进行的商业交易活动。这种商业模式充分利用了网络的全球化特性,使得买卖双方不…

探索FTP:原理、实践与安全优化

引言 在正式开始讲解之前,首先来了解一下文件存储的类型有哪些。 DAS、SAN和NAS是三种不同的存储架构,分别用于解决不同场景下的数据存储需求。 DAS (Direct Attached Storage 直接附加存储):DAS 是指将存储设备(如硬盘&#x…

微信小程序上传并显示图片

实现效果&#xff1a; 上传前显示&#xff1a; 点击后可上传&#xff0c;上传后显示&#xff1a; 源代码&#xff1a; .wxml <view class"{{company_logo_src?blank-area:}}" style"position:absolute;top:30rpx;right:30rpx;height:100rpx;width:100rp…

商城小程序(8.购物车页面)

目录 一、商品列表区域1、渲染购物车商品列表的标题区域2、渲染商品列表区域的基本结构3、为my-goods组件封装radio勾选状态4、为my-goods组件封装radio-change事件5、修改购物车中商品的选择状态6、为my-goods组件封装NumberBox7、为my-goods封装num-change事件8、修改购物车商…

[zabbix] zabbix监控

一、温习zabbix自定义监控 二、zabbix 自动发现与自动注册 2.1 zabbix 自动发现 //zabbix 自动发现&#xff08;对于 agent2 是被动模式&#xff09; zabbix server 主动的去发现所有的客户端&#xff0c;然后将客户端的信息登记在服务端上。 缺点是如果定义的网段中的主机数…

Linux进程【2】进程地址空间(+页表详解哦)

fork 引言&#xff08;程序地址空间&#xff09;进程地址空间进程地址空间mm_struct 虚拟地址到物理地址的转化总结 引言&#xff08;程序地址空间&#xff09; 在之前的学习过程中&#xff0c;我们认识了内存与地址&#xff0c;并且了解了在程序地址空间中的基本分区&#xf…

C++ 之LeetCode刷题记录(十)

&#x1f604;&#x1f60a;&#x1f606;&#x1f603;&#x1f604;&#x1f60a;&#x1f606;&#x1f603; 开始cpp刷题之旅&#xff0c;多学多练&#xff0c;尽力而为。 先易后难&#xff0c;先刷简单的。 66. 加一 给定一个由 整数 组成的 非空 数组所表示的非负整数…

Alist开源网盘搭建

官网&#xff1a;https://alist.nn.ci/zh/github下载地址&#xff1a;https://github.com/alist-org/alist/releases gitcode上也提供了源码:https://gitcode.com/mirrors/alist-org/alist/tags 源码安装使用自己研究,这里不讲解,较为复杂 我使⽤的版本:v3.29.1 我的下载地址:…

[ACM学习] 动态规划基础之一二三维dp

课内学习的动态规划 有记忆的迭代 优化解的结构&#xff1a;原始问题的一部分解是子问题的解 三要素&#xff1a;1.子问题 2.状态的定义 3.状态转移方程 定义 线性dp的一道例题 dp[i]表示以位置 i 结尾的方案总数&#xff0c;dp[4]2&#xff0c;因为&#xff1a;首先只放一…

大数据开发之Hive(查询、分区表和分桶表、函数)

第 6 章&#xff1a;查询 6.1 基本语法及执行顺序 1、查询语句语法 select_expr, select_expr, ... FROM table_reference [WHERE where_condition] [GROUP BY col_list] [ORDER BY col_list] [CLUSTER BY col_list| [DISTRIBUTE BY col_list] [SORT BY col_list]] [LIMIT n…

C#~Winform取消窗体最大化最小化按钮

目录 取消最大化-false取消最小化-false效果 取消最大化-false 取消最小化-false 效果

Umi3 创建,配置环境,路由传参(代码示例)

目录 创建项目 配置环境 创建脚手架 项目结构及其目录、 路由 配置路由 嵌套路由 编程式导航和声明式导航 声明式导航 编程式导航 约定式路由 路由传参 query传参&#xff08;问号&#xff09; 接收参数 params传参&#xff08;动态传参&#xff09; 接收参数 创…

Android Text View 去掉默认的padding的实现方法

先看下最终实现效果&#xff0c;满意您在往下看&#xff1a; TextView 绘制的时候自带一定的Padding值&#xff0c;要想实现去掉默认的padding值&#xff0c;xml文件可以设置一个属性值 &#xff1a; android:includeFontPadding"false" 然后运行起来就会发现&…

【总结】Dinky学习笔记

概述 Dinky 是一个开箱即用、易扩展&#xff0c;以 Apache Flink 为基础&#xff0c;连接 OLAP 和数据湖等众多框架的一站式实时计算平台&#xff0c;致力于流批一体和湖仓一体的探索与实践 官网&#xff1a;Dinky 核心特性 沉浸式&#xff1a;提供专业的 DataStudio 功能&a…