• CentOS-8 dnf 前端工具学习笔记


    CentOS-8 dnf 前端工具学习笔记

    由于 rpm 工具不能解决软件包之间的依赖问题,因此开发出来更好用的工具,CentOS 8 之前是使用 yum 工具,8 开始使用 dnf 工具。

    1. yum 和 dnf

    DNF 是 YUM 的下一个主要版本,是基于 RPM 的 Linux 发行版的包管理器。它大致保持了与 YUM 的 CLI(命令行接口) 兼容性,并为扩展和插件定义了严格的 API。

    CentOS 8 开始使用 dnf,这是 rpm 的前端程序(利用 python实现),可以解决软件包之间的依赖关系。

    命令的基本格式:

    dnf [options] <command> [<args>...]
    
    • 1

    1.1 dnf 工作原理

    dnf 是基于 C/S 模式的。

    • dnf 服务器存放 rpm 包和其元数据库
    • dnf 客户端访问 dnf 服务器查询和下载所需的包,并进行安装、升级等

    dnf 实现的过程:先在 dnf 服务器中创建仓库(Repository),把 rpm 包存放其中,通过命令提取包的元数据,生成数据库(放置在特定目录 repodata 下),当 dnf 客户端进行访问时,先下载此元数据数据库文件,然后在其中查询所需的包及依赖包,最后从服务器中下载相应的包进行各种操作。

    dnf 服务器的仓库配置可以是多种形式:

    • file:// 本地路径
    • http://
    • https://
    • ftp://

    注意:dnf 仓库 url 必须指向服务器中的 repodata 所在的目录。

    1.2 dnf 客户端配置

    客户端上的配置文件有:

    /etc/dnf.conf           # 对所有仓库配置
    /etc/dnf.repos.d/*repo  # 对单个仓库配置
    
    • 1
    • 2

    帮助参考:man 5 dnf.conf

    在配置dnf仓库可以使用的变量:

    $releasever         # 当前OS的发行版的主版本号,例如,6,7,8
    $arch               # cpu架构,例如,aarch6,i586,i686,x86_64等
    $basearch           # 系统基层平台:i386,x86_64
    $contentdir         # 表示目录,例如,centos-8
    $YUM0-$YUM9         # 自定义变量
    
    • 1
    • 2
    • 3
    • 4
    • 5

    示例:在 CentOS 8.5.111 系统上,自己创建国内的镜像阿里云的仓库(可以从网上下载),基本需要如下:

    cat /etc/yum.repos.d/CentOS-vault-8.5.2111.repo
    
    [base]
    name=CentOS-8.5.2111 - Base - mirrors.aliyun.com
    baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/$basearch/os/
    gpgcheck=0
    gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-Official
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果想要完成以上步骤,可以在家目录中写一个脚步,自动完成以上步骤:

    vim dnf_config_repo.sh
    
    # vim 中编写以下代码
    #!/bin/bash
    
    cd /etc/yum.repos.d/
    
    [ -d backup ] || mkdir /etc/yum.repos.d/backup
    
    [-f *.repo ] || mv *.repo backup/
    
    cat > CentOS-Base-8.5.2111.repo <<EOF
    [BaseOS]
    name=CentOS 8.5.2111 base - mirrors.aliyun.com
    # 注意变量前面必须使用斜杆转义
    baseurl=http://mirrors.aliyun.com/centos-vault/8.5.2111/BaseOS/\$basearch/os/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    EOF
    
    # chmod +x dnf_config_repo.sh
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    如果想要安装 EPEL 中的包,按照以下步骤:

    dnf list | grep epel
    epel-next-release.noarch      8-11.el8      extras
    epel-release.noarch           8-11.el8 st | grep epel
    
    dnf -y install epel-release
    
    rpm -ql epel-release
    /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
    /etc/yum.repos.d/epel-modular.repo
    /etc/yum.repos.d/epel-playground.repo
    /etc/yum.repos.d/epel-testing-modular.repo
    /etc/yum.repos.d/epel-testing.repo
    /etc/yum.repos.d/epel.repo
    /usr/lib/systemd/system-preset/90-epel.preset
    /usr/share/doc/epel-release
    /usr/share/doc/epel-release/README-epel-8-packaging.md
    /usr/share/licenses/epel-release
    /usr/share/licenses/epel-release/GPL
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    但是,安装时生成的 epel 仓库网址可能不在国内,需要修改成国内的镜像。

    # 在epel源中安装一个小火车
    dnf -y install sl
    
    sl
    
    # 有司机的火车
    sl -a
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在CentOS 8 上应该至少要有 BaseOS、AppStream、extras 及 epel 仓库。

    仓库的元数据缓存目录

    /var/cache/yum/x86_64/
    
    • 1

    每个配置好的仓库下载的数据都是缓存在这里。

    可以使用以下命令清理缓存,但是如果已经先删除了仓库的配置文件,缓存是不会被清理的:

    dnf clean all
    
    • 1

    当然可以把存放缓存的目录内容全部删除。下载使用时会自动下载相应的元数据。也可以使用命令来下载缓存。

    dnf make cache
    
    • 1

    安装的日志位置在:/var/log/dnf.log 中。而在 CentOS 8 以下但是在 /var/log/yum.log 中。

    安装操作系统时的日志在:/var/log/anaconda/ 中。

    假设系统中的 rpm 命令通过以下方法被删除了:

    rpm -e rpm --nodeps
    
    • 1

    想要恢复,除了重装系统外,一个方法是设法重新安装 rpm。可以重启系统进入光盘启动的救援模式,在这里进行安装软件,但是要指定选项:

    mkdir /mnt/cdrom
    mount -r /dev/sr0 /mnt/cdrom
    
    rpm -ivh /mnt/cdrom/Packages/rpm-4...... --root=/mnt/sysimage/
    
    # 切换
    chroot /mnt/sysimage
    
    rpm -q rpm
    
    reboot
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    CentOS 系统国内的 dnf 镜像源

    EPEL 的 dnf 源:

    阿里云 https://mirrors.aliyun.com/epel

    Linux 新版本的内核网址,从而可以安装新版内核:

    https://www.elrepo.org/
    
    # 这个命令在以上网址上就有的
    dnf install https://www.elrepo.org/elrepo-release-...
    
    • 1
    • 2
    • 3
    • 4

    在同一个主版本的前提下,可以安装其他内核版本,但是不同的主版本之间的版本,由于有依赖问题不能直接安装内核。

    如果一个操作系统安装时间比较早,可以使用以下命令来查询安装时间:

    rpm -qi kenel
    
    • 1

    dnsmasq 命令,主要用于配置dns

    配置好 dnf 仓库后,可以执行:

    dnf clean all
    dnf makecache
    
    dnf repolist             # 可以看到配置的仓库id及包的数量等
    
    dnf list                 # 会列出所有可用的包,其中最后一列,有多种字符串的值,
                             # 代表不同的含义,其中带有 '@xxx' 代表已经安装
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果以上操作没有出现错误,就可以使用以下命令进行安装:

    dnf -y install httpd
    
    # 可以使用以下方法,查询是否已经安装
    rpm -q httpd
    
    • 1
    • 2
    • 3
    • 4

    此时就能顺利地安装软件,并且自动解决包之间的依赖问题。

    也可以使用以下命令,删除已经安装的软件,并且在 CentOS 8 上,能够自动删除那些没有被依赖的包。但是CentOS 7上并不会自动删除那些依赖的包。

    dnf -y removd httpd
    
    • 1

    我们可以查看dnf操作的日志:

    tail /var/log/dnf.log
    
    • 1

    可以通过以下命令查看dnf操作历史:

    dnf history
    
    dnf history info N      # 查看第 N 个历史记录
    
    dnf history undo N      # 可以撤销第 N 个历史记录
    
    dnf history redo N      # 可以重新操作第 N 个历史记录
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    yum-config-manager 命令

    dnf 仓库的配置文件及启用或禁用仓库,来自于 yum-utils 包。其功能:管理 main 和存储库DNF配置选项,切换启用或禁用的存储库,并添加新的存储库。

    dnf -y install yum-utils
    
    # 格式:section 可以是 main 或 一个仓库。如果没有指定,则会选择 main 节和
    #   使用任何 --setopt 选项上的每个仓库id
    
    dnf config-manager [options] <section>...
    
    # 示例:增加一个仓库
    dnf config-manager --add-repo http://example.com/some/additional.repo
    
    # 启用指定的仓库,并持久化
    dnf config-manager --set-enabled <repoid>
    
    # 禁用指定的仓库
    dnf config-manager --set-disabled <repoid1> <repoid2>
    # 或者
    dnf config-manager --set-disabled <repoid1>,<repoid2>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    1.3 创建私有 dnf 仓库

    下面以http提供仓库为例,这种方法只能提供光盘的资源:

    # 安装 httpd 包
    dnf install httpd -y
    systemctl enable httpd --now
    
    # cd /var/www/html
    mkdir /centos/8 -pv
    
    # 这里先用光盘的资源
    mount -r /dev/sr0 /var/www/html/centos/8
    
    # 如果防火墙设置关闭,这是在浏览器中可以访问到这些资源了
    http://xx.xx.xx.xx/centos/8
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    对于其他网上的资源需要下载所有 dnf 仓库所需的相关包和元数据

    # CentOS 8 dnf 工具集成
    dnf reposync --help         # 查看帮助
    dnf reposync --repoid=REPOID --downloadmetadata -p /path
    
    # CentOS 7 及以前版本,reposync 来自于 yum-utils 包
    reposync --repoid=REPOID --downloadmetadata -p /path
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    示例:下载阿里云中的 extras 仓库

    mkdir /var/www/html/extras
    
    # 这样就能够同步到网上的资源,包括元数据
    dnf reposync --repoid=extras --downloadmetadata -p /var/www/html/extras
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果只有下载了部分需要的rpm包,这时需要使用以下命令生成元数据 repodata

    dnf install createrepo -y
    
    createrepo [options] <directory>
    
    • 1
    • 2
    • 3

    2. dnf 帮助

    以下部分主要来自于CentOS 8 dnf 帮助。

    2.1 常用选项

    选项说明
    –advisory=, --advisories=包括对应于咨询的ID(例如,FEDORA-2201-123)的包。应用于安装、仓库查询、升级信息和升级命令。
    –allowerasing允许删除已经安装的包以解决依赖问题。
    –assumeno对所有问题自动回答 no。
    -b, --best尝试事务中最佳可用的包。特别是在 dnf upgrade 升级期间(默认跳过由于依赖性原因而不能安装包的升级),该选项强制 dnf 只考虑最新的包。当运行到依赖关系中断的包时,dnf 会失败,并给出为何最新的版本不能安装的原因。
    –bugfix包括修复问题的包。
    –bz=, --bzs=包括修复 Bugzilla ID (例如,123123) 的包。
    -C, --cacheonly完全从系统的缓存中运行,不升级缓存,且即使已经过期也使用它。
    –color=控制在终端输出中使用那种颜色。有效值是:always, never 和 auto (默认)。
    –comment=增加注释到事务历史中。
    -c , --config=配置文件的位置。
    –cve=, --cves=包括修复CVE(常见漏洞和风险)ID的程序包(http://cve.mitre.org/about/), 例如, CVE-2201-0123。
    –disableexcludes=[all|main|], --disableexcludekgs=[all|main|]禁用配置文件排除。取以下三种选项之一:
    all,禁用所有配置文件排除;
    main,禁用在 [main] 节中定义排除的;
    repoid,禁用指定仓库定义的排除。
    –disable, --set-disabled禁用指定的仓库(自动保存)。此选项需与 config-manager 命令(dnf-plugins-core)一起使用。
    –disableplugin=禁用根据名称或通配符指定的列出的插件。
    –disablerepo=禁用根据 id 或通配符指定的仓库。此选项与 --repo 互斥。
    –downloaddir=, --destdir=重定向下载的包至指定的目录。此选项必须与以下一起使用,–downloadonly 命令行选项,download 命令 (dnf-plugins-core) 或 system-upgrade 命令 (dnf-plugins-extras)。
    –downloadonly仅下载解析的包集,而不执行任何 rpm 事务(安装,升级,删除)。
    –enable, --set-enabled启用指定的仓库(自动保存)。
    –enableplugin=启用根据名称或通配符指定的列出的插件。
    –enablerepo=启用根据id或通配符指定的另外的仓库。
    –enhancement包括增强相关的包。
    -x 排除有 指定的包。
    –forcearch=强制使用架构。
    –installroot=指定相对于所有将安装的包的另外的安装根目录。就像操作 chroot dnf 一样,除了使用 --installroot 允许 dnf 在切换跟之前进行操作。需要绝对路径。
    –newpackage包括与新包相关的包。
    –noautoremove禁用删除不再使用的依赖包。
    –nobest设置 best 选项为 false,因此事务不会仅限制为最佳的候选。
    –nodocs不要安装文档。
    –nogpgcheck如果 rpm 策略允许,则跳过包的GPG签名检查。
    –noplugins禁用而所有插件。
    –obsoletes该选项对安装或升级有效,它启用了dnf 的过时处理逻辑。
    -q, --quiet结合非交互式命令,仅显示相关内容。压制有关当前状态或 dnf 操作的信息通知。
    -R , --randomwait=命令等待最多时间。
    –refresh在执行命令之前,把元数据设置为过期。
    –releasever=配置 dnf,好像发行版是 。这将影响到缓存路径、配置文件和镜像列表 URLs 中的值。
    –repofrompath , 指定一个仓库加入本次查询的仓库集中。该选项可以使用多次。
    –repo=, --repoid=仅启用通过 id 或通配符指定的仓库。
    –rpmverbosity=rpm 调试脚本片段输出级别。为脚本片段设置调试级别至
    –sec-severity=, --secseverity=包括提供修复一个指定严重性问题的包。
    –security包括提供修复一个严重性问题的包。
    –setopt=从该配置文件覆盖配置选项。想要覆盖仓库的配置选项,使用 repoid.option 以设置
    –skip-broken通过事务中删除引起问题的包来解决依赖问题。
    –showduplicates显示仓库中重复的包。
    -v, --verbose详细操作,显示调试信息。
    -y, --assumeyes对于所有提问,自动回答 yes。

    2.2 命令

    Alias 别名命令

    允许用户定义和管理别名列表(以 格式),然后利用别名来当成 dnf 命令使用,以简写较长的命令序列。

    想要使用别名(name=value),name 必须出现在作为第一个"命令"的位置(例如,第一个参数不是选项)。然后被其值 value 替代,且结果序列再次进行搜索别名。当第一个发现的命令不是任何别名的名称时,别名处理停止。

    为了防止出现递归,像 shell 别名一样,在命令前面使用 \,这样别名处理将会停止。

    所有的别名都定义在 /etc/dnf/aliases.d/ 目录下得 [aliases] 节中的配置文件,并有 alias 命令创建的别名写入 USER.conf 文件内。如果发生冲突,则 USER.conf 有更高的权限,且其他的配置文件安装字母顺序排列。

    命令格式:

    创建新的别名:

    dnf alias [options] add <name=value>...
    
    # 例如,创建一个别名
    dnf alias add in=install
    
    dnf alias add rm=remove
    
    dnf alias add upgrade="upgrade --skip-broken --disableexcludes=all --obsoletes"
    
    dnf alias add FORCE="--skip-broken --disableexcludes=all"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    列出最终结果的别名列表。[…] 参数进一步限制至只匹配它的结果。

    dnf alias [options] [list] [\<name>...]
    
    # 例如,查询所有的别名
    dnf alias list
    Alias in='install'
    Alias rm='remove'
    Alias FORCE='--skip-broken --disableexcludes=all'
    Alias upgrade='upgrade --skip-broken --disableexcludes=all --obsoletes'
    
    dnf alias list
    [root@centos8 aliases.d]# dnf alias list rm
    Alias rm='remove'
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    删除别名:

    dnf alias [options] delete \<name>...
    
    • 1
    Autoremove 自动删除命令
    dnf [options] Autoremove
    
    • 1

    从系统中删除所有最初由用户安装包时作为依赖包安装的,且不被任何这样的包需要的"叶子"包。

    在 installonlypkgs 列出的包不会自动通过以下命令删除。

    dnf [options] Autoremove \<spec>...
    
    • 1

    这是 Remove Command 带 clean_rerequirements_on_Remove(删除时清除依赖包)设置为True 的别名。它将从系统中删除指定的包以及任何依赖于指定包的包。每个<spec>可以是一个<package spec>,它直接指定一个包,或者是一个@<group spec>(它指定一个包含它的(环境)组)。它还删除了不再需要的任何依赖项。

    Check 检测命令
    dnf [options] check [--dependencies] [--duplicates] [--obsoleted] [--provides]
    
    • 1

    检测当地包数据库和产生有关它找到的任何问题信息。

    Check-Update 检测升级命令
    dnf [options] Check-Update [--changelogs] [<package-file-spec>...]
    
    • 1

    非交互式检查指定包的更新是否可用。如果未提供,则检查系统是否有可用的更新。当有可用更新时,DNF退出代码将为100,并且将打印更新列表,如果没有,则为0,如果发生错误,则为1。如果指定了–changelogs选项,还将打印要更新的包的changelog增量。

    Clean 清除命令

    执行为存储库保留的临时文件的清理。这包括从禁用或删除的存储库以及不同发行版本中留下的任何此类数据。

    dnf clean dbcache       # 删除由仓库元数据产生的缓存文件
    
    dnf clean expire-cache  # 标记已经过期的仓库元数据
    
    dnf clean metadata      # 删除仓库元数据
    
    dnf clean packages      # 删除系统中任何缓存的包
    
    dnf clean all           # 删除所有以上的内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    Distro-Sync 命令

    别名:dsync

    dnf distro-sync [\<package-spec>...]
    
    • 1

    根据需要升级、降级或保留选定的已安装软件包,以匹配任何已启用存储库中可用的最新版本。如果未提供包,则考虑所有已安装的包。

    Downgrade 降级命令

    别名:dg

    dnf [options] downgrade <package-spec>...
    
    • 1

    如果可能,将指定的软件包降级到所有已知较低版本中最高的可安装软件包。如果给定的版本低于已安装包的版本,则会降级到目标版本。

    Group 组命令

    别名:grp

    组是包的虚拟集合。DNF跟踪用户选择(“标记”)安装的组,并可以通过简单的命令操作包含的包。

    显示多少已经安装和可用的组的概况。如果指定组名,则仅显示为匹配的组信息。summary 是默认的组子命令。

    dnf [options] group [summary] <group-spec>
    
    # 最小化安装,还没有安装组
    dnf group
    Last metadata expiration check: 16:10:43 ago on Thu 17 Nov 2022 03:58:44 PM CST.
    Available Groups: 14
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    显示指定的包列表。如果使用 -v 选项,显示仓库中那些包已安装或可用。

    dnf [options] group info <group-spec>
    
    # 示例
    dnf -v group info development
    Loaded plugins: builddep, changelog, config-manager, copr, debug, debuginfo-install, download,
     generate_completion_cache, groups-manager, needs-restarting, playground, repoclosure,
     repodiff, repograph, repomanage, reposync
    DNF version: 4.7.0
    cachedir: /var/cache/dnf
    User-Agent: constructed: 'libdnf (CentOS Linux 8; generic; Linux.x86_64)'
    repo: using cache for: base
    base: using metadata from Fri 31 Dec 2021 02:06:31 PM CST.
    repo: using cache for: extras
    extras: using metadata from Fri 10 Dec 2021 08:56:25 PM CST.
    repo: using cache for: AppStream
    AppStream: using metadata from Fri 31 Dec 2021 02:06:52 PM CST.
    repo: using cache for: epel
    epel: using metadata from Thu 17 Nov 2022 11:18:55 AM CST.
    repo: using cache for: epel-modular
    epel-modular: using metadata from Tue 13 Sep 2022 09:46:46 AM CST.
    Last metadata expiration check: 16:20:38 ago on Thu 17 Nov 2022 03:58:44 PM CST.
    
    Group: Development Tools
     Group-Id: development
     Description: A basic development environment.
    ......
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    标记指定的组已安装,且安装其包含的包。如果指定了 --with-optional,则也会包括组中可选的包。

    dnf [options] group install [--with-optional] <group-spec>...
    
    # 示例安装开发组
    dnf grp install development
    
    • 1
    • 2
    • 3
    • 4

    编辑指定组为被删除,且从系统中删除该组中的这些包,即不属于其他已安装组的,也不是用户明确安装的包。

    dnf [options] group remove <group->
    
    • 1

    升级组中的包和组本身。后者由在安装的分发者增加的包和从组中删除的包组成,只要不是用户明确安装。

    dnf [options] group upgrade <group-spec>...
    
    • 1

    可以在没有物理操作包的情况下,标记组已安装或删除。

    dnf [options] group mark install <group-spec>...
    
    dnf [options] group mark remove <group-spec>...
    
    • 1
    • 2
    • 3
    Help 帮助命令

    显示所有命令的帮助文本。如果指定命令名称,则只显示特定命令的帮助信息。

    dnf help [<command>]
    
    • 1
    History 历史命令

    别名:hist

    history 历史命令允许用户查看在过去的事务中发生过什么,及根据这些信息进行操作(假设 history_record 配置选项以设置)。

    默认的历史记录动作是在一个表中列出指定事务的信息。每个 可以是直接指定的 ,或者是指定事务范围的 ,或者是通过指定一个包来确定操作的事务 。如果没有指定事务,则列出所有已知的事务。

    –reverse:表示历史列表以逆序方式打印。

    dnf history [list] [--reverse] [<spec>...]
    
    # 示例,列出所有已知的事务
    dnf history
    
    • 1
    • 2
    • 3
    • 4

    描述指定的事务。

    dnf history info [<spec>...]
    
    • 1

    重新操作指定的事务。

    dnf history redo <transaction-spec>|<package-file-spec>
    
    • 1

    回放由 history store 命令保存在 中的事务。该回放将执行与原始事务对包所进行的相同的操作,且如果在安装其版本的包时出现任何不同,将返回一个错误。

    dnf history replay [--ignore-installed] [--ignore-extras]
        [--skip-unavailable] <filename>
    
    • 1
    • 2

    撤销指定事务之后的所有事务执行。

    dnf rollback <transaction-spec>|<package-file-spec>
    
    • 1

    保存由 指定的事务。-o 用于把序列化的事务保存至 。默认保存在 transaction.json。

    dnf history store [--output <output-file>] <transaction-spec>
    
    • 1

    执行与指定事务中所有执行的操作相反的操作。

    dnf history undo <transaction-spec>|<package-file-spec>
    
    • 1

    显示所有安装时只有包,非通过 dnf 安装的包,及不作为依赖而安装的包。这也可以使用 dnf repoquery --userinstalled 得到结果,并且后者更强大。

    dnf history userinstalled
    
    • 1
    Info 信息命令

    列出已安装的和可用的包的信息和概况。

    dnf [options] info [<package-file-spec>...]
    
    • 1
    Install 安装命令

    别名:in

    确保在系统上安装指定的包和它们的依赖包。

    dnf [options] install <spec>...
    
    • 1

    安装示例:

    # 安装 tito 包(tito 是包名)
    dnf install tito
    
    # 从 指定路径安装本地 rpm 文件
    dnf install ~/Downloads/tito-0.6.2-1.fc22.noarch.rpm
    
    # 安装指定版本的包。如果该包已经安装,则它会自动尝试降级或升级至指定的版本
    dnf install tito-0.5.6-1.fc22
    
    # 安装最新可获取的包版本。
    dnf --best install tito
    
    # dnf 会自动识别出 vim 不是一个包名,但是会寻找和安装提供 vim 及其所有依赖的包。注意:包名匹配优先于包提供匹配。
    dnf install vim
    
    # 直接从URL安装包
    dnf install https://kojipkgs.fedoraproject.org//pack‐ages/tito/0.6.0/1.fc22/noarch/tito-0.6.0-1.fc22.noarch.rpm
    
    # 安装所有模块 'docker' 中的所有默认配置文件和rpm包。并相应地启用模块流。
    dnf install '@docker'
    
    # 安装 'Wedb Server' 环境组。
    dnf install '@Web Server'
    
    # 安装支持 /usr/bin/rpmsign 文件的包
    dnf install /usr/bin/rpmsign
    
    # 安装 tito 包,无需弱依赖的包。弱依赖的对于包的核心功能是不需要的,但是它们能增强原始包(例如,
    #      扩展的文档,插件,额外的功能等)
    dnf -y install tito --setopt=install_weak_deps=False
    
    # 安装所有属于"FEDORA-2018-b7b99fe852"建议的包
    dnf install --advisory=FEDORA-2018-b7b99fe852 \*
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    List 列表命令

    别名:ls

    根据包与系统的关系打印包的列表。如果包已经存在于 RPMDB,则显示为 installed,如果包存在于 dnf 知道的仓库,则显示为 available。根据指定的条件,当然可以限制显示的包。

    # 列出在本地 RPMDB,仓库中或两者中所有包。
    dnf [options] list [--all] [<package-file-spec>...]
    
    # 列出已安装的包
    dnf [options] list --installed [<package-file-spec>...]
    
    # 列出可用的包
    dnf [options] list --available [<package-file-spec>...]
    
    # 列出额外的,即系统上已安装的,但是在任何已知仓库没有的包
    dnf [options] list --extras [<package-file-spec>...]
    
    # 列出已安装在系统上,但在已知的仓库标记为过时的包
    dnf [options] list --obsoletes [<package-file-spec>...]
    
    # 列出最近加入到仓库中的包
    dnf [options] list --recent [<package-file-spec>...]
    
    # 列出已安装可升级的包
    dnf [options] list --upgrades [<package-file-spec>...]
    
    # 列出会被 dnf Autoremove 命令删除的包
    dnf [options] list --Autoremove
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    Makecache 生成缓存命令

    别名:mc

    下载并缓存启用的仓库的元数据。如果本地元数据没有过期或者元数据时间戳没有变化,则尽可能避免下载。

    dnf [options] makecache
    
    • 1

    与普通的 makecache 类似,但是知道 dnf 更关注电脑资源,这意味着如果使用电池动力则不会做任何事,且如果离上次成功 makecache 运行时间太短,将马上终止操作。

    dnf [options] makecache --timer
    
    • 1
    Mark 标记命令

    标记指定的包为用户安装的。如果有些包是作为依赖包安装的,并希望保留在系统中,这时就非常有用。

    dnf mark install <package-spec>...
    
    
    • 1
    • 2

    标记指定的包不是用户安装的。

    dnf mark remove <package-spec>...
    
    • 1

    标记指定的包为组安装的。如果一个包是作为依赖包或用户安装的,并希望得到保护,例如删除组时,作为组成员来处理。

    dnf mark group <package-spec>...
    
    • 1
    provides 提供命令

    别名:prov,whatprovides

    找到提供指定的 的包。当知道文件名且想找出那个包(不论是否已安装)支持改文件时有用。按以下位置逐步查找

    1. 使用任何可用的包支持的包匹配

      $ dnf provides /usr/bin/gzip
      gzip-1.9-9.fc29.x86_64 : The GNU data compression program
      Matched from:
      Filename    : /usr/bin/gzip
      
      • 1
      • 2
      • 3
      • 4
    2. 然后,搜索所有可用的包支持所有文件:

      $ dnf provides "gzip(x86-64)"
      gzip-1.9-9.fc29.x86_64 : The GNU data compression program
      Matched from:
      Provide     : gzip(x86-64) = 1.9-9.fc29
      
      • 1
      • 2
      • 3
      • 4
    3. DNF 假设 是一个系统命令,在其前面加上 /usr/bin/,/usr/sbin/ 前缀(一次一个),然后再次进行文件支持搜索。由于传统原因(没有进行 UrsMove 操作的包),也会在其前面加上 /bin,/sbin 前缀再进行搜索:

      $ dnf provides zless
      gzip-1.9-9.fc29.x86_64 : The GNU data compression program
      Matched from:
      Filename    : /usr/bin/zless
      
      • 1
      • 2
      • 3
      • 4
    4. 如果上一步也失败了,则 DNF 返回 “Error: No Matches found”。

    Reinstall 重装命令

    别名:rei

    安装指定的包,如果一些包要么未能安装或不可用(例如,没有仓库可以下载到相同的 rpm),则失败。

     dnf [options] Reinstall <package-spec>...
    
    • 1
    Remove 删除命令

    别名:rm

    从系统中删除指定的包及其依赖的不被使用的包。

    dnf [options] remove <package-spec>...
    
    # 示例:删除 acpi 和 tito 包
    dnf remove acpi tito
    # 删除任何存储库中不存在的包,但不要删除tito和acpi包(如果它们依赖于某些已删除的包,则仍可能被删除)。
    
    • 1
    • 2
    • 3
    • 4
    • 5

    删除重复包的旧版本。为了确保系统的完整性,它将重新安装最新的软件包。在某些情况下,命令无法解决冲突。在这种情况下,带有 remove --duplicates 的 dnf-shell子命令和 upgrade 的 dnf shell命令可能会有所帮助。

    dnf [options] remove --duplicates
    
    • 1

    只删除安装的旧包,只保留最新的版本及正在运行的内核版本。

    dnf [options] remove --oldinstallonly
    
    • 1
    Repoinfo 命令

    类似 dnf repolist -v 的提供更多细节信息的 repolist 命令的别名。

    Repolist 包列表命令

    根据确切的命令,列出启用、禁用或所有已知的仓库。默认列出所有启用的仓库。使用 -v 选项时,提供更详细的信息。

    dnf [options] repolist [--enabled|--disabled|--all]
    
    • 1
    Repoquery 包查询命令

    在可用的 DNF 存储库中搜索选定的软件包,并显示有关这些软件包的请求信息。它相当于对远程存储库执行 rpm -q

    dnf [options] repoquery [<select-options>] [<query-options>] [<package-file-spec]
    
    • 1

    提供 --queryformat 仓库查询选项所识别的标记列表。

    dnf [options] repoquery --querytags
    
    • 1
    select options 选择选项

    一起控制输出中的那些包会显示。如果指定了 ,则限制为匹配指定条件的包集。如果没有指定 ,则考虑所有的包。

    • 以NEVRA格式(name[-[epoch:]version[-release]][.arch])指定包,是包的支持或者文件支持。

    • -a, --all

      查询所有包(与 rpmquery 兼容,也是 repoquery ‘*’ 或不带次数的 repoquery 的简写)。

    • arch [,…], --archlist [,…]

      限制结果集仅为所选架构的包(默认是所有架构)。在某些情况下,结果收到正在运行的系统的基层架构的影响,因此,如果运行 repoquery 查询与你的系统不兼容时,请使用 --forcearch= 选项以改变基层架构。

    • –duplicates

      限制结果集为已安装的重复的包(例如,具有相同名称和架构的多个版本)。只安装的包排除该集合外。

    • –available

      限制结果集至只有可用的包(默认的设置)。

    • –extras

      限制结果集为在任何可用的仓库中都不存在的包。

    • –installed

      限制结果集至已经安装的包。配置文件中的 exclude 选项可能会影响结果,但是如果命令行上使用了选项 --disableexcludes,那么,能确保列出所有已安装的包。

    • installonly

      限制结果集至已安装的只安装包(installonly)。

    • –recent

      限制结果集至最近编辑过得包。

    • repo

      限制结果集仅由 指定的仓库中的包。可以多次使用已达到累计效果。

    • –upgrade

      限制结果集至能提供升级一些已安装的包的包。

    • –userinstalled

      限制结果集至由用户安装的包。

    • –whatdepends [,…]

      限制结果集至需要、增强、推荐、建议或实现的任何 的包。

    • – whatconflicts [,…]

      限制结果集至与任何 相冲突的包。

    • –whatenhances [,…]

      限制结果集至增强任何 的包。

    • –whatobsolete [,…]

      限制结果集至那些使任何 过时的包。

    • –whatprovides [,…]

      限制结果集至那些支持任何 的包。

    • –whatrequires [,…]

      限制结果集至那些需要任何 的包。

    • –whatsuggests [,…]

      限制结果集至那些建议任何 的包。

    • –whatsupplements [,]

      限制结果集至那些补充任何 的包。

    • –alldeps

      此选项只与 --whatrequires 或 --whatdepends 一起使用。此外,它会将所有需要此包功能的包加到结果集中(默认使用)。

    • –exactdeps

      此选项只与 --whatrequires 或 --whatdepends 一起使用。限制结果集至那些需要由 --whatrequires 指定的 的包。

    • –srpm

      在相应的 rpm 源上操作。

    Query options 查询选项

    设置显示每个包的那些信息。

    以下选项是互斥的,最多可以指定一个。如果没有给出查询选项,则匹配的包以标准的 NEVRA 表示法显示。

    以下表述中的 capabilities 中文含义是能力,应该是指 包的名称 或文件等。

    • -i, --info

      显示有关包的详细信息。

    • -l, --list

      显示该包中文件列表。

    • -s, --source

      显示包源 rpm 名称。

    • –changelogs

      打印包的改变日志。

    • –conflicts

      显示与该包相冲突的 capabilities。类似于 --qf “%{conflicts}”

    • –depends

      显示该包所依赖的、增强的、推荐的、建议的 或实现的 capabilities。

    • –enhances

      显示该包增强的 capabilities。类似于 --qf “%{enhances}”。

    • –location

      显示该包将会从那个位置下载。

    • –obsoletes

      显示该包使那些 capabilities 过时。类似于 --qf “%{obsoletes}”

    • –provides

      显示该表支持的 capabilities。类似于 --qf “%{recommends}”。

    • –recommends

      限制该包推荐的包。类似于 --qf “%{recommends}”。

    • –requires

      显示该包所依赖的 capabilities。类似于 --qfqf “%{requires}”。

    • –requires-pre

      显示该包所依赖的运行 %pre 脚本的 capabilities。类似于 --qfqf “%{requires-pre}”。

    • –suggests

      显示该包建议的 capabilities。类似于 --qfqf “%{suggests}”。

    • –supplements

      显示该包补充的 capabilities。类似于 --qfqfqf “%{supplements}”。

    • –tree

      使用以下补充选项指定的 capabilities 显示包的递归树:–whatre‐quires, --requires, --conflicts, --enhances, --suggests, --provides, --supplements, --recommends.

    • –deplist

      生成所有直接依赖项的列表,以及哪些包为给定的包提供这些依赖项。结果只显示最新的提供程序(可以使用–verbose更改)。

    • –nvr

      显示发现的以 name-version-release (名称-版本-发行)格式的包。与 --qf “%{name}-%{version}-%{release}”。

    • –vevra

      显示发现的以 epoch:name-version-release.architecture 格式的包。

    • –qf , --queryformat

      自定义显示格式。 是为每个匹配的包输出的字符串。里面出现的每个 %{} 都会替换为该包对应的属性。被识别的标签列表能通过运行 dnf repoquery --querytags 来显示。

    • –recursive

      递归查询包。必须与 --whatrequires (可选 --alldeps,但不能与 --exactdeps 一起) 或者与 --requires --resolve 一起使用。

    • –resolve

      解析原始包的 capabilities 。

    示例

    显示所有匹配 light* 的可用NEVRA格式的包:

    dnf repoquery 'light*'
    
    • 1

    显示所有匹配 light* 及 noarch 架构的可用的NEVRA格式的包(只接收 “.” 格式的参数)。

    dnf repoquery-na 'light*.noarch'
    
    • 1

    显示所有 lighttpd 包的依赖:

    dnf repoquery --repuires lighttpd
    
    • 1

    显示提供python包所需要的包:

    dnf repoquery --repuires python --resolve
    
    • 1

    显示 lighttpd 包的源 rpm:

    dnf repoquery --source lighttpd
    
    • 1

    显示拥有给定文件的包名:

    dnf repoquery --file /etc/lighttpd/lighttpd.conf
    
    • 1

    显示所有 lighttpd bk 的名称、架构和包含的仓库:

    dnf repoquery --queryformat '%{name}.%{arch} : %{reponame}' lighttpd
    
    • 1

    显示所有支持 “webserver” 的可用包:

    dnf repoquery --whatprovides webserver
    
    • 1

    显示所有支持 “webserver” 但只适合 “i686” 的可用的包:

    dnf repoquery --whatprovides webserver --arch i686
    
    • 1

    显示重复的包:

    dnf repoquery --duplicates
    
    • 1

    显示需要用于构建的 的源包:

    dnf repoquery --disablerepo="*" --enablerepo="*-source" --arch=src --whatrequires \<provide>
    
    • 1
    Repository-Packages 仓库-包命令

    该命令允许用户在名为 的仓库中所有包之上允许命令。但是,任何依赖性解决方案考虑所有启用的仓库中的包。 的指定进一步限制候选项仅为至少匹配它们之一的那些包。

    info 子命令列出有关该包相关仓库的依赖的包的描述和概况。list 子命令仅打印那些包的列表。

    具体内容省略。

    Search 搜索命令

    别名:se

    在包元数据中搜索关键字。关键字匹配为不区分大小写的子字符串,支持通配符。默认情况下,列出与所有请求的键(AND操作)匹配的包。在包名称和摘要中搜索关键字。如果使用“–all”选项,则列出至少与其中一个键匹配的包(OR操作)。此外,在包描述和URL中搜索关键字。结果从最相关的结果到最不相关的结果进行排序。

    dnf [options] search [--all] \<keywords>...
    
    • 1
    Shell 命令

    别名:sh

    具体内容省略。

    upgrade 升级命令

    别名:up

    升级每个包至可用的和可解析的最新版。

    dnf [options] upgrade
    
    • 1

    升级每个指定的包至最新可用的版本。如果需要也升级依赖包。如果指定了版本,则升级到那些版本。

    dnf [options] upgrade \<package-spec>...
    
    • 1

    dnf module update 命令的别名。

    dnf [optios] upgrade @\<spec>...
    
    • 1
    Upgrade-Minimal 最小化升级命令

    别名:up-min

    升级每个包至提供 bug修复、安全问题的增强或修复的最新的版本。

    dnf [options] upgrade-minimal
    
    • 1

    升级每个指定的包至提供 bug修复、安全问题的增强或修复的最新的版本。如果有必要也升级依赖包。

    dnf [options] upgrade-minimal \<package-spec>...
    
    • 1
    SPECIFYING PACKAGES 指定包

    许多命令获取 参数来选择包供操作。该参数以匹配包的NEVRA、支持包和文件支持包。

    相似,除了支持包不会执行。因此, 只匹配NEVRA和文件支持包。

    只匹配NEVRA。

    • Globs 通配符

      包指定支持与 shell 所匹配的通配符模式一样。

    • NEVRA 匹配

      在匹配NEVRA时,支持部分匹配。dnf 试图与以下NEVRA格式列表(以优先级降序排列)匹配指定的内容:

      • name-[epoch:]version-release.arch
      • name.arch
      • name
      • name-[epoch:]version-release
      • name-[epoch:]version

      注意:这个 name 通常可以包含 ‘-’ (例如,package-with-dashes)。

    • 显式指定 NEVRA 匹配

      一些命令(Autoremove、install、remove 和 repoquery)也有带后缀 -n、-na和 -nevra 的别名,这样允许显式指定如何解析参数:

      • 命令 install-n 只匹配 name。
      • 命令 install-na 只匹配 name.arch。
      • 命令 install-nevra 只匹配 name-[epoch:]version-release.arch
    指定依赖包

    在命令描述中的 意味着该命令在提供指定的 spec 的包上操作。这可以是显式提供的,也可以是隐式提供的(例如,包名)或者文件的提供的。该选择是大小写敏感的和支持通配符。

    指定组

    允许用户选择在(环境)组上进行特定的操作。这是以大小写敏感的字符串(支持通配符字符)与组id、规范名称和如果可能,名称转换成当前的 LC_MESSAGES进行匹配。

    包过滤

    包过滤选项会从可用的包集中过滤掉包,使它们对 dnf 命令不可见。它们不能用在事务中。可以使用 Exclude 过滤或 Modular 过滤选项来过滤包。

    • 排除过滤

      排除过滤是用户或 dnf 插件使用的一种机制,以修改可用包的集合。排除过滤可以通过在配置文件中的 includepkgs 或 excludepkgs 来修改。命令行上的 --disableexcludes 选项用于覆盖配置文件中的排除。另外,用户配置的排除、插件可以扩展排除包集。想要从 dnf 插件的排除,您可以使用 --disableplugin 命令行选项。

      要禁用所有排除,例如安装命令,可以使用以下命令行选项组合:

      dnf --disableexcludes=all --disableplugin="*" install bash
      
      • 1
    • 模块过滤

      对于模块过滤如何操作,请参考模块文档。

  • 相关阅读:
    6-1应用层-网络应用模型
    shell脚本学习06(小滴课堂)
    (附源码)springboot校园兼职系统 毕业设计 463450
    6.13 - 特殊含义的IP地址
    找不到实时聊天软件?给你推荐电商企业都在用的!
    [Linux嵌入式开发]Linux常用命令
    新人学习笔记之(注释和关键字)
    音视频封装格式
    【Jquery】-------JS实现关键字检索html内容,符合关键字的匹配项,进行标注背景色,可进行上一个,下一个切换定位
    [免费专栏] ATTACK安全之车机(Android)设备中监控命令执行的一些想法【概念篇】
  • 原文地址:https://blog.csdn.net/qq_39785418/article/details/127942091