使用Linux之前需要了解的(一)

小小码农 2021年07月29日 914次浏览

上一章节大致说了下Linux的一些发行版,每个发行版都有自己的包管理器,使用的一些执行命令也不相同,如果想要深入学习Linux,首先第一条就是确定你所使用的Linux发行版以及该发行版的哪个版本,例如,我所使用的Linux发行版是CentOS,版本为CentOS 7,那么我就需要去找CentOS 7所使用的命令(yum),对应的特性以及相关依赖等等,不要盲目的去搜索,使用CentOS 7发行版,却搜索dnf的命令。下边我主要以 CentOS 7版本来介绍,其它版本请自行参考。
首先解释针对于Linux下几个名词以及其含义

BIOS

全拼 Basic I/O System 基本输入输出系统,常常说的主板BIOS系统就是这玩意了。

POST

全拼 Power On Self Test 上电自检,用于检验电脑硬件基本功能是否正常,是BOIS的组成部分(不要和HTTP的POST混为一谈)。

MBR

全拼 Master Boot Record 主引导记录

GRUB2

全拼 GRand Unified Bootloader,Version 2 系统引导装载程序,GRUB2是升级版,增加了一些东东,CentOS 7使用的就是GRUB2

systemd

全拼 System Daemon 系统守护进程,PID 恒为1 的初始化进程,是内核第一个加载的程序(CentOS 7),请注意,它被写为systemd,不是system Dsystem D,甚至是SystemD,因为它是一个系统守护进程,在Unix/Linux下,这些是小写的,并以小写的d作为后缀,因为用systemd管理系统,所以它被称为systemd

firewalld

提供防火墙功能

CentOS 7启动流程

BIOS(开机自检) MBR(主引导) GRUB2(选择内核) kernel(加载内核) systemd(初始化程序进行)

第一步

BIOS开机自检 执行POST,确认硬件的基本功能正常

第二步

POST结束后,BIOS查找接入的磁盘中引导记录,也就是 MBR,加载到内存中,执行引导代码

第三步

GRUB2定位和加载 Linux 内核到内存中,并转移控制权到内核

第四步

kernel 在选定的内核加载到内存中并开始执行后,在其进行任何工作之前,内核文件首先必须从压缩格式解压自身。一旦内核自解压完成,则加载 systemd 进程(其是老式 System V 系统的 init 程序的替代品),并转移控制权到 systemd

第五步

systemd 是所有进程的父进程。它负责将 Linux 主机带到一个用户可操作状态(可以执行功能任务)。可以管理运行中的 Linux 主机的许多方面,包括挂载文件系统,以及开启和管理 Linux 主机的系统服务等

systemd

CentOS 7 开始,使用 systemd 替代了 sysvinitsystemd对应的进程管理命令是systemctl,这玩意必须了解。
先介绍下 Unit,这个东西译为单元Unit文件统一了过去各种不同的系统资源配置格式,例如服务的启/停、定时任务、设备自动挂载、网络配置、设备配置、虚拟内存配置等,而 systemd 通过不同的文件后缀名来区分这些配置文件,下面是 systemd 所支持的12种 Unit 文件类型:

Unit TpyeDescription
Service units启动和控制守护进程及其组成的进程
Socket units封装了系统中的本地IPC或网络套接字,对于基于套接字的激活非常有用
Target units对于分组单元或在引导期间提供众所周知的同步点很有用
Device units暴露systemd中的内核设备,并可用于实现基于设备的激活
Mount units控制文件系统中的挂载点
Automount units提供自动挂载功能,用于按需挂载文件系统以及并行启动
Snapshot units可以用来临时保存systemd单元集的状态,以后可以通过激活保存的快照单元来恢复
Timer units对于触发基于计时器的其他单元的激活是有用的
Swap units封装了操作系统的内存交换分区或文件
Path units当文件系统对象发生变化或修改时,Path units可能用于激活其他服务
Slice units用于在分层树中对管理系统进程(如服务和范围单元)的单元进行分组,以达到资源管理的目的
Scope units类似于Service units,但是管理外部流程而不是启动它们

如果想看更为详细的介绍,我们可以在根目录输入命令:man systemd 它会打印systemd的帮助手册。

小结

systemd是系统和服务管理器,它提供了12种不同类型被称为units(单元)的不同实体之间的依赖系统。而units封装了与系统启动和维护相关的各种对象。大多数units都是在配置文件中配置的,也有一些特殊的units是在其它配置或者由系统动态创建或者在运行时以编程方式创建的。
个人理解就是把以前杂乱无章的配置文件按分类、功能等进行区分,方便开发和维护,就像是现在说的垃圾分类一样。
例如:Service units 这个类型,就是服务进程,类似windows中的服务,可以做开机启动等功能。
再比如:Target units 这个类型其作用相当于units分组,就像搭积木一样,把各个不同的积木拼成一个模型,我们可以将一个复杂的逻辑按功能不同,配置成不同类型的units,然后通过一个或多个target units将它们组合到一起,这中间,会有一些相关的依赖关系,就像我们开发一套订单系统,它支持生成订单与支付,我们第一步必须是先创建订单,然后才会支付。