【Linux运维极简教程】05-软件包管理
05 - 软件包管理
一、概述
Linux 软件包管理系统分为两大阵营:
| 体系 | 包格式 | 管理工具 | 代表发行版 |
|---|---|---|---|
| RPM 系 | .rpm | yum / dnf / rpm | CentOS, RHEL, Rocky, Fedora |
| DEB 系 | .deb | apt / dpkg | Ubuntu, Debian |
二、RPM 系包管理(CentOS/RHEL)
2.1 yum 命令
# 安装软件包yuminstall-ynginx# 更新软件包yum update-y# 更新所有包yum update-ynginx# 更新指定包# 卸载软件包yum remove nginx# 搜索软件包yum search nginx# 查看软件包信息yum info nginx# 查看已安装的包yum list installed# 查看可更新的包yum list updates# 查看某个文件属于哪个包yum provides */libcrypto.so.1.1# 清理缓存yum clean all yum makecache# 查看包的依赖关系yum deplist nginx# 查看包安装的文件列表rpm-qlnginx2.2 dnf 命令(CentOS 8+/Fedora)
dnf 是 yum 的下一代替代品,用法基本兼容:
# 用法与 yum 几乎一致dnfinstall-ynginx dnf update-ydnf remove nginx# dnf 新增功能dnf list--installeddnf autoremove# 清理不需要的依赖2.3 rpm 底层命令
rpm 是底层包管理工具,不处理依赖关系:
# 安装本地 rpm 包rpm-ivhpackage-1.0.rpm# i=安装 v=详细 h=进度条# 升级rpm-Uvhpackage-1.1.rpm# 卸载rpm-epackage-name# 查询已安装的包rpm-qa|grepnginx# 查看包安装了哪些文件rpm-qlnginx# 查看某个文件属于哪个包rpm-qf/usr/bin/curl# 查看包信息rpm-qinginx# 查看包的配置文件rpm-qcnginx# 查看包的文档文件rpm-qdnginx# 验证包文件是否被修改rpm-Vnginx2.4 配置 yum 源
使用阿里云镜像源(国内推荐)
# CentOS 7mv/etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bakcurl-o/etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo yum makecache# CentOS 8 / Rocky Linuxsed-e's|^mirrorlist=|#mirrorlist=|g'\-e's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g'\-i.bak/etc/yum.repos.d/Rocky-*.repo dnf makecache添加 EPEL 源
yuminstall-yepel-release yum makecache# EPEL 提供了大量额外软件包添加第三方源(如 Nginx 官方源)
创建/etc/yum.repos.d/nginx.repo:
[nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true三、DEB 系包管理(Ubuntu/Debian)
3.1 apt 命令
# 更新软件源索引(安装前必须执行)aptupdate# 安装软件包aptinstall-ynginx# 更新所有已安装的包aptupgrade-y# 更新系统(处理依赖关系变化)aptfull-upgrade-y# 卸载软件包aptremove nginx# 保留配置文件aptpurge nginx# 连同配置文件一起删除# 自动清理不需要的依赖aptautoremove-y# 搜索软件包aptsearch nginx# 查看包信息aptshow nginx# 查看已安装的包aptlist--installed# 查看可升级的包aptlist--upgradable3.2 dpkg 底层命令
# 安装本地 deb 包dpkg-ipackage_1.0_amd64.deb# 卸载dpkg-rpackage-name# 保留配置dpkg-Ppackage-name# 连同配置删除# 查看已安装的包dpkg-l|grepnginx# 查看包安装的文件dpkg-Lnginx# 查看文件属于哪个包dpkg-S/usr/bin/curl3.3 配置 apt 源
# Ubuntu 22.04 替换为阿里云源sed-i's|http://archive.ubuntu.com|https://mirrors.aliyun.com|g'/etc/apt/sources.listsed-i's|http://security.ubuntu.com|https://mirrors.aliyun.com|g'/etc/apt/sources.listaptupdate添加 PPA 源
# 添加 PPAaptinstall-ysoftware-properties-common add-apt-repository ppa:ondrej/phpaptupdate# 删除 PPAadd-apt-repository--removeppa:ondrej/php四、源码编译安装
当软件包管理器中没有需要的版本时,可以从源码编译安装。
通用流程
# 1. 安装编译工具链yum groupinstall-y"Development Tools"# CentOSaptinstall-ybuild-essential# Ubuntu# 2. 下载源码wgethttps://example.com/software-1.0.tar.gztar-xzfsoftware-1.0.tar.gzcdsoftware-1.0# 3. 配置(检查依赖,指定安装路径)./configure--prefix=/usr/local/software --with-ssl=/usr/local/ssl# 4. 编译make-j$(nproc)# 5. 安装makeinstall# 6. 验证/usr/local/software/bin/software--versionNginx 编译安装示例
# 1. 安装依赖yuminstall-ygcc pcre-devel openssl-devel zlib-develmake# 2. 下载并解压wgethttp://nginx.org/download/nginx-1.25.3.tar.gztar-xzfnginx-1.25.3.tar.gzcdnginx-1.25.3# 3. 配置编译选项./configure\--prefix=/usr/local/nginx\--with-http_ssl_module\--with-http_v2_module\--with-http_realip_module\--with-http_stub_status_module# 4. 编译并安装make-j$(nproc)&&makeinstall# 5. 创建软链接ln-s/usr/local/nginx/sbin/nginx /usr/sbin/nginx# 6. 验证nginx-v五、通用软件管理工具
5.1 snap(Ubuntu)
# 安装snapinstallcode--classic# 查看snap list# 更新snap refresh code# 卸载snap remove code5.2 二进制包直接安装
很多现代软件(如 Go、Node.js、Docker)提供预编译二进制包:
# 安装 Gowgethttps://go.dev/dl/go1.21.5.linux-amd64.tar.gzrm-rf/usr/local/gotar-C/usr/local-xzfgo1.21.5.linux-amd64.tar.gz# 配置环境变量echo'export PATH=$PATH:/usr/local/go/bin'>>/etc/profilesource/etc/profile# 验证go version六、实战场景
场景一:排查"命令找不到"问题
# 确认命令是否存在whichnginxwhereisnginx# 查看命令属于哪个包yum provides */nginx# CentOSapt-file search bin/nginx# Ubuntu(需先 apt install apt-file && apt-file update)# 安装对应的包yuminstall-ynginx场景二:制作本地 yum 仓库
# 1. 安装 createrepoyuminstall-ycreaterepo# 2. 创建仓库目录,放入 rpm 包mkdir-p/data/repocp*.rpm /data/repo/# 3. 创建仓库元数据createrepo /data/repo# 4. 配置本地源cat>/etc/yum.repos.d/local.repo<<'EOF' [local] name=Local Repository baseurl=file:///data/repo enabled=1 gpgcheck=0 EOF# 5. 使用yum makecache yum list--disablerepo="*"--enablerepo="local"场景三:锁定软件包版本
# CentOS - yum versionlock 插件yuminstall-yyum-plugin-versionlock yum versionlock nginx-1.25.3-1.el7# Ubuntu - apt-mark holdapt-mark hold nginx apt-mark showhold apt-mark unhold nginx七、小结
本篇介绍了 RPM 系(yum/dnf/rpm)和 DEB 系(apt/dpkg)两大包管理体系,以及源码编译安装方法。实际运维中应优先使用包管理器安装,便于统一管理和更新;仅在需要特定版本或定制功能时才使用源码编译。
上一篇:04 - 进程与服务管理
下一篇:06 - 网络配置与管理
