我想列出该表格的所有包
$ dpkg -l libav\*
但除了这个输出之外,我还想要每个包的起源/来源(我不确定首选术语)。如果该包与任何来源均不对应,则应显示未知或类似。在我的脑海中,最有希望的方法是使用dctrl工具,但我不知道该怎么做。作为背景,我试图调试与 ffmpeg 不匹配的库。看Debian bug 报告 - ffmpeg:从不稳定版本向后移植 4:0.6.1-5 会产生警告:库配置不匹配。错误报告不再是问题,但我仍然对这个问题感兴趣。
只是为了清楚格式,这应该看起来像
ii libavahi-client-dev 0.6.27-2+squeeze1 Development files for the Avahi client library squeeze
ii libavcodec-dev 4:0.6.1-5 Development files for libavcodec unstable
如果同一个包在多个类别中可用,即。在挤压和测试中,然后最低/最老的应使用可用的类别。在这种情况下,请挤压。
答案1
Dpkg 不跟踪此信息。每个文件的来源.deb
并不重要。
Apt 也不跟踪此信息,但它知道您现在可以在哪里获取该软件包,这已经足够了。
作为9000写在评论中,apt-cache policy '^libav'
显示名称与正则表达式匹配的软件包的版本^libav
已安装或可用。输出解析起来并不是特别方便,但这里有一个经过最低限度测试的脚本,它大致提供了您想要的格式:
{ LC_CTYPE=C apt-cache policy '^libav'; echo .; } | perl -l -ne '
if (!/^ /) {
if (defined $version) {print "$package: $version unknown"}
s/: *$//; $package=$_; $installed=1; $version=undef;
}
if (/^ *Installed: *\(none\)$/) {$installed=0}
if ($installed && /^ \*+ +([^ ]+)/) {$version=$1}
if (/^ [^ ]/) {$version=undef}
if ($installed && defined $version && /^ +[0-9]+ +[^ ]+ +([^ \/]+)/) {
print "$package: $version $1";
$version=undef;
}
'
获取您所要求的信息的另一种方法是使用aptitude versions
。同样,下面经过最低限度测试的代码片段大致给出了所需的格式。该模式"^libav" ~i
与已安装且名称与给定正则表达式匹配的包相匹配。
aptitude versions '"^libav" ~i' |
awk -vRS= '{if ($6 !~ /[^0-9]/) {$6="unknown"}
print $3, $2, $5, $6}'
还有一个单独打包的实用程序apt-show-versions
再次,它以大致您所要求的格式提供您想要的信息。
apt-show-versions | grep '^libav'