当前位置: 首页 > news >正文

学习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的前端工具,自动解决依赖

dnfyum的升级版本,速度更快,兼容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):提供大量官方仓库外的常用软件(如htopnginx等),安装命令:

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)等

标准流程:

  1. 确认系统发行版与包管理工具,选择适配的安装方法
  2. 检查软件是否已安装(避免重复安装冲突)
  3. 通过官方仓库或者可信来源获取安装包(推荐使用www.bing.com查询,搜索一般为软件名 rpm(需要的包类型)
  4. 安装前各项包索引(包管理工具方式)或准备依赖环境(源码/二进制包方式)
  5. 执行安装命令,实时查看安装日志,处理依赖报错
  6. 验证安装结果(版本检查+功能测试)
  7. 备份初始配置文件(便于后续故障恢复)
(1)包管理工具安装(推荐,适配主流发行版)

RedHat 系主流包管理工具为 YUM(适用于旧版本系统)和 DNF(YUM 的升级版本,适用于新版本系统),可自动处理依赖关系,操作便捷。

DNF 工具(新版本系统,如 CentOS 8+、RockyLinux)

  1. 更新包索引:dnf check-update(同步仓库最新软件信息);

  2. 检查软件是否已安装:dnf list installed | grep 软件名(如dnf list installed | grep nginx);

  3. 安装软件:dnf install -y 软件名-y参数自动确认安装,无需手动输入 “y”);

  4. 安装指定版本(需先确认仓库中可用版本):

    • 列出仓库中所有可用版本: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 软件名-版本信息(版本信息需与仓库显示完全一致);

  5. 验证安装:

    • 版本检查:软件名 --version(如nginx -v);
    • 功能测试:启动服务(如 systemctl start 软件名),通过实际功能调用确认正常(如访问网页、执行命令等)。

YUM 工具(旧版本系统,如 CentOS 7 及以下)

  1. 更新包索引:yum check-update
  2. 检查已安装状态:yum list installed | grep 软件名
  3. 安装软件: yum install -y 软件名
  4. 安装指定版本:
    • 列出可用版本:yum --showduplicates list 软件名
    • 安装指定版本: yum install -y 软件名-版本信息
  5. 验证安装:同 DNF,执行软件名 --version和功能测试。
(2) 源码编译安装(定制化场景)

适用于需要特定版本、自定义功能(如开启隐藏模块、优化编译参数)或仓库无对应版本的场景,操作稍复杂但灵活性极高。

标准流程

从软件官方官网或可信开源平台(如 GitHub)获取源码包;

安装编译必需的依赖工具(编译器、开发库等);

下载并解压源码包;

配置编译参数(指定安装路径、功能模块等);

编译并安装;

配置环境变量(如需全局调用软件命令);

验证安装与功能。

实操步骤(以安装 Nginx 1.24.0 为例)

  1. 安装编译依赖:
    • dnf install -y gcc make openssl-devel zlib-devel pcre-devel
  2. 下载源码包:wget http://nginx.org/download/nginx-1.24.0.tar.gz(官网地址,避免第三方来源);在这里插入图片描述
  3. 解压源码后切换到nginx-1.24.0目录:tar -zxvf nginx-1.24.0.tar.gz && cd nginx-1.24.0
  4. 配置编译参数(自定义安装路径与功能):
    • ./configure --prefix=/usr/local/nginx(指定安装目录,避免与系统默认路径冲突)
    • 可选添加功能模块:./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_gzip_static_module(开启 SSL 和 Gzip 功能)
  5. 编译与安装:make && make installmake编译生成可执行文件,make install复制文件到指定路径)
  6. 配置环境变量(全局调用 nginx 命令):
    • 编辑环境变量文件:vim /etc/profile
    • 添加内容:export PATH=$PATH:/usr/local/nginx/sbin
    • 生效配置:source /etc/profile
  7. 验证:nginx -v(显示版本即成功)+ 启动测试(/usr/local/nginx/sbin/nginx,访问 IP 确认)。
(3) 二进制包手动安装(.rpm)

适用于官网提供预编译二进制包(非仓库版本)的场景,需手动处理依赖,适合快速安装特定版本。

  • 标准流程

    1. 从软件官方渠道下载对应 RedHat 系的.rpm 包;
    2. 检查包完整性(可选,通过 MD5 校验值确认);
    3. 执行安装命令,处理可能的依赖报错;
    4. 验证安装与功能。
  • 实操步骤

    1. 下载.rpm 包:如从官网获取软件名.rpm
    2. 安装包文件: rpm -ivh 软件名.rpm-i安装,-v显示详细信息,-h显示进度条);
    3. 处理依赖报错:若安装时提示缺失依赖,执行 dnf install -y 缺失依赖名(根据报错信息手动安装依赖,DNF 会自动处理依赖关系);
    4. 验证:软件名 --version(确认版本)+ 功能测试(启动服务并调用功能)。
