如何列出从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