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管理软件包
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