文章目录
dnf命令
dnf说明
-
DNF新一代的RPM软件包管理器。他首先出现在 Fedora 18 这个发行版中【centos8及以上自带这个命令了】。而最近,他取代了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 包管理器
- dnf在centos8的系统上自带了,但centos7上并没有这个命令,所以在centos7上安装dnf方式如下
- 安装 DNF ,必须先安装并启用 epel-release 依赖
yum install epel-release -y
yum install dnf -y
dnf [选项] 命令 【dnf使用说明】
-
dnf --version
显示 DNF 版本 -
dnf -h, --help
命令帮助 -
dnf help 命令
帮助的用法 -
dnf history
查看 DNF 命令的执行历史
用处:您可以使用该命令来查看您系统上 DNF 命令的执行历史。通过这个手段您可以知道在自您使用 DNF 开始有什么软件被安装和卸载。 -
dnf clean all
删除已缓存的数据 -
dnf distro-sync
通过所有可用的软件源将已经安装的所有软件包更新到最新的稳定发行版 -
dnf install package_name
安装 -
dnf reinstall package_name
重新安装 -
dnf remove package_name
移除安装包 -
dnf autoremove
删除无用孤立的软件包z(包括不需要的依赖关系)
用处:当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。 -
dnf update package_name
升级软件包 -
dnf upgrade
升级系统中所有有可用升级的软件包 -
dnf check-update
检查、所有软件包的更新 -
dnf downgrade
回滚某个特定软件的版本(降级)
用处:该命令用于降低特定软件包的版本(如果可能的话)(本例中,我们将使用命令降低”acpid”这个软件包的版本) -
dnf search package_name
搜索软件库中的 RPM 包
用处:当你不知道你想要安装的软件的准确名称时,你可以用该命令来搜索软件包。你需要在”search”参数后面键入软件的部分名称来搜索。 如:dnf search iostat -
dnf provides /bin/bash
查找某一文件的提供者
用处:当你想要查看是哪个软件包提供了系统中的某一文件时,你可以使用这条命令。(在本例中,我们将查找”/bin/bash”这个文件的提供者) -
dnf repoquery
搜索 -
dnf download
下载至当前目录 -
dnf info
显示软件包的详细信息 -
dnf list
列出软件包(组) -
dnf list installed
列出所有已安装的软件包 -
dnf list available
列出所有可用的软件包 -
dnf repolist
显示可用的 DNF 软件库 -
dnf repolist all
显示可用和不可用的所有 DNF 软件库 -
dnf group
显示软件包组的信息 -
dnf grouplist
列出组 -
dnf groupinstall package_name
组安装 -
dnf groupupdate package_name
组升级 -
dnf groupremove package_name
组移除 -
dnf –enablerepo=epel install phpmyadmin -y
指定仓库安装一个软件包
用处:该命令用于从特定的软件包库安装特定的软件(本例中我们将使用命令从软件包库 epel 中安装 phpmyadmin 软件包) -
DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下:
- 在 DNF 中没有
–skip-broken
命令,并且没有替代命令供选择。 - 在 DNF 中没有判断哪个包提供了指定依赖的
resolvedep
命令。 - 在 DNF 中没有用来列出某个软件依赖包的
deplist
命令。 - 当你在 DNF 中排除了某个软件库,那么该操作将会影响到你之后所有的操作,不像在 YUM 下那样,你的排除操作只会咋升级和安装软件时才起作用。
- 在 DNF 中没有
dnf安装本地rpm包
- 首先要准备好某命令的包及依赖,然后进入到rpm包的路径,执行下面命令安装即可。【更多可以看下面使用dnf安装本地rpm包方法标题】
其实就是替代rpm -ivh
的语法【dnf兼容性更高】。
dnf install ./*.rpm
全部参数
-c [config file], --config [config file]
配置文件位置-q, --quiet
静默执行-v, --verbose
详尽执行--version
显示 DNF 版本并推出--installroot [path]
设置目标根目录--nodocs
不要安装文档--noplugins
禁用所有插件--enableplugin [plugin]
启用指定名称的插件--disableplugin [plugin]
禁用指定名称的插件--releasever
RELEASEVER 覆盖在配置文件和仓库文件中 $releasever 的值--setopt
SETOPTS 设置任意配置和仓库选项--skip-broken
通过跳过软件包来解决依赖问题-h, --help, --help-cmd
显示命令帮助--allowerasing
允许解决依赖关系时删除已安装软件包-b, --best
在事务中尝试最佳软件包版本。--nobest
不用把事务限制在最佳选择-C, --cacheonly
完全从系统缓存运行,不升级缓存-R [minutes], --randomwait [minutes]
最大命令等待时间-d [debug level], --debuglevel [debug level]
调试输出级别--debugsolver
转储详细解决结果至文件--showduplicates
在 list/search 命令下,显示仓库里重复的条目-e ERRORLEVEL, --errorlevel
ERRORLEVEL 错误输出级别--obsoletes
对升级启用 dnf 的过期处理逻辑,或对 info、list 和 repoquery 显示软件包过期的功能--rpmverbosity [debug level name]
rpm调试输出等级-y, --assumeyes
全部问题自动应答为是--assumeno
全部问题自动应答为否--enablerepo [repo]
启用其他存储库。列出选项。支持 glob,可以多次指定。--disablerepo [repo]
禁用存储库。列出选项。支持 glob,可以多次指定。--repo [repo], --repoid [repo]
启用指定 id 或 glob 的仓库,可以指定多次--enable
使用 config-manager 命令启用 repos (自动保存)--disable
使用 config-manager 命令禁用 repos (自动保存)-x [package], --exclude [package], --excludepkgs [package]
用全名或通配符排除软件包--disableexcludes [repo], --disableexcludepkgs [repo]
禁用 excludepkgs--repofrompath [repo,path]
要使用的附加存储库的标签和路径(与 baseurl 中相同的路径),可以多次指定。--noautoremove
禁用删除不再被使用的依赖软件包--nogpgcheck
禁用 gpg 签名检查 (如果 RPM 策略允许)--color
COLOR 配置是否使用颜色--refresh
在运行命令之前将元数据标记为过期。-4
仅解析 IPv4 地址-6
仅解析 IPv6 地址--destdir DESTDIR, --downloaddir DESTDIR
设置软件包要复制到的目录--downloadonly
仅下载软件包--comment COMMENT
为事务添加一个注释--bugfix
在更新中包括与 bug 修复有关的软件包--enhancement
在更新中包括与功能增强有关的软件包。--newpackage
在更新中包括与新软件包有关的软件包--security
在更新中包括与安全有关的软件包--advisory ADVISORY, --advisories ADVISORY
在更新中包括修复指定公告所必须的软件包--bz BUGZILLA, --bzs BUGZILLA
在更新中包括修复给定 BZ 所必须的软件包--cve CVES, --cves
CVES 在更新中包括修复给定 CVE 所必须的软件包--sec-severity {Critical,Important,Moderate,Low}, --secseverity {Critical,Important,Moderate,Low}
在更新中包括匹配给定安全等级的安全相关的软件包--forcearch ARCH
强制使用一个架构
bclinux8或centos8以上系统使用dnf命令安装rpm包方法及场景和原因
原因和场景说明
- 没有yum源,下载的rpm离线包放到目录中,我这以安装
gcc-c++
为例,提前准备好gcc-c++的离线源,用同系统有外网的机子导出即可,不会的翻我之前博客看。
[root@xz-nms-ywbp-middle-1 ~]# cd gcc-c++/
[root@xz-nms-ywbp-middle-1 gcc-c++]# ls
annobin-8.90-1.0.1.an8.x86_64.rpm glibc-devel-2.28-101.el8.x86_64.rpm libasan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm libubsan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm
cpp-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm glibc-headers-2.28-101.el8.x86_64.rpm libatomic-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm libxcrypt-devel-4.1.1-4.el8.x86_64.rpm
gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm isl-0.16.1-6.el8.x86_64.rpm libmpc-1.0.2-9.el8.x86_64.rpm
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm kernel-headers-4.19.0-240.23.11.el8_2.bclinux.x86_64.rpm libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64.rpm
[root@xz-nms-ywbp-middle-1 gcc-c++]#
- 问题来了,你可能会觉得,都有rpm包了,为啥不用rpm安装,而要用dnf安装呢?
下面我们用rpm包安装试试,可以看到,安装不成功。
[root@xz-nms-ywbp-middle-1 gcc-c++]# rpm -ivhU *
警告:annobin-8.90-1.0.1.an8.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 06bfb671: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
软件包 libmpc-1.0.2-9.el8.x86_64 已经安装
软件包 cpp-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已经安装
软件包 libubsan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已经安装
软件包 libatomic-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已经安装
软件包 libasan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已经安装
软件包 kernel-headers-4.19.0-240.23.11.el8_2.bclinux.x86_64 已经安装
软件包 glibc-headers-2.28-101.el8.x86_64 已经安装
软件包 libxcrypt-devel-4.1.1-4.el8.x86_64 已经安装
软件包 glibc-devel-2.28-101.el8.x86_64 已经安装
软件包 isl-0.16.1-6.el8.x86_64 已经安装
软件包 gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已经安装
软件包 annobin-8.90-1.0.1.an8.x86_64 已经安装
[root@xz-nms-ywbp-middle-1 gcc-c++]#
[root@xz-nms-ywbp-middle-1 gcc-c++]# rpm -qa | grep gcc
libgcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
[root@xz-nms-ywbp-middle-1 gcc-c++]#
- 那么我们现在用dnf命令安装呢【如果使用dnf提示正在等待什么进程结束,看下面报错解决方法】,一次成功,很完美
[root@xz-nms-ywbp-middle-1 gcc-c++]# dnf install ./*.rpm
上次元数据过期检查:2:16:31 前,执行于 2023年02月27日 星期一 07时38分30秒。
软件包 annobin-8.90-1.0.1.an8.x86_64 已安装。
软件包 cpp-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 glibc-devel-2.28-101.el8.x86_64 已安装。
软件包 glibc-headers-2.28-101.el8.x86_64 已安装。
软件包 isl-0.16.1-6.el8.x86_64 已安装。
软件包 kernel-headers-4.19.0-240.23.11.el8_2.bclinux.x86_64 已安装。
软件包 libasan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libatomic-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libmpc-1.0.2-9.el8.x86_64 已安装。
软件包 libubsan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libxcrypt-devel-4.1.1-4.el8.x86_64 已安装。
依赖关系解决。
============================================================================================================================================================================================================================================
软件包 架构 版本 仓库 大小
============================================================================================================================================================================================================================================
安装:
gcc-c++ x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 12 M
libstdc++-devel x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 2.0 M
事务概要
============================================================================================================================================================================================================================================
安装 2 软件包
总计:14 M
安装大小:42 M
确定吗?[y/N]: y
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
安装 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
运行脚本: gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
验证 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
验证 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
已安装:
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
完毕!
[root@xz-nms-ywbp-middle-1 gcc-c++]# rpm -qa | grep gcc
libgcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
[root@xz-nms-ywbp-middle-1 gcc-c++]#
使用dnf安装本地rpm包方法
- 首先切到rpm包所在目录,然后执行命令:
dnf install ./*.rpm
,这种场景会让我们输入y
确认,也可以直接执行dnf install -y ./*.rpm
,不用输入y
确认。
[root@xz-nms-ywbp-middle-1 gcc-c++]# pwd
/root/gcc-c++
[root@xz-nms-ywbp-middle-1 gcc-c++]#
[root@xz-nms-ywbp-middle-1 gcc-c++]# dnf install ./*.rpm
上次元数据过期检查:2:16:31 前,执行于 2023年02月27日 星期一 07时38分30秒。
软件包 annobin-8.90-1.0.1.an8.x86_64 已安装。
软件包 cpp-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 glibc-devel-2.28-101.el8.x86_64 已安装。
软件包 glibc-headers-2.28-101.el8.x86_64 已安装。
软件包 isl-0.16.1-6.el8.x86_64 已安装。
软件包 kernel-headers-4.19.0-240.23.11.el8_2.bclinux.x86_64 已安装。
软件包 libasan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libatomic-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libmpc-1.0.2-9.el8.x86_64 已安装。
软件包 libubsan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libxcrypt-devel-4.1.1-4.el8.x86_64 已安装。
依赖关系解决。
============================================================================================================================================================================================================================================
软件包 架构 版本 仓库 大小
============================================================================================================================================================================================================================================
安装:
gcc-c++ x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 12 M
libstdc++-devel x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 2.0 M
事务概要
============================================================================================================================================================================================================================================
安装 2 软件包
总计:14 M
安装大小:42 M
确定吗?[y/N]: y
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
安装 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
运行脚本: gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
验证 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
验证 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
已安装:
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
完毕!
[root@xz-nms-ywbp-middle-1 gcc-c++]# rpm -qa | grep gcc
libgcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
[root@xz-nms-ywbp-middle-1 gcc-c++]#
使用dnf命令提示正在等待 pid 为422620的进程退出。的解决方法
说明
- 如下,执行dnf命令就提示等待什么进程结束,我将这个进程kill后再执行依然会生成新的进程,进程名称都为
/usr/bin/yum check-update --quiet
,说明靠kill是解决不了的。
[root@xz-nms-ywbp-middle-2 gcc-c++]# dnf install ./*.rpm
正在等待 pid 为422707的进程退出。
^CKeyboardInterrupt: 已终止。
[root@xz-nms-ywbp-middle-2 gcc-c++]# ps -ef | grep 422707
root 422707 422706 0 10:02 ? 00:00:00 /usr/libexec/platform-python /usr/bin/yum check-update --quiet
root 422790 422720 0 10:04 pts/3 00:00:00 grep --color=auto 422707
[root@xz-nms-ywbp-middle-2 gcc-c++]#
[root@xz-nms-ywbp-middle-2 gcc-c++]# kill -9 422707
[root@xz-nms-ywbp-middle-2 gcc-c++]# dnf install ./*.rpm
正在等待 pid 为422793的进程退出。
^CKeyboardInterrupt: 已终止。
[root@xz-nms-ywbp-middle-2 gcc-c++]#
解决方法
- 后面我发现,这其实是已有的yum配置不可用导致我dnf验证没通过,所以解决方法其实很简单,将已有的yum配置改掉就行了
[root@xz-nms-ywbp-middle-2 gcc-c++]# cd /etc/yum.repos.d/
[root@xz-nms-ywbp-middle-2 yum.repos.d]# ls
bc.repo bc.repo.bak
[root@xz-nms-ywbp-middle-2 yum.repos.d]# mv bc.repo bc.repo_0227bak
[root@xz-nms-ywbp-middle-2 yum.repos.d]#
[root@xz-nms-ywbp-middle-2 yum.repos.d]# ls
bc.repo_0227bak bc.repo.bak
[root@xz-nms-ywbp-middle-2 yum.repos.d]#
[root@xz-nms-ywbp-middle-2 gcc-c++]# yum clean all
18 文件已删除
[root@xz-nms-ywbp-middle-2 gcc-c++]#
[root@xz-nms-ywbp-middle-2 yum.repos.d]# cd -
/root/gcc-c++
[root@xz-nms-ywbp-middle-2 gcc-c++]# dnf install ./*.rpm
软件包 annobin-8.90-1.0.1.an8.x86_64 已安装。
软件包 cpp-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 glibc-devel-2.28-101.el8.x86_64 已安装。
软件包 glibc-headers-2.28-101.el8.x86_64 已安装。
软件包 isl-0.16.1-6.el8.x86_64 已安装。
软件包 kernel-headers-4.19.0-240.23.11.el8_2.bclinux.x86_64 已安装。
软件包 libasan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libatomic-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libmpc-1.0.2-9.el8.x86_64 已安装。
软件包 libubsan-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 已安装。
软件包 libxcrypt-devel-4.1.1-4.el8.x86_64 已安装。
依赖关系解决。
============================================================================================================================================================================================================================================
软件包 架构 版本 仓库 大小
============================================================================================================================================================================================================================================
安装:
gcc-c++ x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 12 M
libstdc++-devel x86_64 8.3.1-5.0.1.1.el8_2.bclinux @commandline 2.0 M
事务概要
============================================================================================================================================================================================================================================
安装 2 软件包
总计:14 M
安装大小:42 M
确定吗?[y/N]: y
下载软件包:
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
安装 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
运行脚本: gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
验证 : gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 1/2
验证 : libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 2/2
已安装:
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64 libstdc++-devel-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
完毕!
[root@xz-nms-ywbp-middle-2 gcc-c++]#
[root@xz-nms-ywbp-middle-2 gcc-c++]# rpm -qa | grep gcc-
libgcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
gcc-c++-8.3.1-5.0.1.1.el8_2.bclinux.x86_64
[root@xz-nms-ywbp-middle-2 gcc-c++]#