(4)第三方通用工具安装(Snap/Flatpak)

跨发行版的包管理工具,无需担心系统兼容性,适合安装较新或特殊版本的软件(如最新版 VS Code、Chrome)。

Snap 工具

  1. 安装 Snap(RedHat 系需手动部署): dnf install -y snapd && systemctl enable --now snapd.socket
  2. 搜索软件及版本:snap find 软件名
  3. 安装指定版本(通过通道控制):
    • 稳定版: snap install 软件名
    • 特定版本: snap install 软件名 --channel=版本通道(如--channel=stable指定稳定通道);
  4. 验证:软件名 --version

Flatpak 工具

  1. 安装 Flatpak: dnf install -y flatpak && flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
  2. 搜索软件:flatpak search 软件名
  3. 安装:flatpak install -y flathub 软件名//版本分支
  4. 验证:flatpak run 软件名 --version
(5)注意事项
  1. 仓库配置:优先使用官方基础仓库(BaseOS、AppStream),第三方仓库(如 EPEL)需确认可信性,避免依赖冲突;
  2. 依赖管理:DNF/YUM 自动处理依赖,但降级版本时可能出现 “依赖不兼容”,需优先选择仓库中与系统版本匹配的目标版本;
  3. 源码安装路径:建议统一安装到/usr/local/软件名/opt/软件名,与系统默认路径区分,避免与包管理工具安装的软件冲突;
  4. 服务管理:通过systemctl管理服务(启动 / 停止 / 重启),版本切换后需重新加载服务配置( systemctl daemon-reload);
  5. 生产环境操作:版本更改前在测试环境验证,操作时备份关键数据,必要时停机维护,避免因版本冲突导致服务中断。

3.软件卸载

在 Linux 系统中,软件卸载的方法主要取决于软件的安装方式(如 RPM 包管理、源码编译、容器等),以下是常见场景的卸载方法:

(1)通过包管理器卸载(RPM/DNF/YUM,最常用)

适用于通过 dnf installyum installrpm -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 源码编译安装的,需通过以下方式卸载:

  1. 若源码目录保留(推荐):进入源码编译目录,执行卸载命令(部分软件支持,需源码包提供 uninstall 规则):

    cd 源码目录
    make uninstall
    
  2. 若源码目录已删除(手动清理):需手动删除安装时生成的文件(通常安装路径为 /usr/local/软件名 或自定义路径):

    # 假设安装到 /usr/local/nginx
    rm -rf /usr/local/nginx
    # 清理可能的软链接
    rm -f /usr/bin/nginx
    
(3)卸载容器化软件(如 Docker 容器)

若软件以 Docker 容器形式运行,需先停止容器,再删除容器和镜像:

  1. 停止并删除容器

    # 查看运行的容器
    docker ps
    # 停止容器(替换容器ID或名称)
    docker stop 容器ID
    # 删除容器
    docker rm 容器ID
    
  2. 删除关联镜像

    # 查看镜像
    docker images
    # 删除镜像(替换镜像ID或名称)
    docker rmi 镜像ID
    
(4)通用清理建议
  1. 检查残留文件:软件卸载后,可能残留日志、缓存或用户配置文件,常见路径:

    • 配置文件:/etc/软件名/~/.软件名/(用户目录下)
    • 日志文件:/var/log/软件名/
    • 缓存文件:/var/cache/软件名/
  2. 清理依赖(可选):卸载软件后,可能残留无用的依赖包,可通过以下命令清理:

    # DNF清理无用依赖
    dnf autoremove
    # 清理缓存
    dnf clean all
    
(5)总结
  • 优先使用包管理器(dnf remove)卸载通过仓库安装的软件,简单且不易遗漏。
  • 源码编译安装的软件需手动清理,建议保留源码目录以便 make uninstall
  • 卸载后检查残留文件,确保系统干净。

4.软件版本更改

版本更改需基于原安装方式操作,核心是 “安全卸载旧版本→清理环境→安装目标版本→验证适配”。

标准流程

  1. 备份关键数据与配置文件(避免版本切换导致数据丢失);
  2. 确认当前软件版本及安装方式(包管理 / 源码 /.rpm 包);
  3. 检查目标版本与系统的兼容性(依赖库、系统版本适配);
  4. 卸载当前版本(彻底清理文件与残留依赖);
  5. 清理系统冗余文件(缓存、无用依赖);
  6. 安装目标版本(遵循对应安装方式的标准流程);
  7. 验证版本与功能(确保无报错、功能正常);
  8. 锁定版本(可选,防止自动升级到不兼容版本)。
