列出 Debian 中的软件包,类似于“dpkg -l”,但包括软件包 origin/source

列出 Debian 中的软件包,类似于“dpkg -l”,但包括软件包 origin/source

我想列出该表格的所有包

$ 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'

相关内容