ubuntu18.04 systemd配置学习手册(1) --相关概念

2023-05-16

1 从init系统说起

Linux 操作系统的启动首先从 BIOS 开始,接下来进入 boot loader,由 bootloader 载入内核,进行内核初始化。内核初始化的最后一步就是启动 PID 为 1 的 init 进程。这个进程是系统的第一个进程。它负责产生其他所有的用户进程。init 进程以守护进程(也就是服务)的方式存在,是所有其他进程的祖先。init 进程非常独特,能够完成其他进程无法完成的任务。
init 系统能够定义、管理和控制 init 进程的行为。它负责组织和运行许多独立的或相关的初始化工作(因此被称为 init 系统),从而让计算机系统进入某种用户预定义的运行模式,比如命令行模式或图形界面模式 。
对于一个操作系统而言,仅仅将内核运行起来是毫无实际用途的,必须由 init 系统将操作系统初始化为可操作的状态。比如启动 shell 后,便有了人机交互,这样就可以让计算机执行一些程序完成有实际意义的任务。或者启动 X 图形系统以便提供更佳的人机界面,更加高效的完成任务。这里,字符界面的 shell 或者 X 系统都是一种预设的运行模式。

随着计算机系统软硬件的发展,init 系统也在不断的发展变化之中。大体上的演进路线为 sysvinit -> upstart -> systemd。

1.1sysvinit

sysvinit 就是 System V 风格的 init 系统,顾名思义,它源于 System V 系列的 UNIX。最初的 linux 发行版几乎都是采用 sysvinit 作为 init 系统。sysvinit 用runlevel 来定义 “预订的运行模式”。比如 runlevel 3 是命令行模式,runlevel 5 是图形界面模式,runlevel 0 是关机,runlevel 6 是重启。sysvinit 会按照下面的顺序按部就班的初始化系统:

  1. 激活 udev 和 selinux
  2. 设置定义在 /etc/sysctl.conf 中的内核参数
  3. 设置系统时钟
  4. 加载 keymaps
  5. 加载 keymaps
  6. 启用交换分区
  7. 设置主机名(hostname)
  8. 根分区检查和 remount
  9. 激活 RAID 和 LVM 设备
  10. 开启磁盘配额
  11. 检查并挂载所有文件系统
  12. 清除过期的 locks 和 PID 文件
  13. 最后找到指定 runlevel 下的脚本并执行,其实就是启动服务。

除了负责初始化系统,sysvinit 还要负责关闭系统,主要是在系统关闭是为了保证数据的一致性,需要小心地按照顺序进行任务的结束和清理工作。另外,sysvinit 还提供了很多管理和控制系统的命令,比如 halt、init、mesg、shutdown、reboot 等等。
sysvinit 的优点是概念简单。特别是服务(service)的配置,只需要把启动/停止服务的脚本链接接到合适的目录就可以了。
sysvinit 的另一个重要优点是确定的执行顺序,脚本严格按照顺序执行(sysvinit 靠脚本来初始化系统),一个执行完毕再执行下一个,这非常有益于错误排查。
同时,完全顺序执行任务也是 sysvinit 最致命的缺陷。如果 linux 系统只用于服务器系统,那么漫长的启动过程可能并不是什么问题,毕竟我们是不会经常重启服务器的。但是现在 linux 被越来越多的用在了桌面系统中,漫长的启动过程对桌面用户来说是不能接受的。除了启动慢,sysvinit 还有一些其它的缺陷,比如不能很好的处理即插即用的设备,对网络共享磁盘的挂载也存在一定的问题,于是 init 系统开始了它的进化之旅。

1.2 upstart

