DNF 和 YUM 均是 rpm 软件包管理工具,但是 DFN 替代 YUM 的说法由来已久,因为 YUM 包管理工具有一些问题长期得不到解决。

这些问题包括性能低下、内存占用高以及依赖包解决方案不佳等。

而 DNF 在依赖包解决方案中采用了由 SUSE 开发的”libsolv”库,用以提升依赖包解析性能。

YUM 是一个管理 RPM 软件依赖包和软件库的前端工具,可以下载 RPM 软件包并安装,最后删除下载的软件包。

至于为什么要开发一个新的工具来替代 YUM,而不是解决 YUM 现有的问题,其原因在于想要解决 YUM 现有的问题技术上存在很多问题,并且 YUM 团队也不能很快适应更新带来的改变。

另外,更重要的原因是 YUM 的源代码有大概56000行,修改起来工作量巨大。

序号 DNF (Dandified YUM) YUM (Yellowdog Updater, Modified)
1 DNF依赖解决方案采用用由 SUSE 开发的高性能 libsolv 库 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 接口文档完备,开发新功能容易 接口文档不完备,开发新功能困难
7 同步软件库元数据时内存消耗低 同步软件库元数据消耗大量内存
8 如果软件包更新过程中存在不相关的依赖包,则软件包不更新 软件包更新时不进行依赖包相关性检查
9 如果允许的软件库没响应,则 DNF 会忽略并继续使用可用软件库 如果允许软件库没响应,则 YUM 程序会立即中止
10 DNF 中 update 和 upgrade 相同 YUM 中 update 和 upgrade 不同
11 程序包的依赖包是不会更新的 YUM 提供选项来设置这种行为
13 DNF 允许删除所有内核文件,包括正在使用的内核 YUM 禁止删除正在使用的内核
14 如果软件包更新过程中存在不相关的依赖包,则软件包不更新 软件包更新时不进行依赖包相关性检查

centos8平台使用dnf/yum管理软件包

 

一,dnf的用途

centos7开始,DNF 成为了默认的软件包管理器,同时 yum 仍然是可用的

DNF包管理器克服了YUM包管理器的一些瓶颈,提升了用户体验,内存占用,依赖分析,运行速度等方面

DNF使维护软件包组变得容易,并且能够自动解决依赖性问题

说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

对应的源码可以访问这里获取: https://github.com/liuhongdi/

说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,dnf所属的包

1,dnf所属的包

[root@blog zshfile]# whereis dnf
dnf: /usr/bin/dnf /etc/dnf /usr/share/man/man8/dnf.8.gz [root@blog zshfile]# rpm -qf /usr/bin/dnf
dnf-4.2.7-7.el8_1.noarch

2,yum所属的包:

[root@blog zshfile]# whereis yum
yum: /usr/bin/yum /etc/yum /etc/yum.conf /usr/share/man/man8/yum.8.gz [root@blog zshfile]# ll /usr/bin/yum
lrwxrwxrwx 1 root root 5 Dec 19 23:43 /usr/bin/yum -> dnf-3

可见yum是一个符号链接,链接到了dnf-3

[root@blog zshfile]# whereis dnf-3
dnf-3: /usr/bin/dnf-3 [root@blog zshfile]# rpm -qf /usr/bin/dnf-3
python3-dnf-4.2.7-7.el8_1.noarch

三,查看dnf的版本和帮助

1,查看版本

[root@blog zshfile]# dnf --version
4.2.7
Installed: dnf-0:4.2.7-7.el8_1.noarch at Thu 05 Mar 2020 02:18:51 AM GMT
Built : CentOS Buildsys <bugs@centos.org> at Thu 19 Dec 2019 03:44:23 PM GMT Installed: rpm-0:4.14.2-11.el8_0.x86_64 at Wed 25 Dec 2019 03:36:22 AM GMT
Built : CentOS Buildsys <bugs@centos.org> at Tue 01 Oct 2019 01:45:29 PM GMT

2,查看帮助

[root@blog zshfile]# dnf --help

3,查看手册

[root@blog zshfile]# man dnf

四,dnf操作例子:对repo的查询

1,列出系统上的存储库,状态是enabled

