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 程序启动并管理所有其它进程,它们在各自的系统上都被称为“所有进程之母”。从Centos7版本开始,系统启动和服务管理都交给了systemed进行管理。

systemd进程

1.特性:

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

  • 按需启动守护进程;

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

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

  • socket与服务程序分离;

  • 向后兼容sysv init脚本;

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

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

  • 系统状态快照;

2. systemd 单元

        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 运行级别的作用,并提供更灵活的基于特定设备事件的启动方式
Target类型单元

Centos7抛弃了之前版本运行级别的概念,引入target类型单元来将系统启动时需要启动的大量systemd单元进行分类。简而言之,target就是一个单元组,通过一连串的依赖关系将许多相关的systemd单元组织在一起。

常见的target说明如下:

target说明
default.target默认启动的target
graphical.target图形界面的target
multi-user.target多用户字符界面的target
系统运行级别
Centos7(init进程)之前运行级别Centos7开始(systemd进程)说明
0poweroff.target关机
1rescue.target单用户模式(root自动登录), single, 维护模式
2multi-user.target多用户模式,启动网络功能,但不会启动NFS;维护模式
3multi-user.target多用户模式,正常模式;文本界面
4预留级别;可同3级别
5graphical.target多用户模式,正常模式;图形界面
6reboot.target重启
emergency/emergency.target急救模式

不同的运行级别代表了不同的运行状态,所启用的服务或程序也不一样。

systemctl get-default 这个命令可以查看当前系统的默认启动的target(等同于当前所处的运行级别)。

systemctl set-default 这个命令则可以设置默认启动的target,而使用 systemctl  isolate 命令则可以在不同的target 之间切换。

 runlevel命令    这个命令可以查看当前所处的运行级别。

init程序可以将当前用户的系统的运行级别切换为其他的运行级别,只要使用与运行级别相对应的数字(0-6)作为命令的参数就可以。

3. 服务配置文件组成格式

以 “#” 开头的行后面的内容会被认为是注释
相关布尔值,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来管理文件,具体如下图:

4. systemd服务管理

systemctl命令可以控制系统服务,此命令涵盖了之前版本的service命令和chkconfig命令两者的功能,在使用systemctl命令时,可以省略服务单元名称的标识 ".service"。也就是说如果输入的资源没有后缀标识,systemctl会默认把后缀标识当作 ".service" 来处理。

语法格式:systemctl  [OPTIONS...]  {COMMAND}...

服务状态的关键字

关键字说明
loaded配置文件被处理
active(running)一个或者多个进程在持续进行
active(exited)成功完成一个"一次性"配置
active(waiting)运行但等待"事件"
inactive未运行
enabled开机自动启动
disablec不随开机启动
static不能自动启动,只能随其他单元启动而启动
启动和停止服务

语法格式:systemctl  start|stop|restart|reload  name.service

注:restart命令会先停止再启动服务,这时候服务的PID值会发生改变,reload是让服务读取和重新加载此服务的配置文件,不会完全停止和启动服务,服务的PID因此不会改变。生产环境中建议使用reload命令重新加载服务。

设置开机启动

语法格式:systemctl  enable|disable  name.service

查看依赖关系

systemd单元之间存在依赖关系,启动某个服务的时候可能会同时启动另外一个服务,可以使用

systemctl  list-dependencies 命令来列出这些依赖关系。

屏蔽服务

有时候系统存在安装了相互冲突的服务的情况,为了防止管理员意外启动这些相互冲突的服务,systemd提供了屏蔽服务的命令,使得屏蔽的服务不会在系统启动时启动,也不会被其他的systemd单元启动。

屏蔽服务命令:systemctl  mask  name.service

取消屏蔽使用命令:systemctl unmask  name.service

5. systemd 其他命令

systemd处理控制与管理系统的systemctl命令之外,还有一些其他的系统设置命令。

1)更改系统主机名

hostname命令      ---->可以显示和临时修改主机名

在Centos7中主机名配置文件为/etc/hostname文件,systemd的命令hostnamectl用于修改此文件的信息,还可以查看主机名的状态。

修改永久使用的主机名:

查看主机名的状态:

2)日志系统

systemd提供了自己的日志系统journal,不需要安装额外的日志服务(rsyslog),可以使用journalctl命令读取日志信息。

journalctl  -b    --->  输出本次启动后的所有日志信息 

