Linux软件管理

Administrator 7

Linux 软件管理


目录

  1. 软件包管理概述(Red Hat 系 vs Debian 系)
  2. RPM 安装:rpm -ivh / -e / -q
  3. YUM / DNF 安装:常用操作
  4. 仓库配置:/etc/yum.repos.d/ 与 GPG 校验
  5. 安装记录与回滚:dnf history
  6. 源码安装:./configure → make → make install
  7. 校验:rpm -V 验证文件完整性
  8. Ubuntu 系列:apt / dpkg
  9. 总结与练习

一、软件包管理概述(Red Hat 系 vs Debian 系)

Linux 软件不靠"装一个 exe",而是通过软件包管理器软件仓库安装、升级、卸载,并自动处理依赖关系

两大主流体系:

体系 代表发行版 底层包格式 包管理器 仓库配置文件
Red Hat 系 RHEL、Rocky、CentOS、Fedora、AlmaLinux .rpm RPM、YUM、DNF /etc/yum.repos.d/
Debian 系 Ubuntu、Debian .deb dpkg、APT /etc/apt/sources.list/etc/apt/sources.list.d/

层次关系

  • RPM/dpkg:底层,直接操作 .rpm/.deb 包,能安装/卸载/查询,但不自动处理依赖
  • YUM/DNF(Red Hat)、APT(Debian):上层,能自动解决依赖、从仓库下载安装,是日常使用的主力。

一句话:日常装软件用 DNF/APT(自动处理依赖);RPM/dpkg 主要用于离线安装单个包或底层操作。

参考:Red Hat - 使用 DNF 工具管理软件Ubuntu - APT


二、RPM 安装:rpm -ivh / -e / -q

RPM(Red Hat Package Manager)是 Red Hat 系最底层的包管理器,直接操作 .rpm 文件。

2.1 安装 / 升级 / 卸载

# 安装(-i install,-v verbose,-h 显示进度)
sudo rpm -ivh package.rpm

# 升级(-U upgrade:已装则升级,未装则安装)
sudo rpm -Uvh package.rpm

# 卸载(-e erase)
sudo rpm -e package-name

# 强制安装(--force,慎用)
sudo rpm -ivh --force package.rpm
  • -ivh:安装;-Uvh:升级(更常用,可替代安装)。
  • 卸载用的是包名rpm -qa 查到的名称),不是文件名。

2.2 查询(-q)

rpm -qa                    # 列出系统所有已安装的包
rpm -q package-name        # 查询某个包是否已安装
rpm -qi package-name       # 查看包详细信息
rpm -ql package-name       # 列出该包安装的所有文件
rpm -qf /usr/bin/ls        # 查询某个文件属于哪个包
rpm -qp package.rpm        # 查询未安装的 rpm 包信息
rpm -qlp package.rpm       # 查看未安装包的包含文件
  • -q 查询已安装,-qp 查询未安装的 .rpm 文件。
  • -qa 所有已装,-ql 列出文件,-qf 反查文件归属。

2.3 依赖问题

RPM 不自动解决依赖。若安装的包依赖其他包,会报错:

error: Failed dependencies:
        libfoo.so.1()(64bit) is needed by package.rpm
  • 遇到依赖问题,需要手动先装依赖,或用 DNF/YUM(能自动拉取依赖)。
  • 日常推荐用 DNF 而非直接 rpm,这正是 DNF 存在的意义。

参考:man 8 rpmRed Hat - 使用 DNF 工具管理软件(含 RPM)


三、YUM / DNF 安装:常用操作

3.1 DNF 与 YUM 的关系

  • YUM(Yellowdog Updater Modified)是较早的包管理器。
  • DNF(Dandified YUM)是 YUM 的新一代替代,性能更好、依赖解析更可靠。
  • RHEL 8 / Rocky 8 起默认使用 DNF(RHEL 9 / Rocky 9 同样是 DNF)。yum 命令作为兼容别名仍可用(在 RHEL 9 中 yum 实际指向 dnf)。