[root@blog ~]# dnf repolist

说明:这个命令等价于 dnf repolist enabled

2,列出所有的存储库:(包括enabled/disabled)

[root@blog ~]# dnf repolist all

3,列出未安装到系统的repo(状态是disabled)

[root@blog ~]# dnf repolist disabled

4,查看某个repo的详细信息

[root@blog ~]# dnf repolist  -v BaseOS

说明:也可以用repoinfo

[root@blog ~]# dnf repoinfo BaseOS 

五,dnf操作例子:对软件包的查询、搜索

1,列出所有软件包:

(包括可安装的和已安装的)

[root@blog ~]# dnf list 

说明:显示分成两部分:

Installed Packages     已安装的包

Available Packages     可安装的包

注意 repo前加了@符的,表示是已安装的

2,列出已安装的软件包

[root@blog ~]# dnf list installed  

3,列出所有可安装的软件包:

[root@blog ~]# dnf list available 

4,查看包的详细信息

# info:查看rpm包的详细信息

[root@blog ~]# dnf info zsh
Last metadata expiration check: 0:14:50 ago on Sun 12 Apr 2020 07:27:24 PM CST.
Installed Packages
Name : zsh
Version : 5.5.1
Release : 6.el8
Architecture : x86_64
Size : 6.9 M
Source : zsh-5.5.1-6.el8.src.rpm
Repository : @System
Summary : Powerful interactive shell
URL : http://zsh.sourceforge.net/
License : MIT
Description : The zsh shell is a command interpreter usable as an interactive login
: shell and as a shell script command processor. Zsh resembles the ksh
: shell (the Korn shell), but includes many enhancements. Zsh supports
: command line editing, built-in spelling correction, programmable
: command completion, shell functions (with autoloading), a history
: mechanism, and more. Available Packages
Name : zsh
Version : 5.5.1
Release : 6.el8_1.2
Architecture : x86_64
Size : 2.9 M
Source : zsh-5.5.1-6.el8_1.2.src.rpm
Repository : BaseOS
Summary : Powerful interactive shell
URL : http://zsh.sourceforge.net/
License : MIT
Description : The zsh shell is a command interpreter usable as an interactive login
: shell and as a shell script command processor. Zsh resembles the ksh
: shell (the Korn shell), but includes many enhancements. Zsh supports
: command line editing, built-in spelling correction, programmable
: command completion, shell functions (with autoloading), a history
: mechanism, and more.

分别列出了已安装和可获得的两个rpm包的信息

5,搜索rpm包

[root@blog ~]# dnf search zsh
Last metadata expiration check: 0:14:10 ago on Sun 12 Apr 2020 07:27:24 PM CST.
====================================== Name Exactly Matched: zsh =========================================
zsh.x86_64 : Powerful interactive shell
========================================= Name & Summary Matched: zsh =====================================
zsh-html.noarch : Zsh shell manual in html format
zsh-syntax-highlighting.noarch : Fish shell like syntax highlighting for Zsh
=================================================== Name Matched: zsh ======================================
cekit-zsh-completion.noarch : Container image creation tool

6,查询指定的文件属于哪个软件包?

#provides:查看是哪个软件包提供了系统中的某一文件

[root@blog ~]# dnf provides /usr/bin/zsh
Last metadata expiration check: 0:48:19 ago on Sun 12 Apr 2020 07:27:24 PM CST.
zsh-5.5.1-6.el8.x86_64 : Powerful interactive shell
Repo : @System
Matched from:
Filename : /usr/bin/zsh

7,列出指定仓库拥有的软件包

[root@centos8 yum.repos.d]# dnf list --repo epel

六,dnf操作例子:对包的安装

1,安装

[root@blog ~]# dnf install zsh

2,从指定的repo安装一个rpm包

[root@blog ~]# dnf --enablerepo=BaseOS install zsh 

3,仅下载,不安装

[root@blog ~]# dnf download nginx

下载完成后,可以在当前目录找到下载的rpm包

七,  dnf操作例子:对包的删除

1,删除指定的软件包

#remove:   删除指定的rpm包

[root@blog ~]# yum remove zsh

2,删除缓存的无用软件包

[root@blog ~]# dnf clean all
41 files removed