upstart 是第一个被广泛应用的新一代 init 系统。
upstart 基于事件机制,比如 U 盘插入 USB 接口后,udev 得到内核通知,发现该设备,这就是一个新的事件。upstart 在感知到该事件之后触发相应的等待任务,比如处理 /etc/fstab 中存在的挂载点。采用这种事件驱动的模式,upstart 完美地解决了即插即用设备带来的新问题。采用事件驱动机制也带来了一些其它有益的变化,比如加快了系统启动时间。sysvinit 运行时是同步阻塞的。一个脚本运行的时候,后续脚本必须等待。这意味着所有的初始化步骤都是串行执行的,而实际上很多服务彼此并不相关,完全可以并行启动,从而减小系统的启动时间。

upstart 的特点

upstart 解决了之前提到的 sysvinit 的缺点。采用事件驱动模型的 upstart 可以:
更快地启动系统
当新硬件被发现时动态启动服务
硬件被拔除时动态停止服务
这些特点使得 upstart 可以很好地应用在桌面或者便携式系统中,处理这些系统中的动态硬件插拔特性。

2 systemd

2.1 systemd概念

systemd 是 linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd 和 ubuntu 的 upstart 是竞争对手,但是时至今日 ubuntu 也采用了 systemd,所以 systemd 在竞争中胜出,大有一统天下的趋势。其实,systemd 的很多概念都来源于苹果 Mac OS 操作系统上的 launchd。
systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。
架构Systemd(系统管理守护进程),最开始以GNU GPL协议授权开发,现在已转为使用GNU LGPL协议,它是如今讨论最热烈的引导和服务管理程序。如果你的Linux系统配置为使用Systemd引导程序,它取替传统的SysV init,启动过程将交给systemd处理。Systemd的一个核心功能是它同时支持SysV init的后开机启动脚本。

Systemd引入了并行启动的概念,它会为每个需要启动的守护进程建立一个套接字,这些套接字对于使用它们的进程来说是抽象的,这样它们可以允许 不同守护进程之间进行交互。Systemd会创建新进程并为每个进程分配一个控制组(cgroup)。处于不同控制组的进程之间可以通过内核来互相通信。systemd处理开机启动进程的方式非常漂亮,和传统基于init的系统比起来优化了太多。让我们看下Systemd的一些核心功能。

和init比起来引导过程简化了很多
Systemd支持并发引导过程从而可以更快启动
通过控制组来追踪进程,而不是PID
优化了处理引导过程和服务之间依赖的方式
支持系统快照和恢复
监控已启动的服务;也支持重启已崩溃服务
包含了systemd-login模块用于控制用户登录
支持加载和卸载组件
低内存使用痕迹以及任务调度能力
记录事件的Journald模块和记录系统日志的syslogd模块

