在CentOS系统中,添加和删除软件是日常运维和开发中常见的操作,CentOS作为基于Red Hat Enterprise Linux(RHEL)的发行版,提供了多种工具来管理软件包,包括YUM(Yellowdog Updater, Modified)、DNF(Dandified Yum)以及RPM(Red Hat Package Manager),掌握这些工具的使用方法,可以高效地管理系统软件,确保系统的稳定性和安全性。

使用YUM管理软件包
YUM是CentOS 7及之前版本默认的软件包管理工具,它通过依赖关系解析,自动处理软件包之间的依赖问题,简化了软件的安装、升级和删除过程,使用YUM安装软件包时,只需执行yum install 包名命令,系统会自动下载并安装所需的软件包及其依赖,安装Apache服务器时,可以运行yum install httpd,YUM会从配置的软件源中查找并下载软件包,确保软件包的完整性和安全性。
删除软件包时,可以使用yum remove 包名或yum erase 包名命令,这两个命令的功能相同,都会删除指定的软件包及其依赖的未被其他包使用的组件,卸载Apache服务器时,执行yum remove httpd即可,需要注意的是,删除软件包前应确认该包未被其他依赖关系重要的软件使用,以免影响系统稳定性。
YUM还支持批量操作,如yum groupinstall "Development Tools"可以安装整个软件包组,而yum groupremove "Development Tools"则可以卸载整个组,使用yum update可以升级所有已安装的软件包,确保系统始终处于最新状态,修复潜在的安全漏洞。
使用DNF管理软件包
DNF是CentOS 8及更高版本默认的软件包管理工具,它是YUM的下一代替代品,具有更快的性能和更丰富的功能,DNF的命令语法与YUM基本兼容,因此从YUM迁移到DNF非常简单,使用DNF安装软件包的命令为dnf install 包名,例如dnf install nginx,DNF同样会自动处理依赖关系,确保软件包的正确安装。
删除软件包时,DNF提供了dnf remove 包名或dnf erase 包名命令,卸载Nginx服务器可以执行dnf remove nginx,DNF在删除软件包时会显示将要删除的依赖项,让用户确认操作,避免误删重要组件,DNF支持autoremove选项,可以自动删除不再需要的依赖包,释放磁盘空间。
DNF还引入了module功能,允许用户管理软件的不同版本。dnf module enable php:7.4可以启用PHP 7.4模块,然后使用dnf install php安装指定版本的PHP,这种功能在需要多版本软件共存的环境中非常有用。

使用RPM管理软件包
RPM是Red Hat系列系统的底层软件包管理工具,直接操作.rpm文件,与YUM和DNF不同,RPM不处理依赖关系,因此使用时需要手动解决依赖问题,安装.rpm文件可以使用rpm -ivh 包名.rpm命令,其中i表示安装,v显示详细信息,h以哈希形式显示进度。rpm -ivh example.rpm会安装指定的软件包。
删除软件包时,可以使用rpm -e 包名命令。rpm -e example会卸载名为example的软件包,需要注意的是,如果软件包存在依赖关系,RPM会拒绝删除,并显示依赖错误信息,此时需要先解决依赖问题或使用YUM/DNF进行删除查询。
RPM还提供了查询功能,如rpm -qa可以列出所有已安装的软件包,rpm -qi 包名可以显示软件包的详细信息,rpm -ql 包名可以列出软件包安装的文件,这些功能在排查软件包问题时非常有用。
配置软件源
软件源是YUM和DNF下载软件包的服务器地址,默认情况下,CentOS使用官方软件源,但有时需要配置第三方软件源或国内镜像源以提高下载速度,编辑/etc/yum.repos.d/目录下的.repo文件,可以添加或修改软件源,添加阿里云的CentOS 7软件源,可以创建CentOS-Base.repo文件,并写入以下内容:
[base] name=CentOS-$releasever - Base baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
配置完成后,运行yum clean all和yum makecache可以清除缓存并生成新的软件源缓存,对于DNF,可以使用dnf makecache命令。
软件包的查询与维护
在管理软件包时,查询功能非常重要,使用yum list或dnf list可以列出所有可用的软件包,yum list installed或dnf list installed可以列出已安装的软件包。yum search 关键词或dnf search 关键词可以搜索包含指定关键词的软件包。

维护软件包时,定期清理不必要的软件包可以释放磁盘空间,使用yum autoremove或dnf autoremove可以自动删除不再需要的依赖包,使用yum history list或dnf history list可以查看软件包的历史操作,使用yum history undo 操作ID或dnf history undo 操作ID可以撤销之前的操作。
相关问答FAQs
Q1: 如何解决YUM/DNF依赖错误?
A: 当遇到依赖错误时,可以尝试使用yum install 包名 --skip-broken或dnf install 包名 --skip-broken跳过依赖检查安装软件包,如果问题依然存在,可以使用yum deplist 包名或dnf repoquery --requires --resolve 包名查看依赖关系,然后手动安装缺失的依赖包。
Q2: 如何卸载不再需要的软件包及其依赖?
A: 使用yum autoremove 包名或dnf autoremove 包名可以卸载指定的软件包及其未被其他包使用的依赖,使用package-cleanup -leaves命令可以列出所有未被依赖的软件包,然后手动选择卸载。