八,dnf操作例子:对包的更新

1,更新指定的软件包:

[root@blog ~]# dnf update zsh

2,更新所有的软件包:

[root@blog ~]# dnf update 

也可以用upgrade

[root@blog ~]# dnf upgrade

3,检查可以更新的软件包

[root@blog ~]# dnf check-update

九,dnf操作例子:其他操作:

1,查看 DNF 命令的执行历史

[root@blog ~]# dnf history 

2,查看某个指定命令的帮助

#help: 查看指定命令的帮助

[root@blog yum.repos.d]$ dnf help list 

3,把软件包的元数据列表缓存到本地:

[root@centos8 yum.repos.d]# dnf makecache

十,如何编辑dnf的repo?

1,例子:修改dnf的repo使用国内源

Appstream库:

[root@centos8 yum.repos.d]# vi CentOS-AppStream.repo

修改baseurl一行为:

baseurl=https://mirrors.aliyun.com/centos/$releasever/AppStream/$basearch/os/

Base库:

[root@centos8 yum.repos.d]# vi CentOS-Base.repo 

修改baseurl一行为:

baseurl=https://mirrors.aliyun.com/centos/$releasever/BaseOS/$basearch/os/

Extras库:

[root@centos8 yum.repos.d]# vi CentOS-Extras.repo

修改baseurl一行为:

baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os/

以上修改完成后:

[root@centos8 yum.repos.d]# dnf clean all
51 文件已删除

更新缓存

[root@centos8 yum.repos.d]# dnf makecache
CentOS-8 - AppStream 3.8 MB/s | 6.6 MB 00:01
CentOS-8 - Base 2.8 MB/s | 5.0 MB 00:01
CentOS-8 - Extras 15 kB/s | 4.9 kB 00:00
Official OpenResty Open Source Repository for RHEL 158 kB/s | 38 kB 00:00

元数据缓存已建立。

查看BaseOS这个repo的信息

[root@centos8 yum.repos.d]# dnf repoinfo BaseOS
上次元数据过期检查:0:01:54 前,执行于 2020年04月13日 星期一 13时53分29秒。 仓库ID : BaseOS
仓库名 : CentOS-8 - Base
仓库状态 : 启用
仓库版本: 1585863557
仓库更新: 2020年04月03日 星期五 05时39分17秒
仓库包 : 2,126
仓库大小 : 1.9 G
仓库基本地址: https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
仓库到期: 172,800 秒 (最近 2020年04月13日 星期一 13时53分27秒)
仓库文件名: /etc/yum.repos.d/CentOS-Base.repo

执行一次安装,测试效果

[root@centos8 yum.repos.d]# yum install tmux

2,修改epel源也使用阿里云

安装epel源:

[root@centos8 yum.repos.d]# yum install epel-release

把源配置为阿里云

[root@centos8 yum.repos.d]# vi epel.repo 

把epel段的baseurl一项修改为:

baseurl=http://mirrors.aliyun.com/epel/8/Everything/$basearch

并注释掉:metalink一项

[root@centos8 yum.repos.d]# dnf clean all
22 文件已删除
[root@centos8 yum.repos.d]# dnf makecache
CentOS-8 - AppStream 2.4 MB/s | 6.6 MB 00:02
CentOS-8 - Base 2.7 MB/s | 5.0 MB 00:01
CentOS-8 - Extras 18 kB/s | 4.9 kB 00:00
Extra Packages for Enterprise Linux 8 - x86_64 5.1 MB/s | 6.2 MB 00:01
Official OpenResty Open Source Repository for RHEL 162 kB/s | 38 kB 00:00
元数据缓存已建立。
[root@centos8 yum.repos.d]# dnf repolist
上次元数据过期检查:0:00:09 前,执行于 2020年04月13日 星期一 14时07分30秒。
仓库标识 仓库名称 状态
AppStream CentOS-8 - AppStream 5,124
BaseOS CentOS-8 - Base 2,126
epel Extra Packages for Enterprise Linux 8 - x86_64 5,240
extras CentOS-8 - Extras 12
openresty Official OpenResty Open Source Repository for RHEL 83
[root@centos8 yum.repos.d]# dnf repoinfo epel
上次元数据过期检查:0:00:20 前,执行于 2020年04月13日 星期一 14时07分30秒。 仓库ID : epel
仓库名 : Extra Packages for Enterprise Linux 8 - x86_64
仓库状态 : 启用
仓库版本: 1586537550
仓库更新: 2020年04月11日 星期六 00时53分18秒
仓库包 : 5,240
仓库大小 : 6.5 G
仓库基本地址: http://mirrors.aliyun.com/epel/8/Everything/x86_64
仓库到期: 172,800 秒 (最近 2020年04月13日 星期一 14时07分26秒)
仓库文件名: /etc/yum.repos.d/epel.repo

