学习Linux——软件管理
《软件管理》2025年11月7日
一、核心概念
在红帽Linux系统重,软件管理师系统运维的核心,涵盖查询、安装、卸载、升级等基础操作,以及仓库配置、依赖处理、压缩包管理(tar命令)等内容。
软件包(Package):
软件的二进制文件、配置文件、依赖信息等的打包合集,常用格式为
.rpm(二进制)、.src.rpm(源码包)、.tar.gz/.tar.bz2等源码压缩包(需要tar命令处理)依赖(Dependency):
软件运行/安装所需要的其他库或工具,
dnf/yum可自动处理,rpm和源码安装需要手动解决仓库(Repository):
存储软件包的服务器(本地/远程),
dnf/yum通过/etc/yum.repos.d/下的.repo文件识别,用于下载安装软件tar 命令:
用于创建、解压归档文件(
.tar)及压缩包(.tar.gz/.tar.bz2等),是源码包处理的核心工具。RPM:
底层包顾艳丽工具,负责软件的安装、查询等,但不自动处理依赖
YUM/DNF:
yum:使用与CentOS 7及更早版本,基于RPM的前端工具,自动解决依赖
dnf:yum的升级版本,速度更快,兼容yum命令模块(Module)与流(Stream):
RHEL 8 + 引入,支持同一软件多版本共存(如 Python 3.6 和 3.9),解决版本依赖冲突。
包组(Package Group):
多个相关软件的集合(如 “开发工具”),用于批量安装功能模块。
二、仓库配置
**软件仓库(Repository)**是dnf/yum的核心,合理配置仓库可解决软件包缺失、下载慢等问题。
1. 仓库配置文件
-
存放路径:
/etc/yum.repos.d/,所有.repo文件都会被自动加载。 -
配置格式(以
epel.repo为例):[epel] # 仓库ID(唯一) name=Extra Packages for Enterprise Linux $releasever - $basearch # 仓库名称 baseurl=https://download.fedoraproject.org/pub/epel/$releasever/$basearch/ # 仓库地址(支持http/https/file) enabled=1 # 是否启用(1=启用,0=禁用) gpgcheck=1 # 是否校验GPG签名(1=校验,增强安全性) gpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever # GPG公钥路径
2. 常用仓库
官方基础仓库:RHEL/CentOS 默认自带,包含系统核心组件。
EPEL 仓库(Extra Packages for Enterprise Linux):提供大量官方仓库外的常用软件(如htop、nginx等),安装命令:
dnf install epel-release # 自动生成epel.repo配置文件
第三方仓库:如 RPM Fusion(提供多媒体相关包)、ELRepo(硬件驱动)等,需手动下载配置文件。
本地仓库:将 ISO 镜像作为仓库(适合无网络环境):
mount /dev/cdrom /mnt # 挂载ISO镜像到/mnt
# 创建本地仓库配置文件
cat > /etc/yum.repos.d/local.repo << EOF
[local]
name=Local Repository
baseurl=file:///mnt
enabled=1
gpgcheck=0 # 本地镜像通常无需校验
EOF
3. 仓库管理命令
列出所有仓库:dnf repolist all
[root@haha ~]# dnf repolist allrepo id repo name status
#仓库ID 仓库名称 仓库状态
AppStream AppStream enabled
BaseOS BaseOS enabled
epel Extra Packages f enabled
epel-cisco-openh264 Extra Packages f enabled
epel-cisco-openh264-debuginfo Extra Packages f disabled
epel-cisco-openh264-source Extra Packages f disabled
epel-debuginfo Extra Packages f disabled
epel-source Extra Packages f disabled
epel-testing Extra Packages f disabled
dnf repolist enabled只看启用的,dnf repolist disabled看禁用的。
查看仓库已安装软件:
使用dnf list installed并结合grep过滤查看已安装及其所属仓库:
[root@haha ~]# dnf list installed | grep -v "@anaconda"
# 排除系统初始安装的软件(通常来自anaconda)
输出中,@仓库名 表示该软件来自哪个启用的仓库(例如 @appstream 表示来自 appstream 仓库)。
查看指定仓库中已安装的软件
若想单独查看某个仓库(如 appstream)安装的软件:
dnf list installed --repo=appstream # 替换为目标仓库ID(如baseos、extras等)
临时启用 / 禁用仓库安装软件:
# 临时启用禁用的仓库(如powertools)并安装软件
dnf install 软件名 --enablerepo=powertools# 临时禁用启用的仓库(如appstream)并更新
dnf update --disablerepo=appstream
4.永久启用 / 禁用仓库(修改配置)
仓库配置文件通常位于 /etc/yum.repos.d/ 目录下(如 rocky.repo),可通过编辑文件或 dnf config-manager 命令修改:
# 永久启用仓库(如powertools)
dnf config-manager --set-enabled powertools# 永久禁用仓库(如powertools)
dnf config-manager --set-disabled powertools
三、操作命令
1.软件查询
1.RPM查询命令
列出所有已安装包rpm -qa
#结合grep查询所有NGINX包
[root@haha ~]# rpm -qa | grep nginx
nginx-filesystem-1.20.1-22.el9.noarch
nginx-core-1.20.1-22.el9.x86_64
nginx-1.20.1-22.el9.x86_64
查看已安装包的详细信息rpm -qi package_name
[root@haha ~]# rpm -qi nginx
Name : nginx # 软件包名称:nginx(高性能Web服务器)
Epoch : 2 # 版本纪元:用于解决不同版本号规则的兼容性问题,此处为2
Version : 1.20.1 # 软件版本号:1.20.1(主版本.次版本.补丁版本)
Release : 22.el9 # 发布版本:22次编译,适配RHEL 9/AlmaLinux 9等系统(el9表示Enterprise Linux 9)
Architecture: x86_64 # 架构:64位x86处理器(适用于常见的64位PC服务器)
Install Date: Fri 07 Nov 2025 02:47:25 PM CST # 安装时间:2025年11月7日 下午2:47:25(中国标准时间)
Group : Unspecified # 软件组:未指定(RPM包分类,此处未归类)
Size : 151987 # 安装大小:151987字节(约148KB,仅为二进制文件等核心内容大小)
License : BSD # 许可证:BSD许可证(开源许可,允许自由使用和修改)
Signature : RSA/SHA256, Sun 16 Feb 2025 02:31:17 AM CST, Key ID 199e2f91fd431d51 # 签名信息:使用RSA/SHA256算法签名,签名时间2025年2月16日,签名密钥ID为199e2f91fd431d51(用于验证包完整性和来源)
Source RPM : nginx-1.20.1-22.el9.src.rpm # 源码包:对应的源代码RPM包名称
Build Date : Thu 13 Feb 2025 08:32:14 PM CST # 编译时间:2025年2月13日 晚上8:32:14(该RPM包的构建时间)
Build Host : x86-64-01.build.eng.rdu2.redhat.com # 编译主机:Red Hat官方构建服务器(rdu2数据中心的x86_64构建节点)
Packager : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla> # 打包者:Red Hat公司,提供bug反馈链接
Vendor : Red Hat, Inc. # 供应商:Red Hat公司(该RPM包由Red Hat官方提供)
URL : https://nginx.org # 官方网址:nginx项目官网
Summary : A high performance web server and reverse proxy server # 摘要:高性能Web服务器和反向代理服务器
Description : # 详细描述:
Nginx is a web server and a reverse proxy server for HTTP, SMTP, POP3 and # Nginx是HTTP、SMTP、POP3、IMAP协议的Web服务器和反向代理服务器
IMAP protocols, with a strong focus on high concurrency, performance and low # 主打高并发、高性能和低内存占用
memory usage.
列出已安装包的所有文件路径rpm -ql package_name
[root@haha ~]# rpm -ql nginx
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/share/man/man3/nginx.3pm.gz
·············
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
查看文件属于哪个已安装包rpm -qf /path/to/file
[root@haha ~]# tree
.
├── d1
│ └── d2
│ └── t.txt
├── dsd
├── nginx
├── nginx-1.26.3-1.el9.ngx.x86_64.rpm
├── nginx-1.26.3-1.el9.ngx.x86_64.rpm.1
├── nginx-1.26.3.tar.gz
├── t1.link[root@haha ~]# rpm -qlf t1.link
file /root/t1.link is not owned by any package
验证已安装包的完整性(无输出表示正常)rpm -V package_name
[root@haha ~]# rpm -V nginx
[root@haha ~]#
2.DNF/YUM查询命令:
搜索软件包(名称/描述含关键词):dnf search keyword
[root@haha ~]# dnf search web server
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.Warning: failed loading '/etc/yum.repos.d/kubernetes.repo', skipping.
Last metadata expiration check: 1 day, 18:21:37 ago on Wed 05 Nov 2025 08:49:24 PM CST.
========= Name & Summary Matched: web, server =========
pcp-pmda-weblog.x86_64 : Performance Co-Pilot (PCP): metrics from web server logs
============ Summary Matched: web, server =============
cockpit.x86_64 : Web Console for Linux servers
libcurl.x86_64 : A library for getting files from web: servers
libcurl.i686 : A library for getting files from web: servers
libmicrohttpd.i686 : Lightweight library for embedding: a webserver in applications
libmicrohttpd.x86_64 : Lightweight library for...: embedding a webserver in applications
nginx.x86_64 : A high performance web server and: reverse proxy server
pcp-pmda-apache.x86_64 : Performance Co-Pilot (PCP)...: metrics for the Apache webserver
pcp-pmda-nginx.x86_64 : Performance Co-Pilot (PCP): metrics for the Nginx Webserver
python3-tornado.x86_64 : Scalable, non-blocking web: server and tools
查看软件包详细信息(含仓库、依赖):dnf info package_name
[root@haha ~]# dnf info docker-buildx-plugin-0.29.1-1.el9.x86_64
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.Warning: failed loading '/etc/yum.repos.d/kubernetes.repo', skipping.
Last metadata expiration check: 1 day, 18:25:39 ago on Wed 05 Nov 2025 08:49:24 PM CST.
Installed Packages
Name : docker-buildx-plugin
Version : 0.29.1
Release : 1.el9
Architecture : x86_64
Size : 75 M
Source : docker-buildx-plugin-0.29.1-1.el9.src.rpm
Repository : @System
From repo : docker-ce-stable
Summary : Docker Buildx plugin for the Docker CLI
URL : https://github.com/docker/buildx
License : Apache-2.0
Description : Docker Buildx plugin extends build: capabilities with BuildKit.
列出已安装的包dnf list installed
[root@haha ~]# dnf list installed | tail -5xz-libs.x86_64 5.2.5-8.el9_0 @anaconda
yum.noarch 4.14.0-25.el9 @anaconda
yum-utils.noarch 4.3.0-20.el9 @BaseOS
zlib.x86_64 1.2.11-40.el9 @anaconda
zlib-devel.x86_64 1.2.11-40.el9 @AppStream
列出仓库中可用的包dnf list available
[root@haha ~]# dnf list available | tail -5zsh.x86_64 5.8-9.el9 BaseOS
zstd.x86_64 1.5.5-1.el9 BaseOS
zziplib.i686 0.13.71-11.el9_4 AppStream
zziplib.x86_64 0.13.71-11.el9_4 AppStream
zziplib-utils.x86_64 0.13.71-11.el9_4 AppStream
查看软件包的依赖关系(依赖关系:必须安装前者才可安装后者)dnf deplist package_name
[root@haha ~]# dnf deplist nginx·······dependency: nginx-core = 2:1.20.1-22.el9provider: nginx-core-2:1.20.1-22.el9.x86_64dependency: nginx-filesystem = 2:1.20.1-22.el9provider: nginx-filesystem-2:1.20.1-22.el9.noarchdependency: pcreprovider: pcre-8.44-4.el9.i686provider: pcre-8.44-4.el9.x86_64dependency: system-logos-httpdprovider: redhat-logos-httpd-90.4-2.el9.noarchdependency: systemdprovider: systemd-252-51.el9.i686provider: systemd-252-51.el9.x86_64
查看软件包安装路径(含未安装包)dnf repoquery -l package_name
[root@haha ~]# dnf repoquery -l nginx
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
/usr/share/man/man3/nginx.3pm.gz
········
/usr/share/vim/vimfiles/ftplugin/nginx.vim
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
出所有仓库dnf repolist
[root@haha ~]# dnf repolist repo id repo name
AppStream AppStream
BaseOS BaseOS
docker-ce-stable Docker CE Stable - x86_64
查看包组信息dnf group info "Development Tools"(查看开发工具包组包含的软件)
[root@haha ~]# dnf group info "Development Tools"Group: Development ToolsDescription: A basic development environment.Mandatory Packages:autoconfautomakebinutilsbisonflexgccgcc-c++gdbglibc-devellibtoolmakepkgconfpkgconf-m4pkgconf-pkg-configredhat-rpm-configrpm-buildrpm-signstraceDefault Packages:asciidocbyaccdiffstatgitintltooljnaltracepatchutilsperl-Fedora-VSPperl-generatorspesignsource-highlightsystemtapvalgrindvalgrind-develOptional Packages:cmakeexpectrpmdevtoolsrpmlint
查看软件所有安装文件(包含配置文件)
dnf repoquery -l 软件包名(支持未安装包)
rpm -ql 软件包名(仅查看已安装包)
[root@haha rpm-gpg]# dnf repoquery -l nginxLast metadata expiration check: 1:05:48 ago on Sat 08 Nov 2025 09:50:50 AM CST.
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
······
/usr/share/vim/vimfiles/indent/nginx.vim
/usr/share/vim/vimfiles/syntax/nginx.vim
[root@haha rpm-gpg]# rpm -ql nginx
/usr/bin/nginx-upgrade
/usr/lib/systemd/system/nginx.service
······
/usr/share/vim/vimfiles/syntax/nginx.vim
2.软件安装
Linux 软件安装主要分为包管理工具安装(推荐,依赖自动处理|dnf/yum)、源码编译安装(灵活但复杂|tar)、二进制包手动安装(如.deb/.rpm)等
标准流程:
- 确认系统发行版与包管理工具,选择适配的安装方法
- 检查软件是否已安装(避免重复安装冲突)
- 通过官方仓库或者可信来源获取安装包(推荐使用www.bing.com查询,搜索一般为
软件名 rpm(需要的包类型))- 安装前各项包索引(包管理工具方式)或准备依赖环境(源码/二进制包方式)
- 执行安装命令,实时查看安装日志,处理依赖报错
- 验证安装结果(版本检查+功能测试)
- 备份初始配置文件(便于后续故障恢复)
(1)包管理工具安装(推荐,适配主流发行版)
RedHat 系主流包管理工具为 YUM(适用于旧版本系统)和 DNF(YUM 的升级版本,适用于新版本系统),可自动处理依赖关系,操作便捷。
DNF 工具(新版本系统,如 CentOS 8+、RockyLinux)
-
更新包索引:
dnf check-update(同步仓库最新软件信息); -
检查软件是否已安装:
dnf list installed | grep 软件名(如dnf list installed | grep nginx); -
安装软件:
dnf install -y 软件名(-y参数自动确认安装,无需手动输入 “y”); -
安装指定版本(需先确认仓库中可用版本):
-
列出仓库中所有可用版本:
dnf --showduplicates list 软件名(记录目标版本的完整名称);[root@haha ~]# dnf --showduplicates list nginx Available Packages nginx.x86_64(架构) 2:1.20.1-22.el9(版本信息) AppStream(仓库来源) 架构为x86_64(表示适用于 64 位的 x86 架构处理器) 版本信息,2为 epoch 版本(用于解决版本号排序问题),1.20.1是主版本号,22是发行版本号,el9表示适用于 Enterprise Linux 9 系列系统(如 CentOS 9、Rocky Linux 9 等) 该软件包来自AppStream仓库 -
安装指定版本:
dnf install -y 软件名-版本信息(版本信息需与仓库显示完全一致);
-
-
验证安装:
- 版本检查:
软件名 --version(如nginx -v); - 功能测试:启动服务(如
systemctl start 软件名),通过实际功能调用确认正常(如访问网页、执行命令等)。
- 版本检查:
YUM 工具(旧版本系统,如 CentOS 7 及以下)
- 更新包索引:
yum check-update; - 检查已安装状态:
yum list installed | grep 软件名; - 安装软件:
yum install -y 软件名; - 安装指定版本:
- 列出可用版本:
yum --showduplicates list 软件名; - 安装指定版本:
yum install -y 软件名-版本信息;
- 列出可用版本:
- 验证安装:同 DNF,执行
软件名 --version和功能测试。
(2) 源码编译安装(定制化场景)
适用于需要特定版本、自定义功能(如开启隐藏模块、优化编译参数)或仓库无对应版本的场景,操作稍复杂但灵活性极高。
标准流程
从软件官方官网或可信开源平台(如 GitHub)获取源码包;
安装编译必需的依赖工具(编译器、开发库等);
下载并解压源码包;
配置编译参数(指定安装路径、功能模块等);
编译并安装;
配置环境变量(如需全局调用软件命令);
验证安装与功能。
实操步骤(以安装 Nginx 1.24.0 为例)
- 安装编译依赖:
dnf install -y gcc make openssl-devel zlib-devel pcre-devel;
- 下载源码包:
wget http://nginx.org/download/nginx-1.24.0.tar.gz(官网地址,避免第三方来源);
- 解压源码后切换到
nginx-1.24.0目录:tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0 - 配置编译参数(自定义安装路径与功能):
./configure --prefix=/usr/local/nginx(指定安装目录,避免与系统默认路径冲突)- 可选添加功能模块:
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module(开启 SSL 和 Gzip 功能)
- 编译与安装:
make && make install(make编译生成可执行文件,make install复制文件到指定路径) - 配置环境变量(全局调用 nginx 命令):
- 编辑环境变量文件:
vim /etc/profile - 添加内容:
export PATH=$PATH:/usr/local/nginx/sbin - 生效配置:
source /etc/profile
- 编辑环境变量文件:
- 验证:
nginx -v(显示版本即成功)+ 启动测试(/usr/local/nginx/sbin/nginx,访问 IP 确认)。
(3) 二进制包手动安装(.rpm)
适用于官网提供预编译二进制包(非仓库版本)的场景,需手动处理依赖,适合快速安装特定版本。
-
标准流程
- 从软件官方渠道下载对应 RedHat 系的.rpm 包;
- 检查包完整性(可选,通过 MD5 校验值确认);
- 执行安装命令,处理可能的依赖报错;
- 验证安装与功能。
-
实操步骤
- 下载.rpm 包:如从官网获取
软件名.rpm; - 安装包文件:
rpm -ivh 软件名.rpm(-i安装,-v显示详细信息,-h显示进度条); - 处理依赖报错:若安装时提示缺失依赖,执行
dnf install -y 缺失依赖名(根据报错信息手动安装依赖,DNF 会自动处理依赖关系); - 验证:
软件名 --version(确认版本)+ 功能测试(启动服务并调用功能)。
- 下载.rpm 包:如从官网获取
(4)第三方通用工具安装(Snap/Flatpak)
跨发行版的包管理工具,无需担心系统兼容性,适合安装较新或特殊版本的软件(如最新版 VS Code、Chrome)。
Snap 工具
- 安装 Snap(RedHat 系需手动部署):
dnf install -y snapd && systemctl enable --now snapd.socket - 搜索软件及版本:
snap find 软件名; - 安装指定版本(通过通道控制):
- 稳定版:
snap install 软件名; - 特定版本:
snap install 软件名 --channel=版本通道(如--channel=stable指定稳定通道);
- 稳定版:
- 验证:
软件名 --version。
Flatpak 工具
- 安装 Flatpak:
dnf install -y flatpak && flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo - 搜索软件:
flatpak search 软件名; - 安装:
flatpak install -y flathub 软件名//版本分支; - 验证:
flatpak run 软件名 --version。
(5)注意事项
- 仓库配置:优先使用官方基础仓库(BaseOS、AppStream),第三方仓库(如 EPEL)需确认可信性,避免依赖冲突;
- 依赖管理:DNF/YUM 自动处理依赖,但降级版本时可能出现 “依赖不兼容”,需优先选择仓库中与系统版本匹配的目标版本;
- 源码安装路径:建议统一安装到
/usr/local/软件名或/opt/软件名,与系统默认路径区分,避免与包管理工具安装的软件冲突; - 服务管理:通过
systemctl管理服务(启动 / 停止 / 重启),版本切换后需重新加载服务配置(systemctl daemon-reload); - 生产环境操作:版本更改前在测试环境验证,操作时备份关键数据,必要时停机维护,避免因版本冲突导致服务中断。
3.软件卸载
在 Linux 系统中,软件卸载的方法主要取决于软件的安装方式(如 RPM 包管理、源码编译、容器等),以下是常见场景的卸载方法:
(1)通过包管理器卸载(RPM/DNF/YUM,最常用)
适用于通过 dnf install、yum install 或 rpm -i 安装的软件(如系统自带工具、官方仓库软件)。
基本命令(以 DNF 为例,YUM 用法类似)
-
卸载软件包(保留配置文件):
dnf remove 软件包名示例:卸载 nginx
dnf remove nginx -
彻底卸载(包括配置文件):包管理器默认会保留部分配置文件(如
/etc下的配置),若需彻底删除,需手动清理:# 先卸载包 dnf remove nginx # 再删除残留配置(根据实际路径)此处可结合软件文件查找 rm -rf /etc/nginx/ rm -rf /var/log/nginx/
查找需卸载的包名
若不确定软件包的准确名称,可先搜索:
# 列出已安装的所有包,过滤关键词
dnf list installed | grep 关键词
# 示例:查找docker相关包
dnf list installed | grep docker
(2)卸载源码编译安装的软件
若软件是通过 ./configure && make && make install 源码编译安装的,需通过以下方式卸载:
-
若源码目录保留(推荐):进入源码编译目录,执行卸载命令(部分软件支持,需源码包提供
uninstall规则):cd 源码目录 make uninstall -
若源码目录已删除(手动清理):需手动删除安装时生成的文件(通常安装路径为
/usr/local/软件名或自定义路径):# 假设安装到 /usr/local/nginx rm -rf /usr/local/nginx # 清理可能的软链接 rm -f /usr/bin/nginx
(3)卸载容器化软件(如 Docker 容器)
若软件以 Docker 容器形式运行,需先停止容器,再删除容器和镜像:
-
停止并删除容器:
# 查看运行的容器 docker ps # 停止容器(替换容器ID或名称) docker stop 容器ID # 删除容器 docker rm 容器ID -
删除关联镜像:
# 查看镜像 docker images # 删除镜像(替换镜像ID或名称) docker rmi 镜像ID
(4)通用清理建议
-
检查残留文件:软件卸载后,可能残留日志、缓存或用户配置文件,常见路径:
- 配置文件:
/etc/软件名/、~/.软件名/(用户目录下) - 日志文件:
/var/log/软件名/ - 缓存文件:
/var/cache/软件名/
- 配置文件:
-
清理依赖(可选):卸载软件后,可能残留无用的依赖包,可通过以下命令清理:
# DNF清理无用依赖 dnf autoremove # 清理缓存 dnf clean all
(5)总结
- 优先使用包管理器(
dnf remove)卸载通过仓库安装的软件,简单且不易遗漏。 - 源码编译安装的软件需手动清理,建议保留源码目录以便
make uninstall。 - 卸载后检查残留文件,确保系统干净。
4.软件版本更改
版本更改需基于原安装方式操作,核心是 “安全卸载旧版本→清理环境→安装目标版本→验证适配”。
标准流程
- 备份关键数据与配置文件(避免版本切换导致数据丢失);
- 确认当前软件版本及安装方式(包管理 / 源码 /.rpm 包);
- 检查目标版本与系统的兼容性(依赖库、系统版本适配);
- 卸载当前版本(彻底清理文件与残留依赖);
- 清理系统冗余文件(缓存、无用依赖);
- 安装目标版本(遵循对应安装方式的标准流程);
- 验证版本与功能(确保无报错、功能正常);
- 锁定版本(可选,防止自动升级到不兼容版本)。
(1) 原安装方式:包管理工具(DNF/YUM)
通过系统包管理工具安装的软件,版本切换便捷,依赖处理自动化程度高。
实操步骤(以 DNF 为例,切换软件版本)
- 备份配置文件:
- 主配置文件:
cp /etc/软件名/软件名.conf /etc/软件名/软件名.conf.bak; - 相关配置目录:
cp -r /etc/软件名/conf.d /etc/软件名/conf.d.bak;
- 主配置文件:
- 查看当前版本与安装方式:
- 版本:
软件名 --version; - 安装方式确认:
rpm -qf $(which 软件名)(输出软件包信息,确认由 DNF/YUM 安装);
- 版本:
- 检查目标版本兼容性:
- 列出仓库可用版本:
dnf --showduplicates list 软件名; - 查看目标版本依赖:
dnf repoquery --requires 软件名-目标版本(确认依赖与系统兼容);
- 列出仓库可用版本:
- 卸载当前版本:
- 彻底卸载(含配置文件):
dnf remove -y 软件名; - 清理残留依赖:
dnf autoremove -y && dnf clean all;
- 彻底卸载(含配置文件):
- 安装目标版本:
dnf install -y 软件名-目标版本(版本信息需与仓库显示完全一致); - 恢复配置文件(如需):
cp /etc/软件名/软件名.conf.bak /etc/软件名/软件名.conf;cp -r /etc/软件名/conf.d.bak/* /etc/软件名/conf.d/;
- 验证:
- 版本检查:
软件名 --version(确认显示目标版本); - 功能测试:
systemctl start 软件名,通过实际功能调用验证(如访问服务、执行命令),查看日志journalctl -u 软件名排查报错;
- 版本检查:
- 锁定版本(可选):
- 锁定:
dnf versionlock add 软件名(防止dnf update自动升级); - 解锁:后续需升级时执行
dnf versionlock delete 软件名。
- 锁定:
- YUM 工具补充(适用于旧版本系统)
- 卸载:
yum erase -y 软件名; - 安装目标版本:
yum install -y 软件名-目标版本; - 锁定版本:可通过
yum-versionlock插件(需先安装yum-plugin-versionlock),执行yum versionlock 软件名。
- 卸载:
2. 原安装方式:源码编译
源码安装的软件需手动清理文件,版本切换需严格遵循 “卸载干净→重新编译” 流程。
实操步骤(切换源码安装的软件版本)
-
备份数据与配置:
- 配置文件:
cp -r /usr/local/软件名/conf /usr/local/软件名/conf.bak; - 日志 / 数据文件:
cp -r /usr/local/软件名/logs /usr/local/软件名/logs.bak(根据软件实际数据路径调整);
- 配置文件:
-
查看当前版本与安装路径:
- 版本:
软件名 --version; - 安装路径:
which 软件名(如/usr/local/软件名/sbin/软件名,确认安装目录);
- 版本:
-
卸载当前版本:
-
若源码目录未删除:
cd 原源码目录 && make uninstall(部分软件支持,自动清理文件); -
若不支持
make uninstall:手动删除安装目录及相关文件:
rm -rf /usr/local/软件名(删除核心安装目录);rm -f /usr/bin/软件名(删除软链接或环境变量指向的文件);rm -f /etc/profile.d/软件名.sh(删除自定义环境变量配置);
-
-
清理编译残留:
rm -rf 原源码目录; -
安装目标版本(重复源码编译流程):
- 下载目标版本源码:
wget 目标版本源码URL; - 解压:
tar -zxvf 目标版本源码包 && cd 解压目录; - 配置(沿用原编译参数,确保功能一致):
./configure --prefix=/usr/local/软件名 [其他参数]; - 编译安装:
make && make install;
- 下载目标版本源码:
-
恢复配置文件:
cp -r /usr/local/软件名/conf.bak/* /usr/local/软件名/conf/; -
验证:
- 版本检查:
软件名 --version(确认显示目标版本); - 功能测试:启动服务(如
/usr/local/软件名/sbin/软件名),通过功能调用确认正常,查看日志文件排查问题;
- 版本检查:
-
清理备份(可选):功能验证正常后,删除备份文件
rm -rf /usr/local/软件名/conf.bak /usr/local/软件名/logs.bak。
3. 原安装方式:.rpm 二进制包
需先卸载原包,再安装目标版本的.rpm 包,依赖需手动处理。
实操步骤
- 备份配置文件:
cp /etc/软件名/软件名.conf /etc/软件名/软件名.conf.bak(根据实际配置路径调整); - 卸载当前版本:
rpm -e 软件名(-e参数表示卸载); - 清理残留文件:
rm -rf /etc/软件名(若需彻底清理配置,可选); - 安装目标版本的.rpm 包:
rpm -ivh 目标版本软件.rpm; - 处理依赖报错:若提示缺失依赖,执行
dnf install -y 缺失依赖名; - 恢复配置文件:
cp /etc/软件名/软件名.conf.bak /etc/软件名/软件名.conf; - 验证:
软件名 --version(确认版本)+ 功能测试(启动服务并调用功能)。
5.离线软件管理
在无网络环境下,可通过以下方式管理软件:
-
下载 rpm 包及依赖(提前准备):
# 在有网环境下载包和依赖到指定目录(如/offline_pkgs) dnf install --downloadonly --downloaddir=/offline_pkgs package_name -
离线安装本地 rpm 包:
# 方法1:dnf自动解决本地依赖(需所有包在同一目录) dnf install /offline_pkgs/*.rpm# 方法2:rpm批量安装(需手动确保依赖顺序) rpm -ivh /offline_pkgs/*.rpm
6.软件版本锁定(防止意外升级)
如需固定某个软件的版本(如避免升级破坏兼容性),可使用版本锁定工具。
操作步骤(以dnf为例)
- 安装锁定工具:
dnf install python3-dnf-plugin-versionlock。 - 锁定版本:
dnf versionlock add package_name-1.2.3(指定具体版本)。 - 查看锁定列表:
dnf versionlock list。 - 解锁版本:
dnf versionlock delete package_name-1.2.3。 - 清除所有锁定:
dnf versionlock clear。
#下载版本锁定工具
[root@haha ~]# dnf install python3-dnf-plugin-versionlock
·········
Dependencies resolved.
=======================================================Package Arch Version Repo Size
=======================================================
Installing:python3-dnf-plugin-versionlocknoarch 4.3.0-20.el9 BaseOS 28 kTransaction Summary
=======================================================
Install 1 PackageTotal size: 28 k
Installed size: 27 k
Is this ok [y/N]: y
·············python3-dnf-plugin-versionlock-4.3.0-20.el9.noarch Complete!
#查看当前NGINX信息
[root@haha ~]# dnf info nginx
Updating Subscription Management repositories.
Unable to read consumer identityThis system is not registered with an entitlement server. You can use "rhc" or "subscription-manager" to register.Last metadata expiration check: 0:31:17 ago on Sat 08 Nov 2025 09:50:50 AM CST.
Installed Packages
Name : nginx
Epoch : 2
Version : 1.20.1
Release : 22.el9
Architecture : x86_64
Size : 148 k
Source : nginx-1.20.1-22.el9.src.rpm
Repository : @System
From repo : AppStream
Summary : A high performance web server and: reverse proxy server
URL : https://nginx.org
License : BSD
Description : Nginx is a web server and a reverse: proxy server for HTTP, SMTP, POP3 and: IMAP protocols, with a strong focus on: high concurrency, performance and low: memory usage.
#锁定NGINX版本为1.20.1
[root@haha ~]# dnf versionlock add nginx-1.20.1
Adding versionlock on: nginx-2:1.20.1-22.el9.*
#查看版本锁定表
[root@haha ~]# dnf versionlock listnginx-2:1.20.1-22.el9.*
#解除锁定
[root@haha ~]# dnf versionlock delete nginx-1.20.1
Deleting versionlock for: nginx-2:1.20.1-22.el9.*[root@haha ~]# dnf versionlock clearLast metadata expiration check: 0:33:48 ago on Sat 08 Nov 2025 09:50:50 AM CST.
四、包组管理及模块化管理
1.包组管理(Package Groups)
包组是多个相关软件包的集合(如 “开发工具”“Web 服务器”),适合批量安装功能模块。
常用命令(dnf/yum 通用)
- 列出所有包组:
dnf group list(带@表示已安装)。 - 安装包组:
dnf group install "Development Tools"(包组名含空格需加引号)。 - 卸载包组:
dnf group remove "Development Tools"。 - 查看包组包含的软件:
dnf group info "Development Tools"。
示例:安装开发工具包组(包含gcc、make等编译工具):
dnf group install "Development Tools" -y
2.模块化管理(Module Stream)
RHEL 8+/CentOS 8 + 引入模块化管理,允许同一软件的多个版本(模块流)共存,解决不同应用对软件版本的依赖冲突(如 Python 3.6 和 Python 3.9)。
核心概念
- 模块(Module):软件的集合(如
python39、nodejs)。 - 流(Stream):模块的具体版本(如
python39:3.9、nodejs:16)。 - ** profiles **:模块的预定义安装配置(如
devel包含开发工具,minimal为最小安装)。
常用命令
- 列出所有可用模块:
dnf module list。 - 查看模块详情(含流和 profiles):
dnf module info python39。 - 启用模块流(默认安装):
dnf module enable python39:3.9。 - 安装模块(指定 profile):
dnf module install python39:3.9/devel。 - 禁用模块流:
dnf module disable python39:3.8(避免冲突)。
示例:安装 Python 3.9 开发环境:
dnf module enable python39:3.9 -y
dnf module install python39:3.9/devel -y
五、软件包签名与验证(GPG)
软件包签名与验证(基于 GPG,GNU Privacy Guard)是 Linux 系统中保障软件安全性的核心机制,用于确认软件包的完整性(未被篡改)和来源合法性(来自官方或可信发布者)
1.核心概念
GPG 密钥对
- 发布者生成一对密钥:私钥(用于签名软件包,严格保密)和公钥(公开分发,用于验证签名)。
- 类比:私钥像 “印章”,公钥像 “验章工具”—— 用私钥签名的内容,只有对应的公钥能验证其真伪。
软件包签名过程发布者在发布软件包(如.rpm、.deb)时,会用自己的私钥对软件包的 “哈希值”(类似文件的唯一指纹)进行加密,生成 “签名文件”(通常与软件包同名,后缀为.sig或.asc)。
- 哈希值:对软件包内容计算得到的固定长度字符串,若文件被篡改,哈希值会立即变化。
验证过程用户获取软件包和签名文件后,使用发布者的公钥解密签名文件,得到原始哈希值;同时计算本地软件包的哈希值,对比两者是否一致:
- 一致:软件包未被篡改,且确实来自该公钥对应的发布者。
- 不一致:软件包可能被篡改,或签名来源不可信(需警惕恶意软件)。
2.Linux 中 GPG 验证的实际应用(以 RPM/DNF 为例)
导入公钥系统默认会预装官方仓库的 GPG 公钥(存储在/etc/pki/rpm-gpg/目录)。若使用第三方仓库,需手动导入其公钥:
# 示例:导入Docker官方GPG公钥
rpm --import https://download.docker.com/linux/centos/gpg
仓库配置中的签名验证软件仓库配置文件(如/etc/yum.repos.d/*.repo)中会指定 GPG 公钥路径,确保从该仓库下载的软件包会自动验证签名:
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1 # 开启GPG验证(1=开启,0=关闭,不建议关闭)
gpgkey=https://download.docker.com/linux/centos/gpg # 公钥地址
手动验证单个软件包若手动下载了.rpm包,可通过以下命令验证签名:
# 检查软件包的签名信息(需已导入对应公钥)
rpm -K 软件包.rpm
# 输出示例(OK表示验证通过):
# docker-ce-24.0.6-1.el9.x86_64.rpm: digests signatures OK
- 若提示 “BADSIGN”:签名无效(包被篡改或公钥未导入)。
- 若提示 “NOKEY”:缺少对应公钥,需先导入
rpm --import 公钥路径。
3.、为什么需要 GPG 签名验证?
- 防篡改:避免软件包在传输或存储过程中被恶意修改(如植入病毒、后门)。
- 防伪造:确保软件确实来自声明的发布者(如 Red Hat、Docker 官方),而非第三方伪造。
- 系统安全:Linux 系统依赖软件包管理工具安装程序,签名验证是抵御供应链攻击的重要防线。
4.常见问题
- “GPG key retrieval failed” 错误原因:仓库配置中的
gpgkey地址无效或无法访问。解决:手动下载公钥并导入(rpm --import 本地公钥文件)。 - 能否关闭 GPG 验证?可以通过
gpgcheck=0关闭,但强烈不建议—— 会失去对软件包安全性的校验,面临恶意软件风险。 - **公钥过期怎么办?**发布者会定期更新公钥,需重新导入新版本公钥(通常仓库会自动推送更新)。
