在基于 Debian 的系统(包括 Ubuntu)上,如何在不实际开始下载的情况下判断软件包将从哪个存储库下载?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
答案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
无法显示源存储库的错误报告,但目前看来该功能仍在愿望清单中。
答案3
我很奇怪为什么没人提到aptitude
。我一直在用它。
资质是:
许多基于 Debian 的发行版都默认附带此软件。可以通过 将其安装到其他发行版(例如 Ubuntu)
sudo apt install aptitude
。不需要管理权限(至少对于下面的命令)。
确实有一个不错的
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
不具备超级牛力量。
每串前面的字母表示包裹的状态,我已安装,页被清除(或从未安装),稳定的,测试和不稳定是存储库定义,最后的数字是引脚优先级。
关于最新版本的 aptitude,有一个值得一提的警告:默认情况下,它会显示所有软件包,其中包括您搜索的名称,因此请使用正则表达式使用一些魔法来通过严格的名称进行搜索,例如aptitude versions ^kde-workspace$
。
答案4
遗憾的是,这些信息在软件包安装过程中不会被记录。你可以猜测一下存储库是否仍在源列表中,以及存储库是否仍有软件包:
grep -l PKG /var/lib/apt/lists/*
apt-cache showpkg
显示来自存储库数据库的数据(而不是已安装的数据),因此它是来自 grep 的相同信息的另一种形式。
甚至突触也无法(在 Origin 屏幕中)判断您是否禁用了存储库并进行更新。