DNF 包管理指南

Table of Contents

从 Fedora 22 开始,DNF 正式取代 yum,成为系统默认的包管理器。相比 yum,DNF 优势:

1、更换了依赖解决的算法;

2、DNF 是 Python 写的,同时支持 Python2 和 Python3,并且代码更干净。

1 搜索包

dnf search python-pip

2 安装包

sudo dnf install python-pip

2.1 安装编译依赖

对应 yum 的 yum-builddep。需要手动编译软件时自动安装所需的依赖:

sudo dnf builddep 包名

3 卸载包

sudo dnf remove python-pip

3.1 清理系统中无用的包

类似 apt-get autoremove:

sudo dnf autoremove

4 更新包

升级一个包:

sudo dnf upgrade python-pip

或更新系统中所有包:

sudo dnf upgrade python-pip

5 列出包

列出已安装的包:

dnf list installed <可选:包名/关键字>

列出可安装的包:

dnf list available <可选:包名/关键字>

6 查找包

查找命令属于哪个软件包

需要提供命令的绝对路径。一般我需要下载某个命令的源码时,就需要先知道它属于哪个包:

dnf provides /bin/bash

也可以使用 rpm 命令:

rpm -qf /bin/bash

查找哪个包包含了指定文件

如果编译某个软件、运行某个命令,系统找不到时,可以用“*”代替上层路径搜索:

dnf provides '*/magic.h'

列出 yum 仓库中某个包的文件列表

例,想用 pip3 安装一个包,系统找不到 pip3 命令,而用 dnf 安装 python3-pip 时提示已安装。用以下命令即可列出 python3-pip 包有哪些文件:

dnf repoquery -l python3-pip

7 下载包

dnf download python
dnf download --source python # 加 --source 表示下载源码

# 老系统中用的 yum-utils 的命令
yumdownloader python
yumdownloader --source python

给定的参数是包的名字,如果要下载某个命令的源码,需要先知道命令所属的包。以 alternatives 命令为例:

1、得到命令具体位置:

whereis alternatives

2、查询命令所属的包:

dnf provides /usr/sbin/alternatives

或:

rpm -qf /usr/sbin/alternatives

3、下载

dnf download chkconfig

8 Copr

Copr(Cool Other Package Repositories),类似 Ubuntu 的 PPA。

第三方软件可以通过https://copr.fedorainfracloud.org搜索,下面以安装 PyCharm 社区版为例:

sudo dnf copr enable phracek/PyCharm # 启用 PyCharm 的仓库
sudo dnf search pycharm # 搜索 PyCharm 包
sudo dnf install pycharm-comunity # 安装 PyCharm 社区版

可以用 list 子命令列出当前安装的仓库:

$ sudo dnf copr list
copr.fedorainfracloud.org/phracek/PyCharm

通过 disable 禁用仓库,或使用 remove 删除仓库:

sudo dnf copr disable phracek/PyCharm
sudo dnf copr remove phracek/PyCharm

9 查看 DNF 日志

dnf history
dnf history [包名] # 查看某个包的操作历史

或直接看 /var/log/dnf.log。

10 更多帮助

  • DNF官方文档
  • man dnf
  • man dnf.plugin.插件名,查看某个 DNF 插件详细帮助

11 FAQ

11.1 如何设置 socket 代理?

在 /etc/dnf/dnf.conf 追加:

proxy=socks5://[host]:[port]

如果是 yum,就把上面设置追加到 /etc/yum.conf。