How to list all the packages which are installed from PPAs?
Solution 1
The following command returns the package name and its ppa (if installed from a 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}'
Details:
-
dpkg --get-selections
gives only the installed packages aftergrep -v deinstall$
-
awk '{ print $1 }'
returns only the package name -
perl -e '@a = <>; $a=join("", @a)'
concatenates all the lines returned byapt-cache policy
-
$a =~ s/\n(\S)/\n\n$1/g;
adds a newline between each package section -
@packages = split("\n\n", $a);
is a perl array containing all the packages infos, one package per item. -
foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}
is a loop where the package and the ppa are printed if a ppa with prio 500 is found in the policy.
Solution 2
-
aptitude
command below shows list of installed packages for active PPA's insources.list
.aptitude search '?narrow(?installed, ~Oppa)'
~Oppa
means Origin contains 'ppa'Reference: aptitude - Search term reference
-
In case PPA repository was removed, packages become obsolete. Alternatively use this filter instead
~Oppa | -o
reference:
Solution 3
The source of an installed package can be checked using apt-cache
, for example
$ 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
The output of apt-cache policy <package_name>
contains the source.
One can use the following script to obtain the list of packages installed from 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
Solution 4
In accordance with this answer and this post, you can get a list of all packages from all the PPAs installed on your system using the following bash code:
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
And in accordance with this answer, you can get a list of all installed packages in your system using:
dpkg --get-selections | grep -v deinstall | cut -f1
Now, let's join these two ideas to get a list of all the packages which are installed from PPAs:
(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'
Solution 5
Install synaptic. You can then browse packages by "origin" or even any other custom filter.
Related videos on Youtube
Avinash Raj
Updated on September 18, 2022Comments
-
Avinash Raj over 1 year
I installed many packages from many PPAs on my system. I want to list all the installed packages which are installed from launchpad PPAs, not repositories.
Is this possible through command-line?
-
Avinash Raj about 10 yearsNo.its a different one.
-
Jos about 10 yearsNot a command line utility, but very useful is the Y PPA Manager. Lists, installs, and removes packages from PPAs.
-
Ciro Santilli OurBigBook.com over 8 yearsFrom a given PPA: askubuntu.com/questions/5976/…
-
-
Sylvain Pineau about 10 yearsIt doesn’t work if you selected a different mirror. For instance I have
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
-
Radu Rădeanu about 10 yearsIn this case
google-chrome-stable
is not installed from a PPA; it has just a separate repository. -
Radu Rădeanu about 10 yearsOk, I saw that. But you came with a really bad example which can make novice users to think that if a package is not from Ubuntu repositories, then the package is from a PPA. The OP's question is about PPAs.
-
sourav c. about 10 years@RaduRădeanu I got your points and Edited my post. you are absolutely correct.
-
Radu Rădeanu about 10 yearsShort answer/code, looong time for execution.
-
Radu Rădeanu about 10 yearsBetter now, even if there is a problem with the time for execution which is realy looong.
-
Ravexina about 7 yearsAnother Cool Capability of
aptitude
+1 -
SebMa over 4 years@user.dz On my ubuntu,
aptitude
says :E: Match pattern ends unexpectedly (expected ')').
-
user.dz over 4 years@SebMa , I have just tried it in the online LXD container (Ubuntu 18.04.4 LTS) from linuxcontainers.org/lxd/try-it , it is working fine. Which shell you are using? and please confirm that you are using the same shell string limiters, as in
'string'
. -
SebMa over 4 years@user.dz My mistake, I had an
aptitude
shell function which has a bug. Your command works on my system now. Thanks a lot :)