(1) 原安装方式:包管理工具(DNF/YUM)

通过系统包管理工具安装的软件,版本切换便捷,依赖处理自动化程度高。

实操步骤(以 DNF 为例,切换软件版本)

  1. 备份配置文件:
    • 主配置文件: cp /etc/软件名/软件名.conf /etc/软件名/软件名.conf.bak
    • 相关配置目录: cp -r /etc/软件名/conf.d /etc/软件名/conf.d.bak
  2. 查看当前版本与安装方式:
    • 版本:软件名 --version
    • 安装方式确认:rpm -qf $(which 软件名)(输出软件包信息,确认由 DNF/YUM 安装);
  3. 检查目标版本兼容性:
    • 列出仓库可用版本:dnf --showduplicates list 软件名
    • 查看目标版本依赖:dnf repoquery --requires 软件名-目标版本(确认依赖与系统兼容);
  4. 卸载当前版本:
    • 彻底卸载(含配置文件): dnf remove -y 软件名
    • 清理残留依赖: dnf autoremove -y && dnf clean all
  5. 安装目标版本: dnf install -y 软件名-目标版本(版本信息需与仓库显示完全一致);
  6. 恢复配置文件(如需):
    • cp /etc/软件名/软件名.conf.bak /etc/软件名/软件名.conf
    • cp -r /etc/软件名/conf.d.bak/* /etc/软件名/conf.d/
  7. 验证:
    • 版本检查:软件名 --version(确认显示目标版本);
    • 功能测试: systemctl start 软件名,通过实际功能调用验证(如访问服务、执行命令),查看日志journalctl -u 软件名排查报错;
  8. 锁定版本(可选):
    • 锁定: dnf versionlock add 软件名(防止dnf update自动升级);
    • 解锁:后续需升级时执行 dnf versionlock delete 软件名
  • YUM 工具补充(适用于旧版本系统)
    • 卸载: yum erase -y 软件名
    • 安装目标版本: yum install -y 软件名-目标版本
    • 锁定版本:可通过yum-versionlock插件(需先安装yum-plugin-versionlock),执行 yum versionlock 软件名
2. 原安装方式:源码编译

源码安装的软件需手动清理文件,版本切换需严格遵循 “卸载干净→重新编译” 流程。

实操步骤(切换源码安装的软件版本)

  1. 备份数据与配置:

    • 配置文件: cp -r /usr/local/软件名/conf /usr/local/软件名/conf.bak
    • 日志 / 数据文件: cp -r /usr/local/软件名/logs /usr/local/软件名/logs.bak(根据软件实际数据路径调整);
  2. 查看当前版本与安装路径:

    • 版本:软件名 --version
    • 安装路径:which 软件名(如/usr/local/软件名/sbin/软件名,确认安装目录);
  3. 卸载当前版本:

    • 若源码目录未删除:cd 原源码目录 && make uninstall(部分软件支持,自动清理文件);

    • 若不支持

      make uninstall
      

      :手动删除安装目录及相关文件:

      • rm -rf /usr/local/软件名(删除核心安装目录);
      • rm -f /usr/bin/软件名(删除软链接或环境变量指向的文件);
      • rm -f /etc/profile.d/软件名.sh(删除自定义环境变量配置);
  4. 清理编译残留: rm -rf 原源码目录

  5. 安装目标版本(重复源码编译流程):

    • 下载目标版本源码:wget 目标版本源码URL
    • 解压:tar -zxvf 目标版本源码包 && cd 解压目录
    • 配置(沿用原编译参数,确保功能一致):./configure --prefix=/usr/local/软件名 [其他参数]
    • 编译安装:make && make install
  6. 恢复配置文件: cp -r /usr/local/软件名/conf.bak/* /usr/local/软件名/conf/

  7. 验证:

    • 版本检查:软件名 --version(确认显示目标版本);
    • 功能测试:启动服务(如 /usr/local/软件名/sbin/软件名),通过功能调用确认正常,查看日志文件排查问题;
  8. 清理备份(可选):功能验证正常后,删除备份文件 rm -rf /usr/local/软件名/conf.bak /usr/local/软件名/logs.bak

3. 原安装方式:.rpm 二进制包

需先卸载原包,再安装目标版本的.rpm 包,依赖需手动处理。

实操步骤

  1. 备份配置文件: cp /etc/软件名/软件名.conf /etc/软件名/软件名.conf.bak(根据实际配置路径调整);
  2. 卸载当前版本: rpm -e 软件名-e参数表示卸载);
  3. 清理残留文件: rm -rf /etc/软件名(若需彻底清理配置,可选);
  4. 安装目标版本的.rpm 包: rpm -ivh 目标版本软件.rpm
  5. 处理依赖报错:若提示缺失依赖,执行 dnf install -y 缺失依赖名
  6. 恢复配置文件: cp /etc/软件名/软件名.conf.bak /etc/软件名/软件名.conf
  7. 验证:软件名 --version(确认版本)+ 功能测试(启动服务并调用功能)。

5.离线软件管理

在无网络环境下,可通过以下方式管理软件:

  1. 下载 rpm 包及依赖(提前准备):

    # 在有网环境下载包和依赖到指定目录(如/offline_pkgs)
    dnf install --downloadonly --downloaddir=/offline_pkgs package_name
    
  2. 离线安装本地 rpm 包:

    # 方法1:dnf自动解决本地依赖(需所有包在同一目录)
    dnf install /offline_pkgs/*.rpm# 方法2:rpm批量安装(需手动确保依赖顺序)
    rpm -ivh /offline_pkgs/*.rpm
    

6.软件版本锁定(防止意外升级)

如需固定某个软件的版本(如避免升级破坏兼容性),可使用版本锁定工具。

操作步骤(以dnf为例)

  1. 安装锁定工具:dnf install python3-dnf-plugin-versionlock
  2. 锁定版本:dnf versionlock add package_name-1.2.3(指定具体版本)。
  3. 查看锁定列表:dnf versionlock list
  4. 解锁版本:dnf versionlock delete package_name-1.2.3
  5. 清除所有锁定: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"

示例:安装开发工具包组(包含gccmake等编译工具):

dnf group install "Development Tools" -y

2.模块化管理(Module Stream)

RHEL 8+/CentOS 8 + 引入模块化管理,允许同一软件的多个版本(模块流)共存,解决不同应用对软件版本的依赖冲突(如 Python 3.6 和 Python 3.9)。

核心概念

  • 模块(Module):软件的集合(如python39nodejs)。
  • 流(Stream):模块的具体版本(如python39:3.9nodejs: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.常见问题

  1. “GPG key retrieval failed” 错误原因:仓库配置中的gpgkey地址无效或无法访问。解决:手动下载公钥并导入(rpm --import 本地公钥文件)。
  2. 能否关闭 GPG 验证?可以通过gpgcheck=0关闭,但强烈不建议—— 会失去对软件包安全性的校验,面临恶意软件风险。
  3. **公钥过期怎么办?**发布者会定期更新公钥,需重新导入新版本公钥(通常仓库会自动推送更新)。
http://www.dtcms.com/a/586277.html

相关文章:

  • 广东品牌网站建设报价表网站建设中的财务预算
  • 什么网站的易用性重庆seo网站推广费用
  • 速卖通测评自养号技术:搭建安全稳定账号体系,流量销量双突破
  • 22-webpack案例:36kr
  • PCB批量处理命令
  • 网站建设 制作教程 pdf在山东和网页有关的公司
  • Go 语言接口
  • wordpress网站如何迁移电商网站建设课程
  • Keil编译出现:Missing Compiler Version 5
  • 十大免费网站推广平台有哪些创意设计素材
  • 为什么网站浏览不是做的那样农村自建房设计图软件
  • 如何设计一份精美到ppt
  • 网站如何做ssl认证计算机网站建设是什么
  • MySQL——数据库基础
  • 配置flutter鸿蒙的环境和创建并运行第一个flutter鸿蒙项目【精心制作】
  • UE核心架构概念
  • 叙述一个网站的建设过程免费网站建设绑定域名
  • 模型理解与可解释性图表案例解读之SHAP 瀑布图(Waterfall Plot)
  • 网站建设在哪个会计科目核算游戏币网站建设成本
  • 地方招聘网站如何做推广温州市城市建设档案馆网站
  • Robotiq 2F-85/2F-140夹爪:为具身智能科研搭建物理交互核心硬件支撑
  • 关于MMDetection综述
  • 免费的工程网站Wordpress建站安装教程图解
  • 厦门行业网站建设开发公司支付前期物业开办费包括哪些内容
  • 深圳网站建设招聘网络营销推广方案策划书
  • MATLAB实现TCN神经网络数值预测
  • 衡水网站制作公司哪家专业珠海新闻
  • Linux30 网络编程TCP流程
  • 多线程——volatile 关键字 wait 和 notify
  • 江苏网站建设南通西宁 专业网站建设