Systemd同时也清晰地处理了系统关机过程。它在**/usr/lib/systemd/**目录下有三个脚本,分别叫systemd- halt.service,systemd-poweroff.service,systemd-reboot.service。这几个脚本会在用户选择 关机,重启或待机时执行。在接收到关机事件时,systemd首先卸载所有文件系统并停止所有内存交换设备,断开存储设备,之后停止所有剩下的进程。

兼容性

systemd 提供了和 sysvinit 兼容的特性。系统中已经存在的服务和进程无需修改。这降低了系统向 systemd 迁移的成本,使得 systemd 替换现有初始化系统成为可能。

启动速度

systemd 提供了比 upstart 更激进的并行启动能力,采用了 socket / D-Bus activation 等技术启动服务。一个显而易见的结果就是:更快的启动速度。为了减少系统启动时间,systemd 的目标是:

尽可能启动更少的进程
尽可能将更多进程并行启动

systemd 提供按需启动能力

当 sysvinit 系统初始化的时候,它会将所有可能用到的后台服务进程全部启动运行。并且系统必须等待所有的服务都启动就绪之后,才允许用户登录。这种做法有两个缺点:首先是启动时间过长,其次是系统资源浪费。
某些服务很可能在很长一段时间内,甚至整个服务器运行期间都没有被使用过。比如 CUPS,打印服务在多数服务器上很少被真正使用到。您可能没有想到,在很多服务器上 SSHD 也是很少被真正访问到的。花费在启动这些服务上的时间是不必要的;同样,花费在这些服务上的系统资源也是一种浪费。
systemd 可以提供按需启动的能力,只有在某个服务被真正请求的时候才启动它。当该服务结束,systemd 可以关闭它,等待下次需要时再次启动它。
这有点类似于以前系统中的 inetd,并且有很多文章介绍如何把过去 inetd 管理的服务迁移到 systemd。

采用 linux 的 cgroups 跟踪和管理进程的生命周期

启动挂载点和自动挂载的管理

实现事务性依赖关系管理

日志服务

详见: https://www.linuxidc.com/Linux/2018-03/151291.htm

unit

unit的配置文件是unit的核心,在配置文件中主要包含:

  1. 需要管理服务或者程序

  2. 服务或者程序需要监听的套接字

  3. 保存的系统快照(就是制作快照的时候,系统中各个服务的状态)

  4. 其他和init相关的配置

unit配置文件的位置

/lib/systemd/system         本地配置的系统单元
/run/systemd/system         运行时配置的系统单元
/usr/lib/systemd/system      第三方软件的系统单元(sshd,nginx..)

注意:unit(单元)和init中的服务脚本类似,但是不相同

类型1:service unit,这是服务类型的unit,该类unit后缀是 .service,比如nginx.service,通过这个nuit可以实现启动、关闭、查看状态等
该类unit位于 /usr/lib/systemd/system
注意:unit本质上来说并不是脚本,而仅仅是systemd一个配置文件,因此这个unit文件不具有执行权限,而且也无法执行
启动服务的方式:通过让systemd去读取配置文件中的内容,完成nginx进程的启动
类型2:device unit,这是设备unit,该类unit的后缀是.device,这类unit的作用是用来识别设备文件
类型3:mount unit,后缀 .mount,用来实现挂载文件系统到指定的挂载点
类型4:socket unit,后缀.socket,用来表示进程间通信的socket文件
类型5:snapshot nuit:快照unit,后缀.snapshot, 用来管理快照
类型6:target unit:目标unit,后缀是 .target,模拟centos5、6上的运行级别(主要是为了向后兼容)
类型7:swap unit
类型8:path unit

target 和运行级别

systemd 用目标(target)替代了运行级别的概念,提供了更大的灵活性,如您可以继承一个已有的目标,并添加其它服务,来创建自己的目标。下表列举了 systemd 中的 target 和 sysvinit 中常见的 runlevel 的对应关系:
在这里插入图片描述
更多参考:
CentOS7进程管理systemd详解 http://www.linuxidc.com/Linux/2016-09/135464.htm
CentOS7/RHEL7 systemd详解 http://www.linuxidc.com/Linux/2015-04/115937.htm
为什么systemd会被如此迅速的采用? http://www.linuxidc.com/Linux/2014-08/105789.htm
systemd 与 sysVinit 彩版对照表 http://www.linuxidc.com/Linux/2014-09/106455.htm
太有用了!用systemd命令来管理Linux系统! http://www.linuxidc.com/Linux/2014-09/106490.htm
浅析 Linux 初始化 init 系统,第 3 部分: Systemd http://www.linuxidc.com/Linux/2014-12/110383.htm

2.2再次理解linux系统启动

在我们打开Linux电脑的电源后第一个启动的进程就是init。分配给init进程的PID是1。它是系统其他所有进程的父进程。当一台 Linux电脑启动后,处理器会先在系统存储中查找BIOS,之后BIOS会检测系统资源然后找到第一个引导设备,通常为硬盘,然后会查找硬盘的主引导记录(MBR),然后加载到内存中并把控制权交给它,以后的启动过程就由MBR控制。

主引导记录会初始化引导程序(Linux上有两个著名的引导程序,GRUB和LILO,80%的Linux系统在用GRUB引导程序),这个时候 GRUB或LILO会加载内核模块。内核会马上查找/sbin下的“init”程序并执行它。从这里开始init成为了Linux系统的父进程。init 读取的第一个文件是/etc/inittab,通过它init会确定我们Linux操作系统的运行级别。它会从文件/etc/fstab里查找分区表信息 然后做相应的挂载。然后init会启动/etc/init.d里指定的默认启动级别的所有服务/脚本。所有服务在这里通过init一个一个被初始化。在这 个过程里,init每次只启动一个服务,所有服务/守护进程都在后台执行并由init来管理。

关机过程差不多是相反的过程,首先init停止所有服务,最后阶段会卸载文件系统。

以上提到的启动过程有一些不足的地方。而用一种更好的方式来替代传统init的需求已经存在很长时间了。也产生了许多替代方案。其中比较著名的有Upstart,Epoch,Muda和Systemd。而Systemd获得最多关注并被认为是目前最佳的方案。

2.3 Systemd结构概览

让我们看一下Linux系统在使用systemd作为引导程序时的开机启动过程的结构性细节。为了简单,我们将在下面按步骤列出来这个过程:

  1. 当你打开电源后电脑所做的第一件事情就是BIOS初始化。BIOS会读取引导设备设定,定位并传递系统控制权给MBR(假设硬盘是第一引导设备)。
  2. MBR从Grub或LILO引导程序读取相关信息并初始化内核。接下来将由Grub或LILO继续引导系统。如果你在grub配置文件里指定了 systemd作为引导管理程序,之后的引导过程将由systemd完成。Systemd使用“target”来处理引导和服务管理过程。这些 systemd里的“target”文件被用于分组不同的引导单元以及启动同步进程。
  3. systemd执行的第一个目标是default.target。但实际上default.target是指向graphical.target的 软链接。Linux里的软链接用起来和Windows下的快捷方式一样。文件Graphical.target的实际位置是/usr/lib /systemd/system/graphical.target。
  4. 在这个阶段,会启动multi-user.target而这个target将自己的子单元放在目录“/etc/systemd/system/multi-user.target.wants”里。这个target为多用户支持设定系统环境。非root用户会在这个阶段的引导过程中启用。防火墙相关的服务也会在这个阶段启动。"multi-user.target"会将控制权交给另一层“basic.target”。
  5. "basic.target"单元用于启动普通服务特别是图形管理服务。它通过/etc/systemd/system/basic.target.wants目录来决定哪些服务会被启动,basic.target之后将控制权交给sysinit.target.
  6. "sysinit.target"会启动重要的系统服务例如系统挂载,内存交换空间和设备,内核补充选项等等。sysinit.target在启动过程中会传递给local-fs.target。
  7. local-fs.target,这个target单元不会启动用户相关的服务,它只处理底层核心服务。这个target会根据/etc/fstab和/etc/inittab来执行相关操作。

2.4 系统引导性能分析

Systemd提供了工具用于识别和定位引导相关的问题或性能影响。Systemd-analyze是一个内建的命令,可以用来检测引导过程。你可以找出在启动过程中出错的单元,然后跟踪并改正引导组件的问题。在下面列出一些常用的systemd-analyze命令。
systemd-analyze time 用于显示内核和普通用户空间启动时所花的时间。
systemd-analyze blame 会列出所有正在运行的单元,按从初始化开始到当前所花的时间排序,通过这种方式你就知道哪些服务在引导过程中要花较长时间来启动。
systemd-analyze verify 显示在所有系统单元中是否有语法错误。

systemd-analyze plot 可以用来把整个引导过程写入一个SVG格式文件里。整个引导过程非常长不方便阅读,所以通过这个命令我们可以把输出写入一个文件,之后再查看和分析。下面这个命令就是做这个。

 systemd-analyze plot > boot.svg
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu18.04 systemd配置学习手册(1) --相关概念 的相关文章

  • 如何对日志文件进行二分查找?开源文件二分查找工具『timecat』介绍

    这篇文章是我从自己的博客搬运过来的 转载请注明 xff1a 吹水小镇 reetsee com 原文链接地址 xff1a http blog reetsee com archives 502 要获得更好的阅读体验 xff0c 欢迎大家到这篇文
  • 阿里的电话面试是神马感觉

    感觉就是被问了个稀巴烂 xff0c 估计到不了下一轮 问了神马呢 xff0c 问了我的项目 xff0c 我描述了一阵子之后 xff0c 当他问到使用人数的时候 xff0c 我说是内部使用 没有发布 xff0c 只是一件比赛的作品的时候 xf
  • 找出带环单向链表的环入口(交点)

    其实这个问题已经被问烂了 xff0c 但是之前没有想透 xff0c 今天算是解决得差不多 找环的入口这个问题 xff0c 其实是建立在另外一个问题之上的 判断单向链表是否有环 土方法很多 xff0c 但是比较好的目前就那么一个 xff1a
  • 关于我最近看的一本书——大名鼎鼎的APUE

    APUE xff0c Know as Unix环境高级编程 xff0c 我每天都在用自己的绳命去看 xff0c 每天都燃烧自己去看 什么样的书 xff0c 一看就是上乘之中的珍稀之品 xff1f 这本 不同于不少机械工业出版社的大部头 xf
  • 复杂网络笔记-R语言

    最近学习了下复杂网络相关的东西 xff0c 总结了部分基础的理论 xff0c 与使用R语言igraph包 xff0c 总结如下 xff0c 还需要继续深入 xff0c 目前只学了皮毛 复杂网络的复杂性 1 结构复杂性 网络连接结构看上去错综
  • 写博客加分不

    写第一篇博客 xff0c 就看看加分不 xff0c 这个网站分很重要 xff0c 不然下不了东西
  • 谨以此文献给才毕业一两年的朋友

    谨以此文献给才毕业一两年的朋友 选自同事信件 谨以此文献给才毕业一两年的朋友我们终于进入了这个社会 从此结束了被学校老师看管的生涯 xff0c 结束了做父母乖宝贝的日子 xff0c 也结束从父母兄长那里拿钱的幸福时光 我们从家里搬了出来 x
  • layui实际项目使用过程中遇到的兼容性问题

    layui实践兼容 本文记录自己在layui的实际使用过程中遇到的一些兼容性问题 xff0c 烂笔头 gt gt gt 大脑 layui在vue项目中不能自动渲染的问题 下载layui源码到本地 xff0c 在vue的项目中引用 xff0c
  • Vue从零开始01——Vue双向绑定原理和MVVM

    Vue是一个主张较弱的渐进式框架 xff0c 什么是主张弱的渐进式框架呢 xff1f 主张弱和渐进式说的都是 xff0c 可以灵活的选取你需要用的东西和不需要用的东西 xff0c 需要用的就引进来 xff0c 不需要用的就不引 xff0c
  • layui数据表格复选框自动选中部分选项

    layui数据表格复选框自动选中部分选项 layui官方文档中给出了数据表格复选框全选字段 xff0c 如下 xff0c 但是部分选中没有配置项 部分选中的方法 xff1a 利用异步数据接口的参数 xff1a 实现代码 xff1a layu
  • Js代码收藏大全

    1 nc ntextmenu 61 34 window event returnvalue 61 false 34 将彻底屏蔽鼠标右键 lt table border nc ntextmenu 61 return false gt lt t
  • jenkins(linux)远程构建windows项目(超详细)

    1 背景 公司开发的资产管理探针需要在linux unix windows上分别部署 xff0c 使用自动化构建jenkins工具远程部署linux平台容易实现 xff0c windows比较折腾 xff0c 现将个人经验分享 2 环境 I
  • jq实现点击一个按钮,触发另一个点击事件

    jq实现点击一个按钮 xff0c 触发另一个点击事件 span class token function span span class token punctuation span span class token string 34 a
  • Promise.race()异步超时处理

    span class token keyword function span span class token function timeoutPromise span span class token punctuation span p
  • Ztree点击树节点选中前面的复选框

    span class token keyword var span setting span class token operator 61 span span class token punctuation span check span
  • 关于vue-cli项目搭建完成之后的yarn serve启动指令

    在项目的配置文件package json里面 xff0c 声明了两条指令的快捷指令 xff0c 当执行yarn serve的时候就相当于执行了vue cli service serve这条指令
  • Vue项目url中的BASE_URL解析

    在Vue中遇到很多url都用到了 lt 61 BASE URL gt 这个东西 span class token operator lt span span class token operator 61 span span class t
  • VSCode 中 js 文件类型注释报错的问题解决

    在阅读 Vue js 源码的时候遇见的一个问题 xff0c 本来可以忽略的玩意 xff0c 但是报错的波浪线 xff0c 如鲠在喉实在受不了 xff0c 解决之 报错说明 Type annotations can only be used
  • 3-3-07-nuxtjs案例realworld-nuxtjs

    realworld nuxtjs 项目地址 xff1a https gitee com dingxd9702 realworld nuxtjs 创建项目 mkdir realworld nuxtjsyarn init yyarn add n
  • 3-4-01-搭建自己的 Server Side Render

    搭建自己的 Server Side Render Vue 实例的服务端渲染 使用 vue server renderer 插件完成 vue 实例的服务端渲染使用 express 创建一个 node 服务器fs 模块读取 html 模板 sp

随机推荐

  • css实现超出部分显示省略号

    显示一行 xff0c 省略号 white span class token operator span space span class token punctuation span nowrap span class token punc
  • 正则表达式 匹配字符串 matches()方法的运用

    package cn niit demo5zhengze 正则表达式 匹配字符串 matches 方法的运用 public class Test public static void main String args checkQQ che
  • Blazor组件自做三 : 使用JS隔离封装ZXing扫码

    本文基础步骤参考前两篇文章 Blazor组件自做一 使用JS隔离封装viewerjs库 Blazor组件自做二 使用JS隔离制作手写签名组件 1 在文件夹wwwroot lib 添加zxing子文件夹 里面下载库文件 文件文末源码里可复制
  • zabbix报警方式,邮件报警和微信报警。

    整理csdn时候发现了一篇2016年整理zabbix报警不知道当时啥情况没有发布出去 xff0c 凑个数重新发布 最近这些天都在弄Zabbix不再只是简单的监控物理硬件 xff0c 服务端口 xff0c 流量图等 让Zabbix的功能发挥到
  • itk registration 1

    参考 xff1a https itk org ITKSoftwareGuide html Book2 ITKSoftwareGuide Book2ch3 html x26 1740003 18 图像配准是确定将一幅图像上的点映射到另一幅图像
  • 凤凰涅槃

    涅槃 xff0c 涅槃 xff0c 太阳般灿烂 xff0c 黑色的凤凰飞入烈火 xff0c 一切腐朽烧干 涅槃 xff0c 涅槃 xff0c 大海般坦然 xff0c 红色的凤凰浴火重生 xff0c 一切希望复燃 涅槃 xff0c 涅槃 xf
  • Qt单个模块的编译

    有可能使用的Qt没有自己需要的模块 xff0c 这个时候就只能自己去编译这个模 本次就拿QWebEngine这个模块来讲 xff0c 这个模块比较复杂 xff0c 编译很容易出问题
  • H5/js/web lottie解析json 播放视频或动画

    H5 js web lottie解析json 播放视频或动画 1 需要UI设计的小伙伴用AE把效果图导出时导成JSON格式 xff0c 并且把json引入到你需要用到的项目里面2 在index html中引入lottie min js3 查
  • VirtualBox虚拟机闪退后如何重新打开

    电脑 xff08 Mac系统 xff09 由于某种问题自动重启了 xff0c 重启后之前在用的VirtualBox xff08 虚拟机管理器 xff09 能恢复运行 xff0c 但VirtualBoxVM xff08 虚拟机终端 xff09
  • (五)建筑物多边形化简系列——最小外接矩形的获取

    最小外接矩形问题是在给出一个多边形 xff08 或一群点 xff09 xff0c 求出面积最小且外接多边形的矩形的问题 这个问题看起来并不难 xff0c 但是具体实现并不简单 除了调用现有的公开库之外 xff0c 这里给出一种简单且易理解的
  • 使用 LxRunOffline 实现 WSL 自定义安装、备份

    本文初衷是想在非默认目录下安装WSL xff0c 查阅资料后用LxRunOffline了解并实现了WSL自定义安装 前言 虽说目前的 WSL 在 Windows 10 生态中已经越发成熟 xff0c 但在实际使用中依旧存在一些不足之处 xf
  • [Python基础] @statismethod和@classmethod中的注意事项

    声明 xff1a 以下讨论将区别方法 xff08 method xff09 和函数 xff08 function xff09 两个概念 xff0c 方法依托于对象 xff0c 而函数可以脱离对象之外存在 众所周知 xff0c python类
  • centos安装chrome 无法运行 Running as root without --no-sandbox is not supported ygote_host_impl_linux.cc

    launcher Failed to get the debug url 0313 145713 562233 ERROR zygote host impl linux cc 90 Running as root without no sa
  • Blazor组件自做七: 使用JS隔离制作定位/持续定位组件

    1 运行截图 演示地址 2 在文件夹wwwroot lib 添加geolocation子文件夹 添加geolocation js文件 本组件主要是调用浏览器两个API实现基于浏览器的定位功能 现代桌面和移动端都支持 包括MAUI Blazo
  • 普通表转换分区表操作步骤

    普通表转换分区表操作步骤 1 转分区表原因 生产数据库 xff0c 一张表 xff0c 一亿多行数据 xff0c 绝大部分查询按月为维度做时间范围查询 xff0c 未分区状态下 xff0c 查询IO量大 xff0c 计划以分区截剪的方式减少
  • 信号量的实现和应用

    信号量的实现和应用 一 实验环境 本次实验的操作环境还是一样的实验环境 环境文件如下 xff1a 如果不清楚的话请参考往期博客 二 实验目标与内容 1 目标 xff1a 加深对进程同步与互斥概念的认识 xff1b 掌握信号量的使用 xff0
  • Linux常用软件包(常用命令)

    文章目录 Linux应用程序基础RPM包管理工具rpm命令的格式查询RPM软件包信息应用程序与系统命令的关系软件包的封装类型rpm软件包查询未安装的 RPM 软件包文件中信息安装 升级 卸载 RPM 软件包yum常用的操作命令 编译安装编译
  • KBQA的工作流程(基于检索的方法)

    KBQA的工作流程 基于检索的方法 图谱构建阶段 注 采用neo4j的方法进行建立图数据库 1 数据准备 结构化数据 例如mysql的关系型数据库 进行整理 导出为csv 半结构化数据 采用包装器技术 进行抽取 之后 进行清洗 文本数据 采
  • 可解压rar、zip且可打包7z的powershell命令

    安装模块 Install Module 7zip4powershell 为什么要使用7zip 1个原因是传统zip只支持最大2gb的文件 xff0c 而7zip支持 16 xff0c 000 xff0c 000TB大的文档 xff0c 另一
  • ubuntu18.04 systemd配置学习手册(1) --相关概念

    1 从init系统说起 Linux 操作系统的启动首先从 BIOS 开始 xff0c 接下来进入 boot loader xff0c 由 bootloader 载入内核 xff0c 进行内核初始化 内核初始化的最后一步就是启动 PID 为