测试epel源是否可用?

[root@centos8 yum.repos.d]# dnf install nethogs

十一,查看centos的版本

[root@centos8 yum.repos.d]# cat /etc/redhat-release
CentOS Linux release 8.1.1911 (Core)

在CentOS 8上使用DNF管理软件包

0.4662020.01.03 21:03:29字数 379阅读 8,252

DNF代表Dandified YUM是基于RPM的Linux发行版的软件包管理器。它用于在Fedora / RHEL / CentOS操作系统中安装,更新和删除软件包。 它是Fedora 22,CentOS8和RHEL8的默认软件包管理器。 DNF是YUM的下一代版本,并打算在基于RPM的系统中替代YUM。 DNF功能强大且具有健壮的特征。DNF使维护软件包组变得容易,并且能够自动解决依赖性问题。

已安装包的列表

dnf list installed

或者

dnf list available

查找与安装软件包

dnf search httpd

安装httpd包命令:

dnf install httpd

重装httpd:

dnf reinstall httpd

某些情况下,你需要下载软件包而不是安装它。你用下列命令下载指定包:

dnf download httpd

你能用命令查看http包的详细信息:

dnf info httpd

更新系统包

首先,用以下命令你能检测你系统上的所有系统包的更新

dnf check-update

更新系统中的所有安装包

dnf update

更新特定的软件包:

dnf update httpd

列出安装组包(Group packages)

dnf grouplist

现在,安装特定的组包:

dnf groupinstall 'System Tools'

你也能用下列命令更新组包:

dnf groupupdate 'System Tools'

列表库(List Repositories)

列出所有库文件:

dnf repolist all

现在,用下面的命令仅列出系统上的存储库

dnf repolist

卸载包(Remove packages)

卸载不要的http包:

dnf remove httpd

去除安装httpd不要的依赖包

dnf autoremove

使用以下命令清除所有缓存的软件包:

dnf clean all

