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

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

这可以通过命令行吗?

以下命令返回包名称及其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)' 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}是一个循环,如果在策略中找到包含prio 500的ppa,则打印包和ppa。

下面的命令显示了sources.list中活动PPA的已安装软件包

 aptitude search '?narrow(?installed, ~Oppa)' 

参考: aptitude – 搜索术语参考

根据这个答案和这篇文章 ,您可以使用以下bash代码获取系统上安装的所有PPA的所有包的列表:

 for APT in $(find /etc/apt/ -name \*.list); do grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do USER=$(echo $ENTRY | cut -d/ -f4) PPA=$(echo $ENTRY | cut -d/ -f5) awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages done done 

根据此答案 ,您可以使用以下命令获取系统中所有已安装软件包的列表:

 dpkg --get-selections | grep -v deinstall | cut -f1 

现在,让我们加入这两个想法,以获得从PPA安装的所有软件包的列表:

 (for APT in $(find /etc/apt/ -name \*.list); do grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do USER=$(echo $ENTRY | cut -d/ -f4) PPA=$(echo $ENTRY | cut -d/ -f5) awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages done done; dpkg --get-selections | grep -v deinstall | cut -f1) | sort | awk 'dup[$0]++ == 1' 

例如,可以使用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 的输出包含源。

可以使用以下脚本来获取从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