我想列出表单的所有包
$ dpkg -l libav\*
Run Code Online (Sandbox Code Playgroud)
但除了这个输出之外,我想要每个包的来源/来源(我不确定首选术语)。如果包裹不符合任何来源,则应显示未知或类似。在我的脑海中,最有前途的方法是使用dctrl-tools,但我不确定如何去做。作为背景,我试图用 ffmpeg 调试库不匹配。请参阅Debian 错误报告 - ffmpeg: backport of 4:0.6.1-5 from unstable 产生 WARNING: library configuration mismatch。错误报告不再是问题,但我仍然对这个问题感兴趣。
只是为了清楚格式,这应该看起来像
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
Run Code Online (Sandbox Code Playgroud)
如果同一个包在多个类别中可用,即。在挤压和测试中,应使用可用的最低/最旧类别。在这种情况下,挤压。
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;
}
'
Run Code Online (Sandbox Code Playgroud)
获取您要求的信息的另一种方法是使用aptitude versions
. 同样,下面经过最少测试的代码段大致提供了所需的格式。该模式"^libav" ~i
匹配已安装且名称与给定正则表达式匹配的包。
aptitude versions '"^libav" ~i' |
awk -vRS= '{if ($6 !~ /[^0-9]/) {$6="unknown"}
print $3, $2, $5, $6}'
Run Code Online (Sandbox Code Playgroud)
还有一个单独的包实用程序apt-show-versions
,它再次以您要求的大致格式提供您想要的信息。
apt-show-versions | grep '^libav'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2228 次 |
最近记录: |