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

How do I list both programs that came with my distribution and those I manually installed?

share|improve this question
Which distribution? Each distribution has different installing tools. – Matteo Sep 18 '11 at 19:43
Hm, I'm interested in Red Hat, Ubuntu, and cygwin. Is there a distribution-free way to list the programs with some command line argument? – InquilineKea Sep 18 '11 at 20:07
No, there isn't, as the package managers differ. – Chris Down Sep 18 '11 at 20:19
up vote 42 down vote accepted

That depends on your distribution.

  • Aptitude-based distributions (Ubuntu, Debian, etc): dpkg -l
  • RPM-based distributions (Fedora, RHEL, etc): rpm -qa
  • pkg*-based distributions (OpenBSD, FreeBSD, etc): pkg_info
  • Portage-based distributions (Gentoo, etc): equery list or eix -I
  • pacman-based distributions (Arch Linux, etc): pacman -Q
  • Cygwin: cygcheck --check-setup --dump-only *
  • Slackware: slapt-get --installed

All of these will list the packages rather than the programs however. If you truly want to list the programs, you probably want to list the executables in your $PATH, which can be done like so using bash's compgen:

compgen -c

Or, if you don't have compgen:

IFS=: read -ra dirs_in_path <<< "$PATH"

for dir in "${dirs_in_path[@]}"; do
    for file in "$dir"/*; do
        [[ -x $file && -f $file ]] && printf '%s\n' "${file##*/}"
share|improve this answer
And for RPM based systems (Red Hat, SuSE, CentOS, etc.): rpm -qa – nos Sep 18 '11 at 21:10
I thought I had listed that one! I guess I deleted it by accident in my draft. Thanks for letting me know. – Chris Down Sep 18 '11 at 21:17
Doesn't Fedora nowadays use dnf. I do not know the exact command. – Tristan T Jun 29 at 18:52

Answering the second part of the question (nothing really to be added to Chris' answer for the first part):

There is generally no way of listing manually installed programs and their components. This is not recorded anywhere if you didn't use a package manager. All you can do is find the binaries in standard locations (like Chris suggested) and in a similar way, guess where some libraries or some manual pages etc. came from. That is why, whenever possible, you should always install programs using your package manager.

share|improve this answer

Programs should be reachable via the PATH, so just list everything in the path:

ls ${PATH//:/ }/

Expect a result of about 3k-4k programs.

To exclude a probable minority of false positives, you may refine the approach:

for d in ${PATH//:/ }/ ; do 
    for f in $d/* ; do  
        test -x $f && test -f $f && echo $f

It didn't make a difference for me.

share|improve this answer
Note that this will also potentially list various non-programs as well (subdirectories of directories in $PATH, etc). – Chris Down Mar 25 '12 at 3:03
I added a test, but it didn't make a difference for me (how useful is a directory in a directory in the path, which isn't itself in the path?). But for cases, where you rely on correctness, it might be useful. – user unknown Mar 25 '12 at 5:42
awesome! I wasn't able to know version of Linux ( long story - but nothing criminal ) but this code saved my day :) – Ai_boy Jan 12 '15 at 18:15

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.