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


23

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

通过命令行可以做到吗?



不,它与众不同。
Avinash Raj

1
Y PPA Manager不是命令行实用程序,但非常有用。列出,安装和删除PPA中的软件包。
2014年

Answers:


23

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

答案/代码短,执行时间短。
RaduRădeanu2014年

@Avinash:您测试了我的答案吗?如果可以,请考虑接受吗?谢谢。
Sylvain Pineau


3

按照这个答案这篇文章,您可以使用以下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'

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

1
如果选择其他镜像,则无法使用。例如,我有gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

在这种情况下google-chrome-stable,不是从PPA安装的;它只有一个单独的存储库。
RaduRădeanu2014年

好的,我看到了。但是您带来了一个非常糟糕的示例,该示例可能会使新手用户认为,如果软件包不是来自Ubuntu存储库,则该软件包来自PPA。OP的问题与PPA有关。
RaduRădeanu2014年

@RaduRădeanu我得到了你的观点并编辑了我的帖子。你是绝对正确的。
souravc 2014年

现在更好了,即使执行时间存在问题,也确实如此。
RaduRădeanu2014年

1

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.