在包括Ubuntu在内的基于Debian的系统上,如何能够在不实际开始下载的情况下确定要从哪个存储库下载软件包? aptitude showapt-cache info将显示该部分(例如,元软件包,基础,图形),但不显示软件包所属的存储库(例如,http://ppa.launchpad.net/mactel-support/ppa/ubuntu或http:/ /us.archive.ubuntu.com/ubuntu/)。

安装软件包时,实际的存储库会在下载过程中显示(它会打印到apt输出的“从...下载中”)和类似的程序),但又如何在不先下载和安装的情况下获取包含该程序包(或程序包的特定版本)的信息库中的信息?

另外,如何确定源信息库?对于已经安装的软件包?

评论

我发现这是Apt的不足之一;在软件包安装程序工具中很难分辨哪个存储库提供了某个软件包。

#1 楼

我运行apt-cache policy <package name>

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages


这意味着存在三个wajig软件包:


已安装的一个软件包(/var/lib/dpkg/status
可以从本地存储库(file:/home/wena/.repo_bin/)获得的一个
可以从远程存储库(ftp://ftp.is.co.za/debian)获得的一个,该版本也具有与本地存储库中相同的版本(2.0.47)


此外,apt-cache madison <package name>将以表格形式显示类似信息。

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources


评论


但是它没有显示安装的软件包的来源,对吗?

– Adob​​e
2012年4月27日上午11:16

@Adobe就我而言,任何存储库都无法提供2.1版本。它是本地建造的。

– tshepang
2012年4月29日在9:26

什么是已安装软件包的标志? ***或/ var / lib / dpkg / status?

– SuB
2013年9月19日在17:39

也许两者都有?不确定。

– tshepang
2013年9月19日在20:24

如果未安装该软件包,则apt-cache策略会显示:已安装:(无)。

– John McGehee
18年7月19日在20:16



#2 楼

啊哈!显然,正确的apt命令不是apt-cache info,而是apt-cache showpkg

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 


File:行在/var/lib/apt/lists/之后提供了存储库信息。

有一个错误报告,aptitude无法显示源存储库,但目前看来该功能仍在愿望清单中。

评论


八年后,这种智能功能仍在关注中,我不知道为什么这个答案(apt-cache showpkg)没有被标记为正确的答案。

–Csaba Toth
18 Mar 24 '18在20:20



#3 楼

我不知道为什么没有人提到aptitude。我一直使用它。
默认值为:


默认情况下,许多基于Debian的发行版均已关闭。可以通过sudo apt install aptitude安装到其他(例如Ubuntu)上。


不需要管理特权(至少对于以下命令而言)。


有一个不错的ncurses GUI(但是大部分时间没有它)。


提供了非常漂亮的输出。要显示软件包的版本,请使用aptitude versions命令:
 me@wheezy:~$ aptitude versions kde-standard
 Package kde-standard:                        
 i A 5:77+deb7u1     stable              500
 p A 5:84            testing,unstable    130



没有超级母牛的力量。


前面的字母每个字符串中的表示软件包的状态,i已安装且p已清除(或从不安装),稳定,测试和不稳定是存储库定义,最后的数字是pin优先级。
关于最新版本的警告在这里值得一提的功能:默认情况下,它会显示所有软件包,其中包括您要搜索的名称,因此请使用正则表达式魔术一点点来搜索严格的名称,例如aptitude versions ^kde-workspace$

评论


好的命令,但未按要求列出存储库。

– bjhend
17年3月15日在11:56

实际上确实如此。

–神经递质
17 Mar 15 '14:23



你不明白可以安装其他PPA。重要的是要知道软件包是否来自于此类PPA。事实上,这就是我现在要设法解决的问题-如果是这样,我可以删除PPA,以减少出现问题的风险。

– reinierpost
17年5月25日在17:46

是的,您是对的,使用版本,您可以简单地检查给定软件包的apt pinning值,而不是相关的存储库。但是,如果您知道所有存储库及其固定方式,它仍然很有用。

–神经递质
17年4月4日,11:10



#4 楼

这对我有用(显示2vcard软件包的位置):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb


如果有多个版本,则可以应用其他过滤器检查版本等。

评论


务实。不过,我很惊讶无法通过dpkg的任何前端访问此信息。

–gotgenes
2010-2-10在0:27

@got可用:superuser.com/questions/106794/…

– tshepang
2011年1月23日下午7:41

#5 楼

遗憾的是,在软件包安装期间未记录此信息。如果存储库仍在源列表中,并且存储库仍具有软件包,则可以做出合理的猜测:

grep -l PKG /var/lib/apt/lists/*


apt-cache showpkg显示的是存储库数据库中的数据(不是

即使突触也无法告知(在“原始”屏幕上)是否禁用了存储库并进行了更新。

评论


之前(十年后),以我为例,我试图告诉是否通过repo或deb文件安装了软件包,这种方法(显然)不会考虑这种情况;但是,在这两种情况下,简单的命令apt-cache policy {package}都能按预期工作,以标识软件包的来源。 superuser.com/a/236605/73961

–迈克尔
20-2-1在5:27

#6 楼

或者,在Sunny的启发下,您可以尝试:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print  }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print  }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done