Linux软件包管理完全指南:从rpm到yum再到源码编译
2026/7/29 4:51:49 网站建设 项目流程

文章目录

  • Linux软件包管理完全指南:从rpm到yum再到源码编译
    • 前言
    • 一、Linux软件包管理概览
      • 1.1 两大包管理体系
      • 1.2 RPM包文件名格式
      • 1.3 RPM包的三部分构成
    • 二、rpm命令:最底层的包管理工具
      • 2.1 查询操作(重点)
      • 2.2 验证操作
      • 2.3 安装与卸载
      • 2.4 从RPM包中提取文件
    • 三、yum命令:自动化依赖管理的包管理器
      • 3.1 常用yum命令
      • 3.2 yum history:事务管理
      • 3.3 软件包组管理
      • 3.4 yum与rpm的依赖降级实战
    • 四、yum仓库配置与管理
      • 4.1 仓库配置文件位置
      • 4.2 查看和管理仓库
      • 4.3 仓库缓存
      • 4.4 添加第三方仓库
      • 4.5 EPEL仓库
    • 五、源码编译安装
      • 5.1 为什么要源码安装?
      • 5.2 通用编译三部曲
      • 5.3 实战:源码安装Nginx
      • 5.4 实战:源码安装cmatrix(炫酷代码雨)
    • 六、自建yum仓库
      • 6.1 自建仓库流程
      • 6.2 详细步骤
    • 写在最后

Linux软件包管理完全指南:从rpm到yum再到源码编译

学会这几种安装方式,Linux下装软件再也不用求人

前言

在Windows上装软件,要么双击exe一路下一步,要么去商店点一下安装。到了Linux下,装软件的方式突然多了起来——有rpm命令、有yum命令、还有源码编译,到底有什么区别?什么时候用哪种?

今天的内容就是Linux软件包管理的完整知识体系,从rpm包的结构讲到yum仓库的配置,从源码编译讲到自建仓库,全程带实操。看完你就能理解Linux软件生态的底层逻辑,在任何发行版上都能搞定软件安装。


一、Linux软件包管理概览

1.1 两大包管理体系

体系包格式包管理命令代表发行版
RPM系.rpmrpm / yum / dnfRHEL、CentOS、Fedora、Rocky
DEB系.debdpkg / aptDebian、Ubuntu、Kali

1.2 RPM包文件名格式

name-version-release.architecture.rpm

示例:lrzsz-0.12.20-36.el7.x86_64.rpm

字段含义
name软件名称(lrzsz)
version原始版本号(0.12.20)
release打包商发行号(36.el7)
architecture架构(x86_64 / noarch / aarch64)

1.3 RPM包的三部分构成

每个rpm包包含:

  • 要安装的文件(二进制程序、配置文件、文档等)
  • 元数据(名称、版本、依赖关系、许可证、变更日志)
  • 脚本(安装前/后、卸载前/后执行的脚本)

💡 RPM包通常由软件提供商用GPG私钥签名,客户端用公钥验证签名,确保包的完整性和来源可信。

二、rpm命令:最底层的包管理工具

rpm命令适合查询本地包安装,但不能自动解决依赖关系

2.1 查询操作(重点)

用途命令
查询所有已安装包rpm -qa
查询某包是否安装rpm -q httpd
查看包元数据rpm -qi coreutils
查看包包含哪些文件rpm -ql openssh-server
查看包配置文件rpm -qc openssh-server
查看包文档文件rpm -qd openssh-server
查询文件属于哪个包rpm -qf /etc/ssh/sshd_config
查看包脚本rpm -q openssh-server --scripts
查询未安装的rpm包文件rpm -qpl httpd.rpm
查询软件包组rpm -qg 'System Environment/Base'

2.2 验证操作

# 验证软件包文件是否被修改[root@centos7 ~]$rpm-Vopenssh-server# 修改配置文件后验证[root@centos7 ~]$sed-i's/PermitRootLogin yes/PermitRootLogin no/g'/etc/ssh/sshd_config[root@centos7 ~]$rpm-Vopenssh-server S.5....T. c /etc/ssh/sshd_config# S 文件大小变化,5 MD5变化,T 修改时间变化,c 配置文件# 移走文件后验证[root@centos7 ~]$mv/etc/ssh/sshd_config.[root@centos7 ~]$rpm-Vopenssh-server 遗漏 c /etc/ssh/sshd_config

验证输出中的字符含义:

字符含义
S文件大小改变
M权限/类型改变
5MD5校验改变
D设备号改变
L链接路径改变
U属主改变
G属组改变
T修改时间改变

2.3 安装与卸载

# 安装(-i install,-v 显示详情,-h 显示进度条)[root@centos7 ~]$rpm-ivhlrzsz-0.12.20-36.el7.x86_64.rpm# 卸载(-e erase)[root@centos7 ~]$rpm-evhlrzsz# 重新安装[root@centos7 ~]$rpm--reinstall-vhlrzsz-0.12.20-36.el7.x86_64.rpm

