我在系统上安装了许多来自多个 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
aptitude
下面的命令显示了 中活动 PPA 的已安装软件包列表sources.list
。aptitude search '?narrow(?installed, ~Oppa)'
~Oppa
表示 Origin 包含 'ppa'参考: aptitude - 搜索词参考
如果 PPA 存储库被删除,软件包将变得过时。或者使用此过滤器
~Oppa | -o
参考:
答案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
安装突触。然后,您可以按“来源”或任何其他自定义过滤器浏览包。