简介DNF命令(Dandifiedyum)是传统的基于RedHat系统的YUM包管理器的下一代版本。它是Fedora22、CentOS8和RHEL8的默认包管理器。它旨在取代YUM。它使用RPM和libsolv(由OpenSUSE维护)进行包管理。DNF旨在改善YUM的瓶颈,即性能、内存使用、依赖解析、速度和许多其他因素。DNF使用RPM、libsolv和hawkey库进行包管理。虽然在CentOS和RHEL7中没有单独安装,但是可以yum、dnf和yum一起使用。DNF的最新稳定版本是2015年5月11日发布的1.0(撰写本文时)。它(以及所有以前的DNF版本)主要是用Python编写的,并在GPLv2许可下发布。dnf命令的基本用法dnf命令的一般语法为dnf[options][...]可用的命令包括install、search、query等,args可以是“command”具体的包名、组名或子命令。注意:要安装和删除软件包,您需要sudo权限。由于我已经是root用户(这不是一个好主意,但出于演示目的),我没有在任何命令前加上sudo。但请记住,在安装和删除软件包时必须在前面加上sudo。DNF的安装DNF在RHEL/CentOS7的默认存储库中不可用。但是,Fedora22附带了DNF的官方实现。要在RHEL/CentOS系统上安装DNF,您需要先安装并启用epel-release存储库。#yuminstallepel-releaseOR#yuminstallepel-release-y#yuminstalldnf查看DNF版本#dnf--versionlistenabledDNFrepositories#dnfrepolistlistallenabledanddisabledDNFrepositories#dnfrepolistall使用DNF列出所有可用和已安装的包#dnflist使用DNF列出所有已安装的包#dnflistinstalled使用DNF列出特定的包dnflistinstalled|grepbash使用DNF列出所有可用的包#dnflistavailable使用DNF搜索包如果您不知道要安装的包,在这种情况下您可以使用dnf命令的“搜索”选项来搜索与单词或字符串匹配的包(例如nano)。#dnfsearchnano查看提供了哪些文件/子包?dnf选项“provides”查找提供特定文件/子包的包的名称。例如,如果你想在你的系统上找到什么提供了“/bin/bash”?#dnfprovides/bin/bash使用DNF获取包的详细信息假设你想知道一个包在安装到系统之前的信息,你可以使用“info”开关来获取包的详细信息(如nano),如下图所示。#dnfinfonano使用DNF安装包#dnfinstallnano使用DNF更新包,您可以仅更新特定包(例如systemd),而无需更改系统上的所有内容。#dnfupdatesystemd使用DNF检查系统更新#dnfcheck-update使用DNF更新所有系统包您可以使用以下命令更新整个系统,包括所有已安装的包。#dnfupdateOR#dnfupgrade使用DNF升级特定包dnfupgradepython3-perf使用DNF删除/擦除包要删除或擦除任何不需要的包(如nano),您可以使用“删除”和dnf命令或“擦除”切换删除它。#dnfremovenanoOR#dnferasenano使用DNF删除孤立包。为满足依赖关系而安装的包如果不被其他应用程序使用则可能毫无用处。要删除这些孤立的包,请执行以下命令。#dnfautoremove使用DNF删除缓存包很多时候我们会遇到陈旧的标头和未处理的事务,这会导致在执行dnf时出错。我们可以通过简单地执行#dnfcleanall获取特定DNF命令的帮助#dnfhelpclean列出所有DNF命令和选项#dnfhelp查看DNF历史可以调用dnfhistory查看列表,我们可以清除所有缓存的包和包含远程包信息的头部执行的dnf命令。这样你就可以通过时间戳知道安装/删除了什么。#dnfhistorylistallgrouppackages命令“dnfgrouplist”将打印所有可用或已安装的包,如果未提及,它将列出所有已知组。#dnfgrouplist列出组包中有哪些包dnfgroupinfo"DevelopmentTools"使用DNF安装组包#dnfgroupinstall'EducationalSoftware'更新组包#dnfgroupupdate'EducationalSoftware'删除组包#dnfgroupremove'教育软件'从特定存储库安装包DNF可以从存储库(epel)安装任何特定包(如phpmyadmin),例如#dnf--enablerepo=epelinstallphpmyadmin将已安装的包同步到稳定版本命令“dnfdistro-sync”将提供必要的选项,将所有已安装的软件包同步到任何已启用存储库中可用的最新稳定版本。如果未选择任何包,则同步所有已安装的包。#dnfdistro-syncreinstallapackage#dnfreinstallnano降级一个包如果可能的话,选项“downgrade”会将一个命名的包(比如acpid)降级到一个较低的版本。#dnfdowngradeacpidconfigureDNFsourceDNF的主要配置文件是/etc/dnf/dnf.conf,它包含两部分:“main”部分保存了DNF的全局设置。“repository”部分保存软件源的设置,可以有一个或多个“repositories”。另外,/etc/yum.repos.d目录下存放着一个或多个repo源码相关的文件,它们也可以定义不同的“repository”配置。/etc/dnf/dnf.conf文件主体部分包含的“main”配置示例如下:[main]gpgcheck=1installonly_limit=3clean_requirements_on_remove=Truebest=True常用选项说明:参数说明cachedir缓存目录,用于存放RPM包和数据库文件。keepcache的可选值为1和0,表示是否缓存那些安装成功的RPM包和头文件。默认值为0,即不缓存。debuglevel设置dnf产生的调试信息。取值范围:[0-10],值越大,输出的调试信息越详细。默认值为2,设置为0表示不输出调试信息。clean_requirements_on_remove删除在dnfremove期间不再使用的依赖项,如果包是通过DNF安装的,而不是通过明确的用户请求安装的,则只能通过clean_requirements_on_remove删除包,即它是作为依赖项引入的。默认值是true。当最好地升级包时,它总是尝试安装最高版本。如果最高版本无法安装,会提示失败原因并停止安装。默认值是true。obsoletes可选值1和0,设置是否允许更新过时的RPM包。默认值为1,表示允许更新。gpgcheck可以是1和0,设置是否进行gpg检查。默认值为1,表示需要验证。plugins的可选值为1和0,表示启用或禁用dnf插件。默认值为1,表示启用dnf插件。installonly_limit设置可以同时安装的包数,如“installonlypkgs”指令所列。默认值为3,不建议降低此值。配置repository部分repository部分允许您定义自定义的openEuler软件源代码仓库。每个仓库的名称不能相同,否则会发生冲突。repository部分的配置有两种方式,一种是直接在/etc/dnf/dnf.conf文件中配置“repository”部分,另一种是在/etc/yum.repos中配置.repo文件.d目录。直接配置/etc/dnf/dnf.conf文件中的“存储库”部分。下面是[repository]部分的最小配置示例:[repository]name=repository_namebaseurl=repository_urlopenEuler提供了在线镜像源,地址:https://repo.openeuler.org/。以aarch64版本的openEuler20.09为例,baseurl可以配置为https://repo.openeuler.org/openEuler-20.09/OS/aarch64/。表2Repository参数说明参数说明name=repository_name软件仓库(repository)描述的字符串。baseurl=repository_url软件仓库(repository)的地址。例如:使用http协议的网络定位:http://path/to/repo;使用ftp协议的网络位置:ftp://path/to/repo;本地位置:file:///path/to/local/Repo配置/etc/yum.repos.d目录下的.repo文件openEuler提供了多种repo源供用户在线使用。各个repo源的含义参考系统安装。添加root权限的openEulerrepo源,如下例所示:#vi/etc/yum.repos.d/openEuler.repo[OS]name=openEuler-$releasever-OSbaseurl=https://repo.openeuler。org/openEuler-20.09/OS/$basearch/enabled=1gpgcheck=1gpgkey=https://repo.openeuler.org/openEuler-20.09/OS/$basearch/RPM-GPG-KEY-openEuler说明:enabled表示是否启用软件源仓库,可以选择值为1和0。默认值为1,表示启用软件源仓库。gpgkey是用于验证签名的公钥显示当前配置显示当前配置信息:dnfconfig-manager--dump显示对应软件源的配置,先查询repoid:dnfrepolist然后执行以下命令显示id对应的软件源配置,其中repository是查询得到的repoid:dnfconfig-manager--dumprepository也可以使用全局正则表达式显示所有匹配部分的配置:dnfconfig-manager--dumpglob_expression创建本地软件源存储库要创建本地软件源存储库,请执行以下步骤1.安装createrepo包。在root权限下执行以下命令dnfinstallcreaterepo2。将需要的软件包复制到一个目录下,例如/mnt/local_repo/。3.要创建软件源,请执行以下命令:createrepo--database/mnt/local_repo添加软件源要定义新的软件源存储库,您可以在/etc/dnf/dnf.conf文件中添加“存储库”部分。conf文件,或者在/etc/yum.repos.d/目录下添加一个“.repo”文件进行说明。建议您添加“.repo”,每个软件源都有自己对应的“.repo”文件,下面介绍该方法的操作方法。要在您的系统中添加这样的源,请在root权限下执行以下命令。执行后会在/etc/yum.repos.d/目录下生成对应的repo文件。其中repository_url为repo源地址dnfconfig-manager--add-reporepository_url开启软件源开启软件源请在root权限下执行以下命令,其中repository为新增.repo文件中的repoid(您可以通过dnfrepolist查询):dnfconfig-manager--set-enablerepository您还可以使用全局正则表达式来启用所有匹配的存储库。其中,glob_expression为对应的正则表达式,用于同时匹配多个repoid:dnfconfig-manager--set-enableglob_expression禁用软件源禁用软件源请在root权限下执行以下命令:dnfconfig-manager--set-disablerepository类似地,您可以使用全局正则表达式来禁用所有匹配的存储库:dnfconfig-manager--set-disableglob_expression结论DNF是最先进的包管理器YUM上层。我相信它倾向于自动化很多处理,这不会被许多有经验的Linux系统管理员所欣赏。例如:--skip-broken不被DNF识别,无可替代。没有什么比“resolvedep”命令更像的了,但是你可以运行dnf提供的命令。没有用于查找包依赖项的“deplist”命令。你排除一个repo,意味着排除适用于所有操作,不像yum只在安装和更新等时排除这些repo。更多内容:https://dnf.readthedocs.io/en/latest/公众号: