可以使用 dnf list --installed | grep "@"来判断 RPM 包的来源。对于 dnf5,其使用 dnf list --installed 指令的时候会在指令输出的第三列附上包的来源。

并不来自于镜像源的包,其来源会被标注为 @commandline

以下是示例:

❯ dnf list --installed | grep "@"
CherryStudio.x86_64                                  1.5.7-1                                       @commandline
brother-udev-rule-type1.noarch                       1.0.2-0                                       @commandline
brscan-skey.x86_64                                   0.3.2-0                                       @commandline
brscan4.x86_64                                       0.4.11-1                                      @commandline
dcpl2550dwpdrv.i386                                  4.0.0-1                                       @commandline
kmod-nvidia-6.14.0-63.fc42.x86_64.x86_64             3:580.95.05-1.fc42                            @commandline
kmod-nvidia-6.16.4-200.fc42.x86_64.x86_64            3:580.95.05-1.fc42                            @commandline
kmod-nvidia-6.16.7-200.fc42.x86_64.x86_64            3:580.95.05-1.fc42                            @commandline
linuxqq.x86_64                                       3.2.15_31363-1                                @commandline
upscayl.x86_64                                       2.15.0-1                                      @commandline
zfs-release.noarch                                   2-6.fc41                                      @commandline
zulu-repo.noarch                                     1.0.0-1                                       @commandline

我们可以看到这个指令的输出并不仅限于用户自己安装的包,kmod-nvidia-* 这个包,我认为它来自于 akmod-nvidia,因为我从来没有手动装过 NVIDIA 驱动。NVIDIA 驱动我一直都是使用 RPM Fusion 维护的 akmod-nvidia 这个包。

我们注意到 akmod-nvidiakmod-nvidia-*SOURCERPM 字段都是 nvidia-kmod-580.95.05-1.fc42.src.rpm,我没有找到 akmod-nvidia 的打包代码,不过应该就是 akmod-nvidia 安装了 kmod-nvidia-*。(这是一个草率的推断)。

总之这个指令很有用,可以帮助我们在系统更新的时候筛查来自于我们手动安装的包,尤其对不习惯使用镜像源,大量手动安装软件包的用户来说重要。然而我看网上介绍的人不太多。