How do I list both programs that came with my distribution and those I manually installed?
-
8Which 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
-
2No, there isn't, as the package managers differ. – Chris Down Sep 18 '11 at 20:19
4 Answers
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 listoreix -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:
#!/bin/bash
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##*/}"
done
done
- 122,090
- 24
- 265
- 262
-
4
-
-
I am using an Aptitude-based distributions. What should I add to this command to know how much space this program takes up? – LandonZeKepitelOfGreytBritn Mar 03 '17 at 12:05
-
2
-
1
-
-
1
-
1@Kusalananda Huh? At no point in this answer does it say that BSDs are Linux distributions, but they are *distributions*. That's literally what the "D" in BSD stands for. – Chris Down May 14 '18 at 13:33
-
2It would be better to distinguish between package managers instead of "distributions". NetBSD's pkgsrc runs on any Linux, and some package managers can be used on multiple Uinces. – Kusalananda May 14 '18 at 13:43
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.
- 38,754
- 9
- 94
- 102
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
done
done
It didn't make a difference for me.
- 10,267
- 3
- 35
- 58
-
2Note that this will also potentially list various non-programs as well (subdirectories of directories in `$PATH`, etc). – Chris Down Mar 25 '12 at 03:03
-
1I 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 05:42
-
1awesome! I wasn't able to know version of Linux ( long story - but nothing criminal ) but this code saved my day :) – obenjiro Jan 12 '15 at 18:15
All the other answers (so far) deal with packages and binaries. If you mean "desktop applications", the ones that appear in your start menu, you can try:
ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -
More solutions in another question.
- 681
- 2
- 8
- 16
-
That's not true. My answer doesn't list packages at all and not only binaries but shell scripts too. – user unknown May 16 '22 at 02:12