问题描述
在包括Ubuntu在内的基于Debian的系统上,如何能够在不实际开始下载的情况下确定要从哪个存储库下载软件包? aptitude show
和apt-cache info
将显示该部分(例如,元软件包,基础,图形),但不显示软件包所属的存储库(例如http://ppa.launchpad.net/mactel-support/ppa/ubuntu或http://us.archive.ubuntu.com/ubuntu/)。
安装软件包时,实际的存储库会在下载过程中出现(它会打印在apt和类似程序的“从…下载中”输出中),但是如何才能在包含软件包(或特定软件包)的存储库上获取信息版本的软件包)而不先下载并安装?
此外,如何确定已经安装的软件包的源存储库?
最佳回答
我运行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
次佳回答
啊哈!显然,正确的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
无法显示源存储库,但目前看来该功能仍在愿望清单上。
第三种回答
这对我有用(显示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
如果有多个版本,则可以应用其他过滤来检查版本等。
第四种回答
我不知道为什么没人提到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 priority。
关于aptitude的最新版本的一个警告在这里值得一提:默认情况下,它会显示所有软件包,其中包括您要搜索的名称,因此请使用regex魔术一点点来搜索严格名称,例如aptitude versions ^kde-workspace$
。
第五种回答
遗憾的是,在软件包安装期间未记录此信息。如果存储库仍在源列表中,并且存储库仍具有软件包,则可以做出合理的猜测:
grep -l PKG /var/lib/apt/lists/*
apt-cache showpkg
正在显示来自存储库数据库的数据(不是已安装的数据),因此它是来自grep的相同信息的另一种形式。
甚至突触也无法告诉您(在“原始”屏幕中)是否禁用了存储库并更新。