Linux软件管理
Linux 软件管理
目录
- 软件包管理概述(Red Hat 系 vs Debian 系)
- RPM 安装:rpm -ivh / -e / -q
- YUM / DNF 安装:常用操作
- 仓库配置:/etc/yum.repos.d/ 与 GPG 校验
- 安装记录与回滚:dnf history
- 源码安装:./configure → make → make install
- 校验:rpm -V 验证文件完整性
- Ubuntu 系列:apt / dpkg
- 总结与练习
一、软件包管理概述(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 主要用于离线安装单个包或底层操作。
二、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 rpm、Red 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 而不是 rpm:dnf install 会自动从仓库下载并解析依赖,一条命令解决所有依赖问题。
参考:
man 8 dnf、Red 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.repo、Rocky-BaseOS.repo、Rocky-Extras.repo、Rocky-PowerTools.repo、Rocky-CR.repo、Rocky-Debuginfo.repo、Rocky-Sources.repo |
baseos、appstream、extras(powertools 需手动启用) |
| Rocky 9 | rocky.repo、rocky-addons.repo、rocky-devel.repo、rocky-extras.repo |
baseos、appstream、extras(cr 需手动启用;PowerTools 已移除) |
| Rocky 10 | rocky.repo、rocky-addons.repo、rocky-devel.repo、rocky-extras.repo、rocky-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 公钥,安装时自动校验。
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 的安装镜像里带有 BaseOS 和 AppStream 两个仓库目录。
第一步:挂载安装光盘
# 临时挂载(把光驱 /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-history、Red 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 支持)。
七、校验: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 的 dnf,dpkg 对应 rpm。会了 dnf,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权限。练习请用虚拟机,避免影响真实系统。
参考资料
- Red Hat 官方文档 - 使用 DNF 工具管理软件:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/9/html/managing_software_with_the_dnf_tool/index
- man 手册:
man 8 rpm、man 8 dnf、man 8 dnf-history、man 5 yum.conf、man 8 dpkg、man 8 apt - Ubuntu 官方文档 - 软件包管理:https://ubuntu.com/server/docs/package-management
- Debian 管理员手册 - 软件包:https://www.debian.org/doc/manuals/debian-handbook/
- Rocky Linux 官方文档 - 软件管理:https://docs.rockylinux.org/books/admin_guide/13-softwares/
- 菜鸟教程 - Linux 软件管理:https://www.runoob.com/linux/linux-tutorial.html