依赖问题示例

[root@centos7 ~]$rpm-ivhhttpd-2.4.6-99.el7.centos.1.x86_64.rpm 错误:依赖检测失败: /etc/mime.types 被 httpd 需要 httpd-tools=2.4.6-99.el7.centos.1 被 httpd 需要 libapr-1.so.0()(64bit)被 httpd 需要 libaprutil-1.so.0()(64bit)被 httpd 需要

这就是rpm的局限——依赖需要手动解决。

2.4 从RPM包中提取文件

方法一:两步法

# rpm → cpio格式[root@centos7 ~]$ rpm2cpio httpd.rpm>httpd.cpio# 查看cpio内容[root@centos7 ~]$ cpio-t<httpd.cpio# 提取所有文件[root@centos7 ~]$ cpio-id'*'<httpd.cpio# 提取特定文件[root@centos7 ~]$ cpio-id./etc/httpd/conf/httpd.conf<httpd.cpio

方法二:一步法

[root@centos7 ~]$ rpm2cpio httpd.rpm|cpio-id'*'

三、yum命令:自动化依赖管理的包管理器

Yum(Yellowdog Updater Modified)是rpm的前端工具,自动解决依赖关系,是日常最常用的包管理方式。

3.1 常用yum命令

用途命令
查询包信息yum info httpd
列出包yum list 'http*'
列出所有版本yum list httpd --showduplicates
搜索包yum search 'web server'
查找哪个包提供某文件yum provides /usr/bin/sar
安装包yum install -y vsftpd
只下载不安装yum install vsftpd --downloadonly --downloaddir=/root/
安装本地rpm包yum localinstall ./vsftpd.rpm
降级包yum downgrade -y httpd-2.4.6-97.el7.centos
升级包yum update vsftpd
卸载包yum remove -y vsftpd

3.2 yum history:事务管理

# 查看历史事务[root@centos7 ~]$ yumhistorylist ID|Login user|Date andtime|Action(s)|Altered ---------------------------------------------------------4|root|2026-01-04 09:37|Downgrade|13|root|2026-01-04 09:36|Install|1# 查看事务详情[root@centos7 ~]$ yumhistoryinfo3# 撤销事务(反向操作)[root@centos7 ~]$ yumhistoryundo4# 重做事务[root@centos7 ~]$ yumhistoryredo3

3.3 软件包组管理

# 查看所有包组[root@centos7 ~]$ yum grouplist# 查看包组详情[root@centos7 ~]$ yum groupinfo'Server with GUI'# 安装包组[root@centos7 ~]$ yum groupinstall'Server with GUI'# 卸载包组[root@centos7 ~]$ yum groupremove mariadb-client

3.4 yum与rpm的依赖降级实战

# 安装最新版httpd[root@centos7 ~]$ yuminstall-yhttpd# 降级到旧版本(单降httpd会失败)[root@centos7 ~]$ yum downgrade-yhttpd-2.4.6-97.el7.centos 错误:httpd-2.4.6-97.el7.centos 需要 httpd-tools=2.4.6-97.el7.centos 已安装 httpd-tools-2.4.6-99.el7.centos.1# 正确方式:一起降级[root@centos7 ~]$ yum downgrade-yhttpd-tools-2.4.6-97.el7.centos httpd-2.4.6-97.el7.centos

四、yum仓库配置与管理