列出系统上的存储库,状态是enabled [root@blog ~]# dnf repolist的更多相关文章

  1. MySQL Yum存储库 安装、升级、集群

    添加MySQL Yum存储库 首先,将MySQL Yum存储库添加到系统的存储库列表中.按着这些次序: 在http://dev.mysql.com/downloads/repo/yum/上转到MySQ ...

  2. 使用MySQL Yum存储库的快速指南【mysql官方文档】

    使用MySQL Yum存储库的快速指南 抽象 MySQL Yum存储库提供用于在Linux平台上安装MySQL服务器,客户端和其他组件的RPM包.这些软件包还可以升级和替换从Linux发行版本机软件存 ...

  3. 每秒高达1.6亿次操作的并发键值存储库 FASTER 诞生

    FASTER 在过去十年中,云中的数据密集型应用程序和服务有了巨大的增长.数据在各种边设施(例如,设备,浏览器和服务器)上创建,并由云应用程序处理用来获得数据价值或做出决策.应用程序和服务可以处理收集 ...

  4. Maven - Repository(存储库)

    版权所有,未经授权,禁止转载 章节 Maven – 简介 Maven – 工作原理 Maven – Repository(存储库) Maven – pom.xml 文件 Maven – 依赖管理 Ma ...

  5. Linux配置自建 YUM 软件存储库

    yum软件仓库的搭建方式有三种,分别是本地yum源,网络yum源,第三方软件仓库. 以下示例演示了搭建本地yum仓库的方法: 1. 删除 /etc/yum.repos.d/dvd.repo 这个仓库文 ...

  6. git-secret:在 Git 存储库中加密和存储密钥(上)

    当涉及处理机密信息(如密码.令牌.密钥文件等)等,以下问题值得考虑: 安全性十分重要,但高安全性往往伴随着高度的不便. 在团队中,共享某些密钥有时无法避免(因此现在我们需要考虑在多人之间分发和更新密钥 ...

  7. Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题、位置、尺寸、最小化、可见性等各种状态

    原文:Windows 系统上用 .NET/C# 查找所有窗口,并获得窗口的标题.位置.尺寸.最小化.可见性等各种状态 在 Windows 应用开发中,如果需要操作其他的窗口,那么可以使用 EnumWi ...

  8. 介绍两种在RHEL 和 CentOS 系统上检查或列出已安装的安全更新的方法

    在本文中,我们将向你展示如何检查已安装的安全更新.我会介绍两种方法,你可以选择最适合你的. 此外,我还添加了一个小的 shell 脚本,它为你提供已安装的安全包计数. 运行以下命令获取系统上已安装的安 ...

  9. Centos系统各种日志存详解

    Centos系统各种日志存储路径和详细介绍 Linux常见的日志文件详述如下 1./var/log/boot.log(自检过程) 2./var/log/cron (crontab守护进程crond所派 ...

随机推荐

  1. 一文读懂MySql主从复制机制

    作为一个关系型数据库,MySQL内建地提供数据复制机制,这使得在使用时,可以基于其复制机制实现高可用架构等高级特性,从而使得MySQL无需借助额外的插件或其他工具就具备适用于生产环境.这是MySQL得 ...

  2. Python异步asyncio快速实践模版

    只是参考快速跑起来模版,细节或者封装流畅使用需要详细阅读aiohttp文档 1 import asyncio 2 3 async def foo(): 4 await print('bar') 5 6 ...

  3. SCIP:构造数据抽象--数据结构中队列与树的解释

    现在到了数学抽象中最关键的一步:让我们忘记这些符号所表示的对象.不应该在这里停滞不前,有许多操作可以应用于这些符号,而根本不必考虑它们到底代表着什么东西. --Hermann Weyi <思维的 ...

  4. 源码篇:Handler那些事

    前言 Handler属于八股文中非常经典的一个考题了,导致这个知识点很多时候,考官都懒得问了:这玩意很久之前就看过,但是过了一段时间,就很容易忘记,但是处理内存泄漏,aidlHandler之类的考点答 ...

  5. 【3.0 递归 Recursion 02】

    [递归:阶乘] 1.寻找基本情况 对于阶乘而言,最基本的情况就是0!和1!,二者的结果都是1 我们不妨现在方法中写下这个情况,帮助我们跳出递归 if(i<=1){ return 1 ; } 接下 ...

  6. (九)Struts2模型驱动和属性驱动

    出于结构清晰的考虑,应该采用单独的Model实例来封装请求参数和处理结果,这就是所谓的模型驱动, 所谓模型驱动,就是使用单独的JavaBean来贯穿整个MVC流程. 所谓属性驱动,就是使用属性来作为贯 ...

  7. 通过Dapr实现一个简单的基于.net的微服务电商系统

    本来想在Dpar 1.0GA时发布这篇文章,由于其他事情耽搁了放到现在.时下微服务和云原生技术如何如荼,微软也不甘示弱的和阿里一起适时推出了Dapr(https://dapr.io/),园子里关于da ...

  8. H5 离线存储-使用 serverWorker 实现

    H5 离线存储-使用 serverWorker 实现 离线存储所用技术 serverWorker serviceWorker 生命周期 install 事件会在 serviceWorker 注册成功时 ...

  9. PAT A1032 Sharing

    题意:给出两条链表的首地址以及若干节点的地址,数据,下一个节点的地址,求两条链表的首个共用节点的地址.如果两条链表没有共用节点,则输出-1.思路步骤1:由于地址的范围很小,因此可以直接用静态链表,但是 ...

  10. linux下更新gcc

    1 下载源码 链接 目前最新为9.2版本. 2 解压 tar -zxvf gcc-9.2.0.tar.gz cd gcc-9.2.0 3 download_prerequisites脚本 运行这个脚本 ...