结论:现代 Red Hat 系用 dnf,命令与 yum 基本一致,可以混用。

3.2 dnf 常用操作

# 搜索与查看
dnf search httpd               # 搜索软件包
dnf info httpd                 # 查看包信息
dnf list installed             # 列出已安装包
dnf provides /usr/bin/ls       # 查某文件由哪个包提供

# 安装 / 升级 / 卸载
sudo dnf install -y httpd      # 安装(自动处理依赖)
sudo dnf install -y httpd nginx   # 一次装多个
sudo dnf update -y             # 升级所有可升级包
sudo dnf update -y httpd       # 升级指定包
sudo dnf upgrade -y            # 同 update(更强调升级)
sudo dnf remove -y httpd       # 卸载
sudo dnf autoremove            # 清理不再需要的依赖包

# 清理缓存
sudo dnf clean all             # 清空缓存

# 查看/启用仓库
dnf repolist                   # 列出可用仓库
dnf repolist --enabled         # 只列已启用
dnf group list                 # 列出软件组

为什么用 DNF 而不是 rpmdnf install自动从仓库下载并解析依赖,一条命令解决所有依赖问题。

参考:man 8 dnfRed Hat - 使用 DNF 工具管理软件


四、仓库配置:/etc/yum.repos.d/ 与 GPG 校验

软件仓库(Repository) 是存放大量 .rpm 包的服务器。DNF 从仓库下载并安装软件,/etc/yum.repos.d/ 下的 .repo 文件定义了仓库。

4.1 .repo 文件的结构