journalctl  --since="2024-1-17 13:00:00"   ---> 显示固定时间段的日志信息

journalctl  --xe  --no-pager  --->日志默认分页输出,--no-pager 改为正常的标准输出

journalctl _PID=888    --->查看指定进程的日志

journalctl /usr/bin/bash   ---> 查看某个路径的脚本的日志

journalctl UID=5246 --since today  --->查看指定用户的日志

journalctl -u nginx.service   --->查看某个 Unit 的日志

journalctl -u nginx.service --since today         --->查看某个 Unit 的日志

journalctl -u nginx.service -f   --->实时滚动显示某个 Unit 的最新日志

$ journalctl -u nginx.service -u php-fpm.service --since today  --->合并显示多个 Unit 的日志

.......

3)语言设置

systemd的命令localectl可以用来查看与设置系统的语言,也可以显示当前系统使用的语言。

localectl  set-locale  LANG=en_US.UTF-8          --->设置语言为英文

4)时间设置

Centos7中除了保留之前版本用的关于时间的命令date等命令外,还增加了timedatectl命令。可以用来查看当前时间相关的设置。

timedatectl  set-time  YYYY-MM-DD       - - - ->设置系统日期

timedatectl  set-time  HH-MM-SS            - - - ->设置系统时间

timedatectl  set-timezone  time_zone       - - - ->设置系统时区

5)登录系统的用户信息

systemd提供了查看登录系统用户信息的loginctl命令。可以查看当前登录用户的会话。

loginctl  list-users    ------>列出当前登录系统的用户

6)启动耗时

systemd最大的改进在于可以并行的启动系统服务进程,极大减少了系统引导时间,我们可以用systemd-analyze查看系统启动耗时。

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

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

相关文章

商汤书生大模型一次可读 30 万汉字;2023 年 Shopee Live 超100万马来人注册;2023年中国出生人口902万人;

今日精选 • 商汤“书生・浦语”2.0 大语言模型开源:200K 上下文,一次可读 30 万汉字• 2023年中国出生人口902万人• 2023 年 Shopee Live 有超 100 万马来人注册并观看直播 投融资 • Airbnb 2 亿美元收购人工智能初创公司 Gameplanner.AI• 哥伦比…

【JavaEEj进阶】 Spring实现留言板

文章目录 🎍预期结果🍀前端代码🎄约定前后端交互接⼝🚩需求分析🚩接⼝定义 🌳实现服务器端代码🚩lombok 🌲服务器代码实现🌴运⾏测试 🎍预期结果 可以发布并…

Vcast工程创建

Vcast工程创建 1.新建项目,创建工程名称 2.创建该工程下的项目组 3.设置项目组环境的名字 4.选择需要测试的源代码文件 5.选择被测文件,点击build 6.出现报错,点击报错窗口的按钮 进入报错详细页,查看详细信息 报错内容如下 Unstubbed Enti…

使用原生input模拟器样式正常,但是真机上 input框溢出

目录 一、问题 二、解决方法 三、总结 tiips:如嫌繁琐,直接移步总结即可! 一、问题 1.使用原生input写了一个搜索框,在模拟器和pc上一切正常。但是打包放到手机上,样式就有问题:这个搜索框的布局是正常的&#xf…

广州银行IPO再添堵:原董事长被查,资产质量承压,罚单频现

撰稿|行星 来源|贝多财经 广州银行的上市之路,或因前高管涉嫌违纪再添一层阴云。 前不久,广州市纪委监委披露的信息显示,广州银行原党委书记、董事长姚建军涉嫌严重违纪违法,正在接受纪律审查和监察调查。据贝多财经了解&#…

代码随想录-刷题第五十七天

42. 接雨水 题目链接:42. 接雨水 思路:本题十分经典,使用单调栈需要理解的几个问题: 首先单调栈是按照行方向来计算雨水,如图: 使用单调栈内元素的顺序 从大到小还是从小到大呢? 从栈头&…

【AI】RTX2060 6G Ubuntu 22.04.1 LTS (Jammy Jellyfish) 部署Chinese-LLaMA-Alpaca-2

下载源码 cd ~/Downloads/ai git clone --depth1 https://gitee.com/ymcui/Chinese-LLaMA-Alpaca-2 创建venv python3 -m venv venv source venv/bin/activate安装依赖 pip install -r requirements.txt 已安装依赖列表 (venv) yeqiangyeqiang-MS-7B23:~/Downloads/ai/Chi…

