一、Linux软件包和进程
(一)RPM 管理工具
1.概念
RPM(Redhat Package Manager)是由 Red Hat 公司提出的一种软件包管理标准,也是 Linux 各发行版中应用最广泛的软件包格式之一(与Debian的deb安装包齐名)。其产生的主要目的是为了减少用户的安装编译时间------软件制作者在其工作环境下将软件预先编译完成后再进行发布,但这也带来了一个关键要求:用户的软件安装环境必须与制作者的编译环境保持一致。
安装软件要求:
软件安装环境必须与打包软件环境一致
必须满足软件依赖性
软件卸载时必须小心,最底层软件不能先卸载
软件包命名格式:软件名-版本号-发行号.操作系统版本.硬件平台的类型.rpm
2.rpm 软件安装
(1)格式
rpm -参数 软件包名
(2)参数
|---------------|-----------------|
| 参数 | 说明 |
| -i, --install | 安装软件包 |
| --nodeps | 不验证软件包依赖 |
| --force | 安装时提示已安装则重新覆盖安装 |
| -v, --verbose | 提供更多的详细信息输出 |
| -U | 软件包升级 |
| -e | 软件包卸载 |
| -h | 显示包的哈希值 |
(3)安装过程
读取PRM软件包头部数据,进行软件依赖性查询
若满足条件则安装否则安装失败
3.示例
安装 nginx:


安装 qq(显示错误原因是未安装 libXScrnSaver,用 yum 安装即可):



4.rpm 查询功能
格式:rpm --q 包名(-q 常与下面参数组合使用)
|----|---------------|
| 参数 | 说明 |
| -a | 查询所有已安装的软件包 |
| -l | 查看已安装软件的分布情况 |
| -f | 查询某个文件归属于那个软件 |
| -i | 查看软件包详情 |
示例:

(二)YUM/DNF 管理工具
1.概念
YUM(Yellow dog Updater, Modified)是一个基于 RPM 包管理的开源软件批量管理工具,它通过自动分析软件依赖关系并直接从仓库安装,解决了传统 RPM 手动安装时的依赖难题。在 RHEL9 及后续版本中,默认的软件包管理器已替换为执行效率更高、性能更优的 DNF(Dandified YUM),它作为 YUM 的下一代版本,继承了原有命令习惯------系统中的 yum 命令仅为 dnf 的软链接,因此用户仍可沿用熟悉的 yum 语法进行软件管理。

功能:
YUM/DNF 的核心价值在于实现了 RPM 软件包的自动化全生命周期管理。它能够根据用户指令在线下载、安装、卸载、升级指定的软件包,并在此过程中自动分析软件之间的依赖关系。当发现所需依赖时,工具会一次性从仓库中查找并下载所有相关的 RPM 包,无需管理员逐个手工干预,从而彻底解决了传统 RPM 安装时令人头疼的"依赖链地狱"问题,极大简化了 Linux 系统的软件管理复杂度。
工作原理:
将编译好的软件放置在YUM服务器中,并将这些软件的依赖性等信息记录下来形成表格组成数据库。
用户安装软件时会向网络中的YUM服务器下载对应表格并与本机RPM数据库进行比较,最后一同下载全部软件进行安装,自动解决依赖性。
YUM软件仓库:记录软件依赖性等信息的数据库。

系统会去读取 /etc/yum.repos.d/ 目录下的 .repo 结尾的文件,从该文件中读取以下内容实现装包:
包含各种 rpm 安装文件的软件仓库(rhel8开始有两个仓库,rhel7只有一个仓库)
BaseOS 存储库:提供一套核心的底层操作系统功能,为基础软件安装库
AppStream 存储库:包括额外的用户空间应用程序、运行时语言和数据库
2.命令
(1)查看包、包组相关信息
查看系统中 yum 资源库配置信息:yum repolist [all]
列出仓库里所有可安装的软件包:yum list all
列出己经安装的所有的或指定的 rpm 包(包名中可使用匹配符):yum list installed [包名]
查看指定软件包的详细信息:yum info 包名
查看仓库里而所有包组:yum grouplist
查看指定包组里而的详细信息:yum groupinfo 包组名
(2)安装、更新包和包组
安装指定的软件包,-y 则在工作过程中需要使用者响应, 这个参数可以直接回答 yes:yum install [-y]
升级指定的软件包或主机中所有已安装的软件包:yum update [-y] 包名
安装指定包组里面的所有包:yum groupinstall 包组名
(3)卸载软件包
卸载已经安装在系统中的指定的软件包:yum remove [-y] 包名
(4)搜索文件的所属包
查找指定的文件属于哪个包:yum provides 文件名
查看这个文件是由哪个包提供的:yum whatprovides /etc/fstab
(5)模糊搜索包名
查看模糊包名的软件包:yum search 模糊包名
(6)缓存
创建元数据缓存:yum makecache
清除下载到本机的指定的软件包或所有软件包的 yum 源缓存:yum clean packages all
3.配置 yum 源
(1)建立本地源
先将本地光盘挂载至本地目录 /media 下:

