我在我的系统上安装了许多来自不同PPA的软件包。我想列出所有从launchpad 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。aptitude
命令可以显示 sources.list
中活跃 PPA 的已安装软件包列表。
aptitude search '?narrow(?installed, ~Oppa)'
~Oppa
表示 Origin 包含 'ppa'
如果 PPA 存储库被删除,软件包将变为过时。或者使用此筛选器代替 ~Oppa | -o
参考:
aptitude
的另一个酷炫功能 +1 - Ravexinaaptitude
显示:E: 匹配模式意外结束(预期为')')。
- SebMa'string'
。 - user.dzaptitude
shell 函数。你的命令现在在我的系统上可以运行了。非常感谢 :) - SebMaapt-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>
的输出包含源代码。
可以使用以下脚本获取从 PPAs 安装的软件包列表。
#!/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
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
。 - Sylvain Pineaugoogle-chrome-stable
并不是通过PPA安装的;它只有一个独立的软件源。 - Radu Rădeanufor 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
(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 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) {printf "%-40s %s\n", $2, $1 if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}' \
| sort \
| uniq -c -w 40
5 alexlarsson/flatpak/ubuntu flatpak
147 bleedingedge/focal-bleed/ubuntu bzip2
1 justinabrahms/ttf-cascadia-code/ubuntu ttf-cascadia-code
44 libreoffice/ppa/ubuntu fonts-opensymbol
71 savoury1/backports/ubuntu bash
41 savoury1/multimedia/ubuntu dav1d
8 strukturag/libheif/ubuntu aom-tools
12 ubuntugis/ubuntugis-unstable/ubuntu gdal-bin