
1. 认识YUMLinux世界的软件管家第一次接触Linux系统时最让我困惑的就是软件安装方式。在Windows下我们习惯双击exe安装包而Linux世界却有着完全不同的规则。YUMYellowdog Updater Modified就是Red Hat系Linux发行版中那个默默帮你解决所有软件依赖关系的幕后英雄。记得2015年我刚接手公司CentOS服务器时试图手动安装一个PHP扩展结果陷入了依赖地狱——为了安装A需要先装B装B又需要C循环往复。直到同事教我用了yum install一行命令就解决了所有问题那种畅快感至今难忘。YUM本质上是一个基于RPM的包管理前端工具它通过分析软件仓库的元数据自动计算依赖关系。与直接使用rpm命令相比YUM有以下核心优势自动依赖解析不用再手动追踪还需要安装什么多仓库支持可以同时从多个源获取软件包事务性操作失败时可以回滚到之前状态简洁命令install/update/remove等直观操作2. YUM核心命令全解析2.1 软件安装与升级安装软件是YUM最常用的功能。新手常犯的错误是直接使用yum install而不带任何参数这可能导致安装过程中被询问是否继续。在生产环境中我强烈建议加上-y参数自动确认# 基础安装会交互确认 yum install nginx # 推荐方式自动确认安装 yum -y install nginx # 安装特定版本适用于需要版本控制的场景 yum install nginx-1.20.1软件升级同样重要但需要注意区分两个命令yum update升级所有可更新的软件包yum update 包名仅升级指定软件在正式环境执行大规模更新前务必先检查哪些包会被更新# 查看可更新软件列表 yum check-update # 安全更新仅更新修复安全漏洞的包 yum --security update2.2 查询与搜索技巧YUM提供了强大的查询功能但不同命令返回结果的详细程度差异很大# 基本列表简略 yum list # 查看已安装包 yum list installed # 详细包信息含依赖关系 yum info nginx # 搜索包名和描述支持通配符 yum search php*最实用的技巧是provides命令可以快速定位某个文件属于哪个包。上周我们的Python脚本报错缺少libssl.so.1.1就是用这个方法解决的yum provides */libssl.so.1.12.3 卸载与清理卸载软件看似简单但有些细节需要注意# 基本卸载保留配置文件 yum remove nginx # 彻底删除包括配置文件 yum erase nginx # 清理缓存长期不清理会占用大量空间 yum clean all特别提醒卸载依赖包时要谨慎。我曾不小心移除了glibc的依赖包导致系统基本命令都无法使用。建议先检查依赖关系yum deplist nginx3. YUM仓库配置实战3.1 国内镜像源配置默认的国外源在国内速度很慢更换为国内镜像能显著提升效率。以下是配置阿里云源的完整过程# 备份原有配置 cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载阿里云repo文件以CentOS7为例 wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo # 清理并重建缓存 yum clean all yum makecache国内常用镜像源对比镜像源地址特点阿里云mirrors.aliyun.com节点多同步快网易163mirrors.163.com历史久稳定腾讯云mirrors.cloud.tencent.com适合云服务器华为云mirrors.huaweicloud.com企业级支持3.2 本地仓库搭建在内网环境中搭建本地YUM仓库非常实用。以下是基于ISO镜像的搭建步骤挂载ISO文件mkdir /mnt/cdrom mount -o loop CentOS-7-x86_64-Everything-2009.iso /mnt/cdrom创建repo文件cat /etc/yum.repos.d/local.repo EOF [local] nameLocal Repository baseurlfile:///mnt/cdrom enabled1 gpgcheck0 EOF禁用其他仓库临时测试yum --disablerepo\* --enablerepolocal list available3.3 仓库优先级配置当多个仓库包含同一软件时可以用priority插件控制优先级# 安装插件 yum install yum-plugin-priorities # 在repo文件中添加优先级 vim /etc/yum.repos.d/epel.repo添加priority1 # 数字越小优先级越高4. 高级技巧与故障排查4.1 下载RPM包而不安装有时需要获取rpm包到本地但不安装yum install --downloadonly --downloaddir/tmp nginx4.2 查看命令历史YUM会记录所有操作方便审计# 查看完整历史 yum history # 查看某次操作的详细信息 yum history info 6 # 撤销特定事务 yum history undo 64.3 常见错误解决问题1Could not resolve host# 检查网络连接 ping mirrors.aliyun.com # 临时更换DNS echo nameserver 114.114.114.114 /etc/resolv.conf问题2Existing lock /var/run/yum.pid# 安全移除锁文件 rm -f /var/run/yum.pid问题3No package available# 检查仓库是否启用 yum repolist # 尝试清理缓存 yum clean all4.4 安全最佳实践定期更新安全补丁yum --security update验证包签名# 导入仓库密钥 rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 # 在repo中启用检查 gpgcheck1最小化安装# 安装最小系统 yum groupinstall Minimal Install5. 从YUM到DNF的演进随着Linux发展YUM的继任者DNFDandified YUM已成为CentOS8/RHEL8后的默认包管理器。两者主要区别特性YUMDNF依赖解析算法较慢SAT算法更快内存占用较高更低API支持Python 2Python 3插件系统较旧模块化设计虽然DNF是未来趋势但好消息是它基本兼容YUM命令。我的迁移建议新系统直接使用DNF现有脚本可以添加别名alias yumdnf学习几个DNF特有命令dnf autoremove # 更智能的清理 dnf history userinstalled # 查看用户安装的包在最近一次服务器迁移中我测试了相同操作的执行时间YUM安装LAMP环境2分18秒DNF安装相同环境1分42秒这个性能提升对于批量部署场景非常有价值。