文章目录
- 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系 | .rpm | rpm / yum / dnf | RHEL、CentOS、Fedora、Rocky |
| DEB系 | .deb | dpkg / apt | Debian、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 | 权限/类型改变 |
5 | MD5校验改变 |
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 ~]$ yumhistoryredo33.3 软件包组管理
# 查看所有包组[root@centos7 ~]$ yum grouplist# 查看包组详情[root@centos7 ~]$ yum groupinfo'Server with GUI'# 安装包组[root@centos7 ~]$ yum groupinstall'Server with GUI'# 卸载包组[root@centos7 ~]$ yum groupremove mariadb-client3.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-debuginfo4.3 仓库缓存
# 清理缓存[root@centos7 ~]$ yum clean all# 生成缓存(让yum install支持tab补全)[root@centos7 ~]$ yum makecache4.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-ce4.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--now5.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点点关注,持续更新,欢迎技术讨论。