I'm in search for something analog to this question: Zypper: How do I display all packages from a certain repository?
Since I'm on Ubuntu, I need an aptitude based solution: How can I get a list of installed packages from a certain repository?
Super User is a question and answer site for computer enthusiasts and power users. It only takes a minute to sign up.
Sign up to join this communityI'm in search for something analog to this question: Zypper: How do I display all packages from a certain repository?
Since I'm on Ubuntu, I need an aptitude based solution: How can I get a list of installed packages from a certain repository?
Using aptitude, in order to look for installed packages outside of the stable branch, you can use:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
To see versions as well as package-names (and instead of descriptions) you can use the command with the format option (-F
for short), as follows.
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
For more formats, please take a look at the manpage (here's documentation with avail. options).
That works for example, in Debian if you installed packages outside Squeeze (by runing, for example, apt-get install -t sid package-name
.
You can look where an installed package comes from via apt-cache policy
, usage is as follows:
apt-cache policy <package-name>
For example, my python-numpy package renders the following output:
$ LANG=C apt-cache policy python-numpy
python-numpy:
Installed: 1:1.6.2-1
Candidate: 1:1.6.2-1.2
Version table:
1:1.7.0-1 0
1 http://ftp.es.debian.org/debian/ experimental/main amd64 Packages
1:1.6.2-1.2 0
500 http://ftp.es.debian.org/debian/ sid/main amd64 Packages
*** 1:1.6.2-1 0
100 /var/lib/dpkg/status
1:1.4.1-5 0
990 http://ftp.es.debian.org/debian/ squeeze/main amd64 Packages
990 http://ftp.de.debian.org/debian/ squeeze/main amd64 Packages
That means that I'm one version behind current sid/main's branch, so I have an old-sid version installed. I see I don't have the stable one because it is yet 1.4.1-5
, and I'm currently at 1.6.2-1
.
At time of submittal this package was already updated : )
?any-version()
, because ~narrow(pat1, pat2)
is the same as ?any-version(pat1 pat2)
and it supports ?any-version(pat1 pat2 pat3)
without looking stupid.
Mar 15, 2014 at 18:04
After reading info page of aptitude and a dozen of attempts, I finally got this :
aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
or (equivalent):
aptitude search '~S ~i (!~Atesting ~Aunstable)'
It will search packages installed from unstable archives of any repository; You have to filter out packages from your default archive (testing in above example).
If you want to filter packages installed from www.debian-multimedia.org/unstable
:
aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))'
Edit:
"Archive", "origin" etc. are deducted from the Release
file of the repository, but unfortunately, not all tools can look at all those lines and they use different syntax for them. You can find those files at /var/lib/apt/lists/*Release
, or just type apt-cache policy
to get an overview. apt-cache
changed its output format - later versions use apt_preferences
style.
Suite:
or Archive:
(old name!)
?archive(___)
or ~A___
%t
release a=___
natty-backports
, trusty-security
, stable
Origin:
?origin(___)
or ~O___
release o=___
Canonical
, Google, Inc.
, LP-PPA-dockbar-main
, Ubuntu
Examine the origin tag (such as o=Debian) for each of your current repositories:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
Then search for packages from (or not from) a particular origin:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
This is not suitable for a security audit because it relies on each repository to provide its own origin information, but it might be helpful for troubleshooting the origin of packages that are present in multiple repositories.
aptitude search
patterns are not good. – They select like this “list packages where one version is installed, and any other version exists in Debian” or “some version installed, and at least one version of that package available on non-Debian”. – What we look for is “the version installed is from Debian (or not)”. This has to be done with ?narrow()
or ?any-version()
.
Jan 26, 2014 at 5:09
nemo-fileroller
from linuxmint
, but it exists in Debian
, too. So it appears in the list, because it's installed and exists somewhere from Debian.
For completeness: On Ubuntu systems you can use Synaptic for this task, too. In the left column you can filter packages by their origin.
I've found this :
aptitude search "?origin (<repository>) ?installed"
You can also find a list of search terms supported by "aptitude search" here.
sudo
? It seems to me that this also works without running it as root.
Dec 4, 2010 at 17:15
First, find the appropriate file(s) for the repository of interest in /var/lib/apt/lists. It should be possible to do this programmatically, but I haven't needed to do so.
Using google chrome as an example, try this:
SEARCH_PATTERN=dl.google.com_linux_chrome # adjust to suit your needs
for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
then
echo ${PKG}
fi
done
and I get the output:
google-chrome-stable
dpkg -s returns 0 if the package is installed and nonzero otherwise. For future reference purposes, the output of
grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages
was
Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
The other answers are actually incorrect, because the parameter to ?archive()
is a regular expression. So ?archive(stable)
matches both stable
and unstable
. To exclude just stable
you need to anchor the regex pattern:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
To exclude multiple repositories:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
Also note that some packages belong to multiple repositories, e.g. xenial-security,xenial-updates
. ?archive()
evaluates the regex pattern against each repository individually, so ?archive("^xenial-updates$")
will match any packages belonging to xenial-updates
, even if it belongs to other repositories too.
I recently came across this after experiments with cinnamon from Uma on Sid:
aptitude search "?maintainer([Ll]inux ?[Mm]int)?installed?origin(linuxmint)"
because "origin" only gave me also packages installed but not the version from Mint Repos.