如何列出所有从 PPA 安装的软件包?

如何列出所有从 PPA 安装的软件包?

我在系统上安装了许多来自多个 PPA 的软件包。我想列出所有从启动板 PPA(而不是存储库)安装的软件包。

通过命令行可以实现吗?

答案1

以下命令返回包名称及其 ppa(如果从 ppa 安装):

apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g;  @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'

细节:

  • dpkg --get-selections仅提供已安装的软件包grep -v deinstall$
  • awk '{ print $1 }'仅返回包名称
  • perl -e '@a = <>; $a=join("", @a)'连接所有返回的行apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g;在每个包部分之间添加换行符
  • @packages = split("\n\n", $a);是一个包含所有包信息的 perl 数组,每个项目一个包。
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}是一个循环,如果在策略中发现优先级为 500 的 ppa,则打印包和 ppa。

答案2

答案3

可以使用以下方法检查已安装软件包的来源apt-cache,例如

$ apt-cache policy oracle-java7-installer

oracle-java7-installer:
  Installed: 7u51-0~webupd8~7
  Candidate: 7u51-0~webupd8~7
  Version table:
 *** 7u51-0~webupd8~7 0
        500 http://ppa.launchpad.net/webupd8team/java/ubuntu/ precise/main i386 Packages
        100 /var/lib/dpkg/status

的输出apt-cache policy <package_name>包含源。

可以使用以下脚本获取从 PPA 安装的包列表。

#!/bin/bash
echo "List of packages which are not installed from Ubuntu repository"
for i in `dpkg -l | grep "^ii" | awk '{print $2}'`
do
    j=`apt-cache policy "$i" | grep "ppa.launchpad.net"` 
    if [ $? -eq 0 ]; then
        echo "$i"
        #echo "$i $j"
    fi
done

答案4

安装突触。然后,您可以按“来源”或任何其他自定义过滤器浏览包。

相关内容