软件测试【测试用例设计】面试题详解

前言 今天笔者想和大家来聊聊测试用例,这篇文章主要是想要写给测试小伙伴们的,因为我发现还是有很多小伙伴在遇到写测试用例的时候无从下手,我就想和大家简单的聊聊,这篇文章主要是针对功能测试的。 一、微信功能测试 1.点击点…

QGroundControl Qt安卓环境搭建及编译出现的问题

记录Qt 5.15.2搭建安卓环境出现的各种问题。 zipalign tool not found: D:/JavaAndroid/Android/sdk/build-tools//zipalign.exe? 答:需要将DANDROID_PLATFORM升级到已下载的版本. bin/llvm-readobj.exe: error: unknown argument ‘–libs’ 答&…

07-微服务getaway网关详解

一、初识网关 在微服务架构中,一个系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢?如果没有网关的存在,我们只能在客户端记录每个微服务的地址,然后分别去调用。这样的话会产生很多问题,例…

链表的中间节点

链表的中间节点 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/middle-of-the-…

【1】SM4 CBC-MAC 机制

0x01 题目 MSG1: e55e3e24a3ae7797808fdca05a16ac15eb5fa2e6185c23a814a35ba32b4637c2 MAC1: 0712c867aa6ec7c1bb2b66312367b2c8 ----------------------------------------------------- MSG2: d8d94f33797e1f41cab9217793b2d0f02b93d46c2ead104dce4bfec453767719 MAC2: 4366…

Vue3的使用

一 Vue3的变化 1.性能的提升 打包大小减少41% 初次渲染快55%, 更新渲染快133% 内存减少54% 2.源码的升级 使用Proxy代替defineProperty实现响应式 重写虚拟DOM的实现和Tree-Shaking 3.拥抱TypeScript Vue3可以更好的支持TypeScript 4.新的特性 Composition API&#…

【UE 材质】简单的纹理失真、溶解效果

目录 1. 失真效果 2. 溶解效果 3. 失真溶解 我们一开始有这样一个纹理 1. 失真效果 其中纹理节点“DistortTexture”的纹理为引擎自带的纹理“T_Noise01”,我们可以通过控制参数“失真度”来控制纹理的失真程度 2. 溶解效果 3. 失真溶解

kafka简单介绍和代码示例

“这是一篇理论文章,给大家讲一讲kafka” 简介 在大数据领域开发者常常会听到MQ这个术语,该术语便是消息队列的意思, Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,与2010年…

HTML---Jquery选择器

文章目录 目录 文章目录 本章目标 一.Jquery选择器概述 二.Jquery选择器分类 基本选择器 层次选择器 属性选择器 三.基本过滤选择器 练习 本章目标 会使用基本选择器获取元素会使用层次选择器获取元素会使用属性选择器获取元素会使用过滤选择器获取元素 …

SQL Server 数据类型

文章目录 一、文本类型(字母、符号或数字字符的组合)二、整数类型三、精确数字类型四、近似数字(浮点)类型五、日期类型六、货币类型七、位类型八、二进制类型 一、文本类型(字母、符号或数字字符的组合) 在…

【物联网】物联网设备和应用程序涉及协议的概述

物联网设备和应用程序涉及协议的概述。帮助澄清IoT层技术栈和头对头比较。 物联网涵盖了广泛的行业和用例,从单一受限制的设备扩展到大量跨平台部署嵌入式技术和实时连接的云系统。 将它们捆绑在一起是许多传统和新兴的通信协议,允许设备和服务器以新的…

奥伦德光电耦合器5G通信领域及其相关领域推荐

光电耦合器是以光为媒介传输电信号的一种电-光-电转换器件。由于该器件使用寿命长、工作温度范围宽,所以在过程控制、工业通信、家用电器、医疗设备、通信设备、计算机以及精密仪器等方面有着广泛应用在当前工艺技术持续发展与提升的过程中,其工作速度、…

新能源汽车智慧充电桩方案:如何实现充电停车智慧化管理?

一、方案概述 基于新能源汽车充电桩的监管运营等需求,安徽旭帆科技携手合作伙伴触角云共同打造“智能充电设备+云平台+APP小程序”一体化完整的解决方案,为充电桩车位场所提供精细化管理车位的解决办法,解决燃油车恶意…