4.1 仓库配置文件位置

  • 主配置/etc/yum.conf(全局默认值)
  • 仓库配置/etc/yum.repos.d/*.repo

4.2 查看和管理仓库

# 查看已启用仓库[root@centos7 ~]$ yum repolist# 查看所有仓库(含禁用的)[root@centos7 ~]$ yum repolist all# 启用仓库[root@centos7 ~]$ yum-config-manager--enableepel-debuginfo# 禁用仓库[root@centos7 ~]$ yum-config-manager--disableepel-debuginfo

4.3 仓库缓存

# 清理缓存[root@centos7 ~]$ yum clean all# 生成缓存(让yum install支持tab补全)[root@centos7 ~]$ yum makecache

4.4 添加第三方仓库

添加Kubernetes仓库

[root@centos7 ~]$ yum-config-manager --add-repo=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/[root@centos7 ~]$ yuminstallkubectl--nogpgcheck

手动添加Docker仓库

[root@centos7 ~]$cat<<'EOF'>/etc/yum.repos.d/docker-ce.repo[docker-ce-stable] name=Docker CE Stable - $basearch baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable enabled=1 gpgcheck=0 EOF[root@centos7 ~]$ yum list docker-ce

4.5 EPEL仓库

EPEL(Extra Packages for Enterprise Linux)提供官方仓库没有的额外软件包。

[root@centos7 ~]$curl-s-o/etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

五、源码编译安装

5.1 为什么要源码安装?

场景原因
需要最新版本官方仓库版本较旧
需要定制功能编译时按需启用/禁用模块
软件不在仓库没有现成的rpm包

5.2 通用编译三部曲

./configure --prefix=/安装路径 → 配置 make → 编译 make install → 安装

5.3 实战:源码安装Nginx

# 1. 安装编译依赖[root@centos7 ~]$ yuminstall-ygccmakepcre-devel zlib-devel# 2. 下载源码[root@centos7 ~]$wgethttps://nginx.org/download/nginx-1.24.0.tar.gz# 3. 解压[root@centos7 ~]$tar-xfnginx-1.24.0.tar.gz[root@centos7 ~]$cdnginx-1.24.0/# 4. 配置[root@centos7 nginx-1.24.0]$ ./configure--prefix=/usr/local/nginx# 5. 编译安装[root@centos7 nginx-1.24.0]$make&&makeinstall# 6. 配置环境变量[root@centos7 ~]$exportPATH=$PATH:/usr/local/nginx/sbin/[root@centos7 ~]$echo'export PATH=$PATH:/usr/local/nginx/sbin/'>>~/.bashrc# 7. 使用[root@centos7 ~]$ nginx# 启动[root@centos7 ~]$ nginx-squit# 优雅停止[root@centos7 ~]$ nginx-sreload# 重载配置

配置systemd服务

[root@centos7 ~]$vim/etc/systemd/system/nginx.service
[Unit] Description=Nginx server daemon [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit [Install] WantedBy=multi-user.target
[root@centos7 ~]$ systemctl daemon-reload[root@centos7 ~]$ systemctlenablenginx--now

5.4 实战:源码安装cmatrix(炫酷代码雨)

# 安装依赖[root@centos7 ~]$ yum-yinstallgccmakeautoconf ncurses-devel# 下载解压[root@centos7 ~]$wgethttps://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2/cmatrix-1.2.tar.gz[root@centos7 ~]$tar-xfcmatrix-1.2.tar.gz[root@centos7 ~]$cdcmatrix-1.2/# 配置编译安装[root@centos7 cmatrix-1.2]$ ./configure--prefix=/usr/local/cmatrix[root@centos7 cmatrix-1.2]$make&&makeinstall# 使用[root@centos7 ~]$exportPATH=$PATH:/usr/local/cmatrix/bin[root@centos7 ~]$ cmatrix-b-u3-Cred# -b 加粗 -u 速度 -C 颜色(green/red/blue/yellow/cyan/magenta)# 运行时快捷键# 0-9:调整速度# shift+1~8:切换颜色 (! @ # $ % ^ & *)

六、自建yum仓库

6.1 自建仓库流程

准备rpm包 → 创建仓库索引 → 发布仓库 → 客户端配置验证

6.2 详细步骤

# 1. 下载软件包[root@server ~]$mkdir/var/www/html/tools/Packages-p[root@server ~]$cd/var/www/html/tools/Packages[root@server Packages]$ yumdownloadervimvsftpd lrzsz bash-completion# 2. 创建仓库索引[root@server ~]$ yuminstall-ycreaterepo[root@server ~]$ createrepo /var/www/html/tools/# 3. 发布仓库(部署httpd)[root@server ~]$ yuminstall-yhttpd[root@server ~]$ systemctlenablehttpd--now[root@server ~]$ systemctl disable firewalld--now[root@server ~]$ setenforce0# 4. 客户端配置[root@client ~]$mv/etc/yum.repos.d/*.repo /etc/yum.repos.d/old/[root@client ~]$cat<<'EOF'>/etc/yum.repos.d/tools.repo[tools] name=centos7 tools from server baseurl=http://server.laoma.cloud/tools/ enabled=1 gpgcheck=0 EOF# 5. 验证[root@client ~]$ yuminstall-yvim

写在最后

今天的内容覆盖了Linux软件包的完整生命周期:

方式特点适用场景
rpm命令最底层,不解决依赖查询包信息、验证完整性
yum命令自动解决依赖日常安装/卸载/升级
源码编译灵活定制、最新版本官方仓库没有或版本太旧
自建仓库内网分发离线环境、批量部署

一句话总结:日常用yum,查细节用rpm,追求最新或定制用源码,批量部署建自己的仓库。


📌核心命令速查

rpm-qa|-qi|-ql|-qf|-qc|-qd# 查询rpm-V包名# 验证rpm-ivh包.rpm# 安装rpm-evh包名# 卸载yum info/list/search/provides/install/remove/update/downgrade yumhistorylist/info/undo/redo yum grouplist/groupinstall/groupremove yum repolist / yum-config-manager yum clean all&&yum makecache ./configure--prefix=/path&&make&&makeinstall

点点关注,持续更新,欢迎技术讨论。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询