新一代的RPM软件包管理器
DNF 是新一代的rpm软件包管理器。他首先出现在 Fedora 18 这个发行版中。而最近,它取代了yum,正式成为 Fedora 22 的包管理器。
DNF包管理器克服了YUM包管理器的一些瓶颈,提升了包括用户体验,内存占用,依赖分析,运行速度等多方面的内容。DNF使用 RPM, libsolv 和 hawkey 库进行包管理操作。尽管它没有预装在 CentOS 和 RHEL 7 中,但你可以在使用 YUM 的同时使用 DNF 。
DNF 的最新稳定发行版版本号是 1.0,发行日期是2015年5月11日。 这一版本的 DNF 包管理器(包括在他之前的所有版本) 都大部分采用 Python 编写,发行许可为GPL v2.
DNF 并未默认安装在 RHEL 或 CentOS 7系统中,但是 Fedora 22 已经默认使用 DNF .
1、为了安装 DNF ,您必须先安装并启用 epel-release 依赖。
yum install -y epel-release
2、使用 epel-release 依赖中的 YUM 命令来安装 DNF 包。在系统中执行以下命令:
yum install -y dnf
然后, DNF 包管理器就被成功的安装到你的系统中了。
dnf [options] COMMAND
用处:该命令用于查看安装在您系统中的 DNF 包管理器的版本
dnf -–version
用处:该命令用于显示系统中可用的 DNF 软件库
dnf repolist
用处:该命令用于显示系统中可用和不可用的所有的 DNF 软件库
dnf repolist all
用处:该命令用于列出用户系统上的所有来自软件库的可用软件包和所有已经安装在系统上的软件包
dnf list
用处:该命令用于列出所有安装了的 RPM 包
dnf list installed
用处:该命令用于列出来自所有可用软件库的可供安装的软件包
dnf list available
用处:当你不知道你想要安装的软件的准确名称时,你可以用该命令来搜索软件包。你需要在”search”参数后面键入软件的部分名称来搜索。(在本例中我们使用”nano”)
dnf search nano
用处:当你想要查看是哪个软件包提供了系统中的某一文件时,你可以使用这条命令。(在本例中,我们将查找”/bin/bash”这个文件的提供者)
dnf provides /bin/bash
用处:当你想在安装某一个软件包之前查看它的详细信息时,这条命令可以帮到你。(在本例中,我们将查看”nano”这一软件包的详细信息)
dnf info nano
用处:使用该命令,系统将会自动安装对应的软件及其所需的所有依赖(在本例中,我们将用该命令安装nano软件)
dnf install nano
用处:该命令用于升级制定软件包(在本例中,我们将用命令升级”systemd”这一软件包)
dnf update systemd
用处:该命令用于检查系统中所有软件包的更新
dnf check-update
用处:该命令用于升级系统中所有有可用升级的软件包
dnf update 或 dnf upgrade
用处:删除系统中指定的软件包(在本例中我们将使用命令删除”nano”这一软件包)
dnf remove nano 或 dnf erase nano
用处:当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。
dnf autoremove
用处:在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。
dnf clean all
用处:该命令用于获取有关某条命令的使用帮助(包括可用于该命令的参数和该命令的用途说明)(本例中我们将使用命令获取有关命令”clean”的使用帮助)
dnf help clean
用处:该命令用于列出所有的 DNF 命令及其用途
dnf help
用处:您可以使用该命令来查看您系统上 DNF 命令的执行历史。通过这个手段您可以知道在自您使用 DNF 开始有什么软件被安装和卸载。
dnf history
用处:该命令用于列出所有的软件包组
dnf grouplist
用处:该命令用于安装一个软件包组(本例中,我们将用命令安装”Educational Software”这个软件包组)
dnf groupinstall ‘Educational Software’
用处:该命令用于升级一个软件包组中的软件包(本例中,我们将用命令升级”Educational Software”这个软件包组中的软件)
dnf groupupdate ‘Educational Software’
用处:该命令用于删除一个软件包组(本例中,我们将用命令删除”Educational Software”这个软件包组)
dnf groupremove ‘Educational Software’
用处:该命令用于从特定的软件包库安装特定的软件(本例中我们将使用命令从软件包库 epel 中安装 phpmyadmin 软件包)
dnf –enablerepo=epel install phpmyadmin
用处:该命令可以通过所有可用的软件源将已经安装的所有软件包更新到最新的稳定发行版
dnf distro-sync
用处:该命令用于重新安装特定软件包(本例中,我们将使用命令重新安装”nano”这个软件包)
dnf reinstall nano
用处:该命令用于降低特定软件包的版本(如果可能的话)(本例中,我们将使用命令降低”acpid”这个软件包的版本)
dnf downgrade acpid
样例输出:
Using metadata from Wed May 20 12:44:59 2015
No match for available package: acpid-2.0.19-5.el7.x86_64
Error: Nothing to do.
原作者注:在执行这条命令的时候, DNF 并没有按照我期望的那样降级指定的软件(“acpid”)。该问题已经上报。
DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:
编号 | DNF(Dandified YUM) | YUM(Yellowdog Updater, Modified) |
---|---|---|
1 | DNF 使用 libsolv 来解析依赖关系,由 SUSE 开发和维护 | YUM 使用公开的 API 来解析依赖关系 |
2 | API 有完整的文档 | API 没有完整的文档 |
3 | 由 C、C++、Python 编写的 | 只用 Python 编写 |
4 | DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用 | YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用 |
5 | DNF 支持各种扩展 | Yum 只支持基于 Python 的扩展 |
6 | API 有良好的文档,因此很容易创建新的功能 | 因为 API 没有正确的文档化,所以创建新功能非常困难 |
7 | DNF 在同步存储库的元数据时,使用的内存较少 | 在同步存储库的元数据时,YUM 使用了过多的内存 |
8 | DNF 使用满足性算法来解决依赖关系解析(它是用字典的方法来存储和检索包和依赖信息) | 由于使用公开 API 的原因,Yum 依赖性解析变得迟钝 |
9 | 从内存使用量和版本库元数据的依赖性解析来看,性能都不错 | 总的来说,在很多因素的影响下,表现不佳 |
10 | DNF 更新:在 DNF 更新过程中,如果包中包含不相关的依赖,则不会更新 | YUM 将在没有验证的情况下更新软件包 |
11 | 如果启用的存储库没有响应,DNF 将跳过它,并继续使用可用的存储库处理事务 | 如果有存储库不可用,YUM 会立即停止 |
12 | dnf update 和 dnf upgrade 是等价的 | 在 Yum 中则不同 |
13 | 安装包的依赖关系不更新 | Yum 为这种行为提供了一个选项 |
14 | 清理删除的包:当删除一个包时,DNF 会自动删除任何没有被用户明确安装的依赖包 | Yum 不会这样做 |
15 | 存储库缓存更新计划:默认情况下,系统启动后 10 分钟后,DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 dnf-makecache.timer 控制 | Yum 也会这样做 |
16 | 内核包不受 DNF 保护。不像 Yum,你可以删除所有的内核包,包括运行中的内核包 | Yum 不允许你删除运行中的内核 |
17 | libsolv:用于解包和读取资源库。hawkey: 为 libsolv 提供简化的 C 和 Python API 库。librepo: 提供 C 和 Python(类似 libcURL)API 的库,用于下载 Linux 存储库元数据和软件包。libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库,有 Python 2 和 Python 3 的绑定。 | Yum 不使用单独的库来执行这些功能 |
18 | DNF 包含 29000 行代码 | Yum 包含 56000 行代码 |
19 | DNF 由 Ales Kozumplik 开发 | YUM 由 Zdenek Pavlas、Jan Silhan 和团队成员开发 |