再移动到 yum 源配置文件路径,并备份已存在 yum 源配置文件,使其失效:

新建本地 yum 源配置文件:


重建缓存:

验证能否成功安装:

(2)建立网络源
由于Red Hat Enterprise Linux 9(RHEL 9)暂时没有公开的免费网络源,但因其与 CentOS Stream 9 的高度兼容性,可以借用 CentOS 9 的 yum 源来实现软件安装。具体操作时,可通过 XFTP 等文件传输工具,将事先准备好的 CentOS 9 仓库配置文件(.repo文件)上传至系统的 /etc/yum.repos.d/ 目录中。完成文件放置后,需重建缓存,使新配置的仓库生效,之后即可像使用原生源一样正常安装和管理软件包。
(3)安装EPEL红帽扩展源
官网:https://docs.fedoraproject.org/en-US/epel/
安装:

(三)源码下载安装软件
1.概念
源码文件是程序员使用 C、C++ 等语言编写的原始代码文本,通常会被打包成 .tar.gz 或 .tar.bz2 格式的压缩文件,以方便存储和分发。
2.特点
高度可移植与环境适应性强:源码包几乎不依赖特定的运行环境,只要目标平台拥有标准的编译工具(如GCC、Make),即可进行安装。这使得它在多种硬件架构和操作系统版本之间具有良好的可移植性。
运行效率极致优化:由于源码包需要在本地机器上编译,编译器会根据当前 CPU 的架构、内存大小等硬件特性进行深度优化(即"量体裁衣")。因此,编译出的二进制程序通常比预编译的二进制包(如RPM)运行效率更高、更稳定。
安装功能高度定制化:在编译前,用户可以通过配置参数(如./configure --prefix=/usr/local --enable-feature)精确控制安装路径、选择需要启用的功能模块,或者剔除不需要的组件。这种灵活性允许用户打造真正"小而精"的软件。
管理方式简单直接:源码包的卸载非常彻底,因为所有文件通常都隔离在指定的安装目录(如/usr/local/app)中,直接删除该目录即可完成卸载。这种机制避开了像 Windows 注册表那样的复杂依赖关系管理,不存在残留的垃圾文件。
显著的缺点------安装过程复杂且耗时:这是源码包最大的使用成本。用户需要手动解决复杂的依赖关系(缺少某个库会导致编译失败)、经历配置-编译-安装的多个命令行步骤,并且编译大型软件(如Chromium、GCC本身)可能需要数小时。此外,没有自动化的依赖跟踪机制,意味着升级或删除某个软件可能会导致其他编译安装的软件出现兼容性问题。
3.安装过程
下载解压缩源码压缩包
分析安装软件环境
编译软件
安装软件
4.示例
准备工作:

下载 apache 源码包:

解压缩:

安装环境分析:
软件包目录中有 configure 可执行文件,用于对安装环境进行测试、检测所需库文件、工具文件是否存在、检测依赖关系、编译器汇编器连接器的检查。

编译软件:
作用:安装 ./configure 命令生成的 Makefile 文件中记录的信息进行编译,生成二进制安装文件。
注意:make 过程中若报错,需要查看提示信息,根据信息修改,一般为缺少头文件等问题。

安装软件:
根据 make 命令生成的二进制安装文件,进行软件安装,默认安装目录:usr/local 或者 /usr/loacl/bin 目录下:

也可以使用符号连接多条语句:

(四)管理进程
1.概念
(1)程序、进程、线程
程序: 二进制文件,文件存储在磁盘中,例如 /usr/bin/ 目录下。
进程:进程是已启动的可执行程序的运行实例。
进程和程序并不是对应的关系,相同的程序运行在不同的数据集上就是不同的进程。
线程:是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程才能被执行。
(2)进程分类

2.查看进程
(1)ps 命令
作用:显示某个时间点的程序运行情况
格式:ps -参数
参数:
-a :显示所有用户的进程
-u :显示用户名和启动时间
-x :显示 没有控制终端的进程
-e :显示所有进程,包括没有控制终端的进程
-l :长格式显示
-w:宽行显示,可以使用多个 w 进行加宽显示
-f:做一个更完整的输出
示例:
查看当前用户的进程:

