(免责声明:我无法提供任何相关资源,因为我从未见过任何实际讨论这些事情的文档。要遵循的信息只是我通过检查,黑匣子实验,偶然发现所能提供的信息)反复试验和简单的旧猜测。此外,公平警告,这太夸张了太长。)
DNF 在上下文中添加一个@表示从中安装了已安装软件包的存储库。如您所述:dnf list
我在系统上从回购@ System,@ fedora(不过也有没有@的软呢帽)和@@ commandline之类的系统上安装了几个软件包。
但是实际上,您永远不会fedora
在安装的列表中看到任何软件包,因为那里的每个软件包都显示一些@ -repo作为其源。(您可以通过运行sudo dnf list installed
和检查来验证;没有至少一个@符号的情况下,没有列出任何存储库。)当您使用来查看软件包的信息时dnf info
,“ From repo:
”字段将显示该存储库名称,而无需使用@
。(因此“ From repo: fedora
”是绝对可能的,并且等效@fedora
于已安装的列表。)
但是,一些回购的命名与@
在前面的迹象。正如JohnKoch在Hawkey来源中发现的那样,“ @ commandline”被定义为“ commandline repo”的“ repo name”。因此,@@commandline
在dnf list
简单地列出表示已安装的软件包From repo: @commandline
,它混淆的被赋予的名称开始有自己的@ -sign回购。
dnf info
在任何已安装的软件包上将显示Repository: @System
,这是另一个@
名为虚拟仓库。似乎@System
是虚拟存储库保存了当前安装的软件包集,而@commandline
虚拟源存储库来自某个软件包从何而来,而该软件包不是来自任何存储库。
的意义@commandline
和@System
,以及它们相互之间的关系,似乎是因为我第一次写这个答案已经改变。在某些方面,它更加一致,并解决了我先前有关@commandline
使用方式的一些反对意见。我再也看不到列出任何来自的已安装软件包@@System
,并且带外安装现在确实会显示出来From repo: @commandline
(@@commandline
在列表上下文中)。dnf info
带外安装的程序包上通常显示以下内容:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : @commandline
如果我做了dnf reinstall remi-release
(因为包是在remi
回购协议),它更改为:
$ dnf info remi-release
Installed Packages
Name : remi-release
---✀---
Repository : @System
From repo : remi
关于源存储库的另一件事:From repo:
字段中列出的存储库始终是当前存储库上下文中存在的存储库。换句话说,软件包的安装源不仅是包含存储库名称的字符串,还包括存储库。已安装的软件包链接到身份系统中存在(或存在)的提供库。
由于大多数存储库都是发行版本,因此在每个新的Fedora版本中都会对其进行重新定义。(例如,“ fedora
”回购成为构成新版本的一组软件包,这与“fedora
与先前版本中存在 ”。)因此,每当进行系统升级时,都会有许多旧的repo身份变得无效。
DNF(或hawkey)用于从不再存在的存储库中释放已安装的软件包@commandline
作为源存储库。我说“用于”是因为(幸好)不再这样做了。来自不再存在的仓库的已安装软件包将不再以@@commandline
/形式显示其源From repo: @commandline
。事实上,dnf info
表明他们不再有任何来源的回购。例如,sitecopy
一个Fedora软件包从那以后就被淘汰了。我从fedora
或updates
repo 7或8版本之前安装了它,但仍然安装了它:
$ dnf info sitecopy
Installed Packages
Name : sitecopy
Version : 0.16.6
Release : 14.fc22
Architecture : x86_64
Size : 373 k
Source : sitecopy-0.16.6-14.fc22.src.rpm
Repository : @System
没有“From repo:
列出 ”。
这确实令人困惑,这意味着dnf list installed
将显示该软件包(以及其他类似软件包),并在其旁边列出@System
(一个@
)。因此,从某种意义上说,我们只是用一种不一致交换了另一种不一致,因为该列不再总是带有@
前缀的源存储库。不过,我更喜欢当前的状况。
脚注
- “ ...显示的内容...”
(有时显示。“可用软件包”不一定会在每次dnf list
运行时都显示:如果软件包的安装版本是最佳可用版本,则将其列在“已安装的软件包”下因此,将其也列在“可用软件包”下将是多余的。使用
--showduplicates
将强制执行“可用软件包”部分,其中包括所有已知实例,无论版本如何(安装或可下载)。
dnf
对此无言以对。假设“ @”表示已安装的软件包,那么“ @@”是否意味着它是从非回购源手动安装的?我真希望有人能澄清一下。