/etc/yum.repos.d/*.repo 每个文件可定义一个或多个仓库,格式如下:

[baseos]
name=Rocky Linux $releasever - BaseOS
baseurl=https://download.rockylinux.org/pub/rocky/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

字段说明

字段 作用
[仓库名] 仓库唯一标识(中括号内)
name 仓库描述
baseurl 仓库地址(可含变量:$releasever 版本号、$basearch 架构、$basearch
enabled 是否启用(1 启用,0 禁用)
gpgcheck 是否校验 GPG 签名(1 校验,强烈建议
gpgkey GPG 公钥文件路径
ls /etc/yum.repos.d/        # 查看仓库配置文件
cat /etc/yum.repos.d/rocky.repo
dnf repolist                # 验证仓库是否可用

4.2 Rocky Linux 自带的官方仓库

Rocky Linux 安装完成后,/etc/yum.repos.d/ 会自动包含官方仓库配置。不同版本的仓库文件名和启用的仓库略有差异,需要注意区分:

版本 /etc/yum.repos.d/ 中的仓库文件 默认启用的仓库
Rocky 8 Rocky-AppStream.repoRocky-BaseOS.repoRocky-Extras.repoRocky-PowerTools.repoRocky-CR.repoRocky-Debuginfo.repoRocky-Sources.repo baseos、appstream、extras(powertools 需手动启用)
Rocky 9 rocky.reporocky-addons.reporocky-devel.reporocky-extras.repo baseos、appstream、extras(cr 需手动启用;PowerTools 已移除)
Rocky 10 rocky.reporocky-addons.reporocky-devel.reporocky-extras.reporocky-security.repo appstream、baseos、extras
# Rocky 10 安装后的实际输出示例
ls /etc/yum.repos.d/
# rocky-addons.repo  rocky-devel.repo  rocky-extras.repo  rocky.repo  rocky-security.repo

# 查看当前启用的仓库
sudo dnf repolist
# appstream   Rocky Linux 10 - AppStream
# baseos      Rocky Linux 10 - BaseOS
# extras      Rocky Linux 10 - Extras

要点

  • 8 系列的文件名带 Rocky- 前缀,且有 PowerTools(8 的补充软件源,需手动 dnf config-manager --set-enabled powertools 启用)。
  • 9 系列起文件名简化为 rocky*.repo,PowerTools 仓库被移除。
  • 10 系列沿用简化命名,并新增了 rocky-security.repo;默认 repolist 只显示 appstream/baseos/extras。
  • 所有仓库默认 gpgcheck=1 并带官方 GPG 公钥,安装时自动校验。

参考:Rocky Linux 官方仓库文档

4.3 自定义一个本地仓库

# 在 /etc/yum.repos.d/ 下新建 myrepo.repo
sudo vim /etc/yum.repos.d/myrepo.repo

# 内容示例(本地目录或 HTTP 服务器存放 .rpm)
cat << EOF | sudo tee /etc/yum.repos.d/myrepo.repo
[myrepo]
name=My Local Repo
baseurl=file:///srv/myrepo
enabled=1
gpgcheck=0
EOF

# 生效
sudo dnf clean all && dnf repolist

createrepo 可把某个目录制作成本地仓库(sudo dnf install createrepo)。

4.4 GPG 签名校验

GPG 校验用于确认下载的软件包来源可信、未被篡改,防止被植入恶意代码。

  • gpgcheck=1 表示安装前校验包的 GPG 签名。
  • 校验需要仓库的公钥gpgkey 指向的 key 文件)。
# 手动导入公钥
sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial

# 校验某个 rpm 包的签名
rpm -K package.rpm        # 显示签名是否有效

# 查看已导入的公钥
rpm -qa gpg-pubkey*

若包的签名无法验证,dnf install 会报错或警告。不要关闭 gpgcheck 去绕过,这是重要的安全防线。

参考:Red Hat - 使用 DNF 工具管理软件(含仓库)man 5 yum.conf

4.5 本地仓库(离线/光盘源)

离线、内网或无网络环境下无法从互联网仓库 dnf install,可以用系统安装光盘/ISO 做成本地仓库。RHEL 8/9、Rocky 8/9 的安装镜像里带有 BaseOSAppStream 两个仓库目录。

第一步:挂载安装光盘

# 临时挂载(把光驱 /dev/sr0 挂到 /mnt)
sudo mkdir -p /mnt
sudo mount /dev/sr0 /mnt

# 验证是否挂载成功(应能看到 BaseOS、AppStream 目录)
ls /mnt

若希望开机自动挂载,把下面一行写入 /etc/fstab,再 mount -a 生效:

/dev/sr0     /mnt      iso9660 defaults        0 0
sudo vim /etc/fstab       # 加入上面那一行
sudo mount -a             # 按 fstab 挂载并验证
sudo df -h /mnt           # 确认已挂载

注意:光盘是只读文件系统(iso9660),/mnt 下的内容不可修改,这是正常的。

第二步:新建本地仓库配置

/etc/yum.repos.d/新建一个 .repo 文件(不要直接编辑目录):

sudo vim /etc/yum.repos.d/local.repo

内容示例(把 baseurl 指向挂载光盘中的两个仓库目录):

[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
enabled=1
gpgcheck=0

[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
enabled=1
gpgcheck=0

第三步:验证仓库生效

sudo dnf clean all          # 清空旧缓存
sudo dnf repolist           # 应能看到 BaseOS、AppStream
sudo dnf install -y httpd   # 测试能否从本地源安装

注意事项

  • baseurl 用规范写法 file:///mnt/BaseOS(三斜杠)。
  • 本地可信光盘可用 gpgcheck=0;若想校验,可设 gpgcheck=1 并配置 gpgkey
  • 光盘未插入或未挂载时,该仓库不可用(dnf 会报找不到仓库)。
  • 若已有其他联网仓库,dnf 会优先/合并使用;离线环境建议只保留本地源。

五、安装记录与回滚:dnf history

dnf history 记录每次事务(transaction)(安装/升级/卸载等),可以查看并回滚

dnf history                 # 列出事务历史
dnf history info <id>       # 查看某次事务详情
dnf history undo <id>       # ★撤销某次事务(回滚其改动)
dnf history rollback <id>   # 回滚到某次事务之后的状态
dnf history list            # 简要列表
  • dnf history undo撤销某次安装/卸载,适合"装错了要回退"。
  • dnf history rollback:把系统回退到某次事务之后的状态。
  • 查看历史可帮你排查"什么时候装的什么包、改了什么"。

依赖与冲突处理

  • 依赖(dependency):A 需要 B 才能运行。DNF 会自动把 B 一起装好。
  • 冲突(conflict):两个包不能共存(如提供了相同文件)。DNF 会阻止或要求处理。
  • 常用排查命令:dnf deplist 包(查看依赖)、dnf repoquery --requires 包

参考:man 8 dnf-historyRed Hat - 使用 DNF 工具管理软件(含 history)


六、源码安装:./configure → make → make install

有些软件没有现成 rpm/deb 包,需要从源码编译安装。经典"三步曲":

# 第 1 步:配置(检查环境、生成 Makefile)
./configure --prefix=/usr/local     # --prefix 指定安装目录

# 第 2 步:编译(把源码编译成可执行程序)
make -j4                          # -j 多核并行加速

# 第 3 步:安装(把编译结果复制到系统)
sudo make install

三步各做什么

步骤 命令 作用
配置 ./configure 检测系统环境、检查依赖,生成 Makefile;常用 --prefix=/usr/local 指定安装位置
编译 make 按 Makefile 把源码编译成二进制(可 -j 并行)
安装 make install 把编译产物复制到系统目录(常需 sudo

源码安装的优缺点

  • 优点:可定制(--prefix 等)、使用最新代码、不依赖发行版仓库。
  • 缺点:不自动处理依赖、卸载麻烦(无统一记录)、升级需重编译。

卸载源码安装的软件:在源码目录执行 sudo make uninstall(若 Makefile 支持)。

参考:Linux 源码安装通用指南GNU Make 手册


七、校验:rpm -V 验证文件完整性

rpm -V(verify)验证已安装的包的文件是否被篡改或损坏(对比文件属性与包内记录)。

rpm -V package-name       # 验证某个已装包的完整性
rpm -Va                   # 验证所有已装包(-a all)
rpm -Vf /usr/bin/ls       # 验证包含某文件的包

输出格式:每个异常文件一行,前面是变更标记,格式为 SM5DLUGTP c 文件名

标记 含义
S 文件大小改变
M 权限/模式改变
5 MD5 校验和改变(内容变了)
D 主设备号改变
L 符号链接目标改变
U 属主改变
G 属组改变
T 修改时间改变
P 能力(capabilities)改变
c 该文件是配置文件(后面标 c)
# 示例:验证后某行显示 5....T c /etc/xxx.conf
# 说明该配置文件内容(5)和时间(T)被修改过
rpm -V httpd
  • 输出空白表示文件完好(无变化)。
  • 常见应用:检查系统文件是否被入侵者篡改,或排查程序异常。
  • 注意:配置文件被正常修改也会显示 c,属正常现象。

参考:man 8 rpm(Verify 部分)、Red Hat - 使用 DNF 工具管理软件(含 RPM 验证)


八、Ubuntu 系列:apt / dpkg

Ubuntu / Debian 使用 dpkg(底层)和 APT(上层,自动处理依赖),与 Red Hat 系的 rpm/dnf 对应。

8.1 dpkg —— 底层包管理(对应 rpm)

sudo dpkg -i package.deb      # 安装 .deb 包(对应 rpm -ivh)
sudo dpkg -r package-name     # 卸载(对应 rpm -e,保留配置)
sudo dpkg -P package-name     # 彻底卸载(含配置文件)
dpkg -l                       # 列出已装包(对应 rpm -qa)
dpkg -L package-name          # 列出包包含的文件(对应 rpm -ql)
dpkg -S /usr/bin/ls           # 查文件属于哪个包(对应 rpm -qf)
dpkg -s package-name          # 查看包信息(对应 rpm -qi)

与 rpm 一样,dpkg 不自动处理依赖,装 A 若依赖 B 会报错,需手动装 B 或用 apt。

8.2 apt —— 上层包管理(对应 dnf)

# 更新软件源列表
sudo apt update               # 刷新包索引(对应 dnf makecache,装新包前先执行)

# 搜索与查看
apt search nginx              # 搜索
apt show nginx                # 查看包信息
apt list --installed          # 列出已装包

# 安装 / 升级 / 卸载
sudo apt install -y nginx     # 安装(自动处理依赖)
sudo apt upgrade              # 升级所有已装包
sudo apt full-upgrade         # 升级并处理依赖变化(较激进)
sudo apt remove nginx         # 卸载
sudo apt purge nginx          # 卸载并删除配置文件
sudo apt autoremove           # 清理不再需要的依赖

# 清理
sudo apt clean                # 清理下载的 .deb 缓存

apt update vs apt upgrade 区别apt update 只更新软件源索引(让系统知道有哪些新版本),apt upgrade 才是真正升级软件。装新软件前通常先 sudo apt update

8.3 仓库配置对比

项目 Red Hat 系 Ubuntu/Debian
仓库配置文件 /etc/yum.repos.d/*.repo /etc/apt/sources.list/etc/apt/sources.list.d/*.list
包格式 .rpm .deb
底层管理器 rpm dpkg
上层管理器 dnf / yum apt / apt-get
签名校验 gpgcheck 内置 GPG 校验(Release 签名)
安装命令 dnf install apt install

8.4 Red Hat 系 vs Debian 系命令对照表

功能 Red Hat(rpm/dnf) Ubuntu(dpkg/apt)
安装 dnf install 包 apt install 包
升级 dnf update apt upgrade
卸载 dnf remove 包 apt remove 包
搜索 dnf search 词 apt search 词
列出已装 rpm -qa / dnf list installed dpkg -l
查文件归属 rpm -qf 文件 dpkg -S 文件
安装本地包 rpm -ivh x.rpm dpkg -i x.deb
校验完整性 rpm -V 包 debsums 包(需安装)
底层直接操作 rpm dpkg

一句话:Ubuntu 的 apt 对应 Rocky 的 dnfdpkg 对应 rpm。会了 dnf,apt 命令几乎一看就懂。

参考:Ubuntu - APT 软件包管理Debian 手册 - 软件包管理菜鸟教程 - Ubuntu apt


九、总结与练习

9.1 核心速查(Red Hat 系)

需求 命令
安装 sudo dnf install -y 包
升级 sudo dnf update -y
卸载 sudo dnf remove -y 包
搜索 dnf search 词
列出已装 rpm -qa / dnf list installed
查文件归属 rpm -qf 文件
安装本地 rpm sudo rpm -ivh 包.rpm
卸载本地 rpm sudo rpm -e 包名
查看仓库 dnf repolist
回滚事务 dnf history undo <id>
校验完整性 rpm -V 包
源码安装 ./configure && make && sudo make install

9.2 核心速查(Ubuntu/Debian 系)

需求 命令
刷新索引 sudo apt update
安装 sudo apt install -y 包
升级 sudo apt upgrade
卸载 sudo apt remove 包
搜索 apt search 词
列出已装 dpkg -l
安装本地 deb sudo dpkg -i 包.deb
查文件归属 dpkg -S 文件

9.3 动手练习建议

# Rocky Linux(Red Hat 系)
dnf search httpd
sudo dnf install -y httpd
rpm -qi httpd; rpm -ql httpd | head
sudo dnf remove -y httpd
dnf history | tail -5

# Ubuntu(Debian 系)
sudo apt update
sudo apt install -y nginx
dpkg -L nginx | head
sudo apt remove -y nginx

# 源码安装示例
# tar -xzf app.tar.gz && cd app
# ./configure --prefix=/usr/local && make && sudo make install

提示:安装/卸载软件需要 sudo 权限。练习请用虚拟机,避免影响真实系统。


参考资料