说明:
F:代表这个程序标志(process flags),说明这个程序的权限。常见号码有------4,表示此程序的权限为 root ;1,表示此子程序仅进行复制(fork)而没有实际执行(exec)
S:代表这个程序的状态(STAT),主要的状态有------
R(Running):该程序正在运作中;
S(Sleep):该程序目前正在睡眠状态(idle),但可以被唤醒;
D:不可被唤醒的睡眠状态,通常可能是在等待 I/O 的情况;
T:停止状态(stop),可能是在工作控制(后台暂停)或 traced 状态;
Z(Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。
+:位于后台的进程组
UID/PID/PPID:代表此程序被该 UID 所拥有/程序的 PID 号码/此程序的父进程 PID 号码。
C:代表 CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice的缩写,代表此程序被 CPU 所执行的优先顺序,数值越小代表该程序越快被CPU执行。
ADDR/SZ/WCHAN:都与内存有关,ADDR 是 kernel funcition,指出该程序在内存的哪个部分,如果是 running 的程序,一般会显示-。SZ 代表此程序用掉多少内存,WCHAN 表示目前程序是否运作中,若为-表示正在运行。
TTY:登入者的终端机位置,若为远程终端登入则使用动态终端界面(pts/n)。
TIME:使用掉的 CPU 时间,即此程序实际花费 CPU 运作的时间。
CMD:触发此进程的指令是什么。
查看所有用户执行的进程的详细信息:

查看当前用户的资源占用:

说明:
USER: 运行进程的用户
PID: 进程ID
%CPU: CPU占用率
%MEM: 内存占用率
VSZ: 占用虚拟内存
RSS: 占用实际内存 驻留内存
TTY: 进程运行的终端
STAT: 进程状态 man ps (/STATE)


START: 进程的启动时间
TIME: 进程占用CPU的总时间
COMMAND: 进程文件,进程名
自定义显示字段:

查看进程树:

查看指定进程的 PID:


(2)top 命令
格式:top [-d 数字] | [-bnp]
参数:
-d:后面可以接秒数,就是整个进程界面更新的秒数,默认是5秒
-b:以批次的方式执行 top,还有更多的参数可用。通常会搭配数据流重定向来将批处理的结果输出为文件。
-n:与 -b 搭配,进行几次 top 的输出结果
-i:不显示闲置或者僵死的进程信息
-c:显示进程的整个命令路径,而不是只显示命令名称
-s:使 top 命令在安全模式下运行,此时 top 的交互式指令被取消,避免潜在危险
-p:指定某些个 PID 来进行查看检测


top 的输出可以分为统计信息区和进程信息区两个部分,即前5行为统计信息区,后面为进程信息区。
统计信息区:
第一行:top - 06:52:52 up 9:48, 3 users, load average: 0.04, 0.04, 0.01
06:52:52 表示当前系统时间;
up 9:48 表示系统已经启动4小时32分钟了;
3 users 表示当前登录系统的用户数;
load average: 0.04, 0.04, 0.01表示系统1分钟、5分钟、15分钟前到现在的平均负载(如果是1表示满负载)
第二行:Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
1 total 进程的总数
0 running 正在运行的进程数
1 sleeping 处于休眠状态的进程数
0 stopped 停止的进程数
0 zombie 僵死的进程数
第三行:%Cpu(s): 0.0 us, 0.5 sy, 0.0 ni, 99.5 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
0.0 us 表示用户进程占用CPU的百分比
0.5 sy 系统进程占用CPU的百分比;
0.0 ni 用户进程空间内改变过优先级的进程占用CPU的百分比
99.5 id 空闲CPU占用的百分比
0.0 wa 代表I/Owait表示等待输入、输出的进程占用CPU的百分比;
0.0 hi 表示cpu服务于硬件中断所耗费的时间总额
0.0 si 表示cpu服务于软件中断所耗费的时间总额;
0.0 st 表示虚拟机被hypervisor偷去的cpu时间
另外,如果是多内核设备,可按下数字键"1"来切换成不同 cpu 的负载率。
第四、五行:
MiB Mem : 1743.4 total, 707.0 free, 745.5 used, 457.8 buff/cache
MiB Swap: 2048.0 total, 1541.0 free, 507.0 used. 997.9 avail Mem
total 系统的内存大小
free 目前空余内存大小
used 已经使用的内存大小

**进程信息区:**显示了每个进程的运行状态
PID:进程的id
USER:进程所有者的用户名
PR:进程优先级
NI:nice值。负值表示高优先级,正值表示低优先级
VIRT:进程使用的虚拟内存总量,单位为KB
RES:进程使用的、未被换出的物理内存大小,单位KB
SHR:共享内存大小,单位KB
S:进程状态,D表示不可中断的睡眠状态,R表示运行状态,S表示睡眠状态,T表示跟踪/停止
Z表示僵死进程
%CPU:上次更新到现在的CPU时间占用百分比
%MEM:进程占用的物理内存百分比
TIME+:进程总计使用的CPU时间,单位为1/100秒
COMMAND:正在运行进程的命令名或者命令路径
(3)kill 命令
作用:强制结束进程
格式:
kill 进程名/pid
killall 进程名/pid