aptitude show
和apt-cache info
将显示该部分(例如,元软件包,基础,图形),但不显示软件包所属的存储库(例如,http://ppa.launchpad.net/mactel-support/ppa/ubuntu或http:/ /us.archive.ubuntu.com/ubuntu/)。安装软件包时,实际的存储库会在下载过程中显示(它会打印到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
评论
但是它没有显示安装的软件包的来源,对吗?
– Adobe
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
评论
我发现这是Apt的不足之一;在软件包安装程序工具中很难分辨哪个存储库提供了某个软件包。