Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm using arch linux.

Is there a way to list optional dependencies of all installed packages? And if yes, can I filter this list to see only the missing (not installed) packages?

share|improve this question
I haven't used Arch, but "dependency" doesn't sound optional (it's not in other distros). – jordanm Oct 28 '12 at 4:27
AFAIK, I don't think you can do that with pacman straight away. But it is very possible to write a small script to do it. Query pacman for list of installed packages. Have Yaourt fetch their PKGBUILDs and read the list of optdeps. The latest version of pacman-git has a commit that states whether the optdeps have already been installed. – darnir Oct 28 '12 at 5:09
@jordanm: As has build dependencies and optional dependencies. Optdeps are required only for certain features of a package. So, unless you are using that feature, you don't really need to bloat your system with a load of dependencies. – darnir Oct 28 '12 at 5:11

You can use expac to query the pacmandatabase.

Something like:

awk 'NF>=2' <(expac "%n %O") > optdeps

will print a list of all the installed packages on your machine and the optdepends for each one (%O)1 to a file called optdeps. You could then sort this against a list of installed optdepends packages.

See man expac for the complete list of options.

1. That is an upper case O, not a zero. Because we can't have a font that distinguished between the two...

share|improve this answer
[poke] We do have such a font now. :) – muru Dec 8 '14 at 18:35

Though I've had to notice that @DarkHeart's solution doesn't really work, it inspired me to make a working one. (no colours, though)

I'm using package-query, a similar tool instead of expac which was suggested by @jasonwryan, because I've had it already installed (it's a dependency of yaourt). It should be trivial to change this to use expac instead.

The listing of all optional dependencies is mostly done by the call to package-query. The first for-loop removes the explanations, so just the package names for the optional dependencies remain; the second for-loop removes the already installed dependencies in its first line before printing the results in the second one.

use strict;
use warnings;

my %deps;
for (`package-query -Q -f'%n %O'`) {
    $deps{ (/^(\S+)/)[0] } = [/(\S+):/g];
my @pkgs = keys %deps;
for my $pkg (@pkgs) {
    my @missing_deps = grep { !($_ ~~ @pkgs) } @{ $deps{$pkg} };
    print "$pkg => @missing_deps\n" if @missing_deps;
share|improve this answer

This is not exactly efficient, but will find what you want (in COLOR!):

pacman -Q > /tmp/paccache
for pkg in $(awk '{print $1}' /tmp/paccache) ; do 
   echo -n "$pkg => "; 
   for dep in $(pacman -Qi $pkg | awk -F: '/Optional Deps/{gsub(/[\<\>=].*/,"");print $NF;}' ) ; do 
       grep -q "$dep" /tmp/paccache && COLOR=32 ; echo -en "\e[1;${COLOR:-31}m${dep}\e[0;m " ; unset COLOR ; 
share|improve this answer
I'm not perfectly sure, but shouldn't that be || instead of && after the grep, and then parentheses around the rest of the line? – Rörd Nov 20 '12 at 21:10
And more importantly, this should probably use the "Optional Deps" section instead of the "Depends On" section of the pacman output. – Rörd Nov 20 '12 at 22:28
For example with xmms2: pacman -Qi xmms2 | sed -n '/^Optional/,$p' | sed '/^Required/q' | head -n -1 | cut -c19- | cut -d: -f1 – i336_ Mar 2 at 2:18

There is a nice utility in the AUR-Repository (aur/pacdep).

pacdep has a lot of options - just one example - find out optional packages for "thunar-archive-plugin":

> pacdep -oppp thunar-archive-plugin
Optional dependencies:    6.16 MiB
  extra/file-roller     3.89 MiB
  extra/kdeutils-ark    1.12 MiB
  community/xarchiver   1.16 MiB

The output above means that none of the optional packages are installed. After installing "xarchiver" the output looks like

Optional dependencies:    6.16 MiB
 local:    1.16 MiB
  xarchiver            1.16 MiB
 sync:     5.01 MiB
  extra/file-roller    3.89 MiB
  extra/kdeutils-ark   1.12 MiB

I found (the first part of) this answer on

share|improve this answer

This should do the trick:

comm -23 <(expac -l"\n" "%o" | sort -u) <(expac -l"\n" "%n\n%S" | sort -u)

First input to comm lists all optional dependencies, second input all installed packages and their 'provide' attributes. Both lists are sorted and contain each element only ones due to sort -u. Then only lines are shown that are contained in the first but not in the second list.

(edited to incorporate @Archemar's suggestion)

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.