A command line to find which RPM packages are in use by the system at
this very moment. This can be useful if you are in the process of
determining which packages to remove from a system that has a lot of
unnecessary software installed, but you're also running nonstandard
software such as the Sun JRE so you can't be sure that RPM's dependency
tracking is enough.
To do this, we look at all libraries currently mapped in place by all running processes, as well as the file each process is executing, and then look at which RPMs those files belong to.
You can omit the
This has only been tested on Red Hat Enterprise Linux 5. If you don't have
Note that this will only catch dependencies that are memory mapped, such as system libraries. It won't catch files that are only read occasionally or which aren't memory mapped.
To do this, we look at all libraries currently mapped in place by all running processes, as well as the file each process is executing, and then look at which RPMs those files belong to.
awk '{print $NF}' /proc/*/maps \
| sort - <(for A in /proc/*/exe; do readlink $A; done) \
| uniq \
| grep / \
| while read FILE; do rpm -q --queryformat='%{NAME}\n' -f $FILE 2>/dev/null; done \
| grep -v 'is not owned' \
| sort \
| uniq
You can omit the
--queryformat='%{NAME}\n'
part if you want the RPM version numbers to be included, in case you have multiple versions of some packages installed.This has only been tested on Red Hat Enterprise Linux 5. If you don't have
readlink
, you could try ls -l $A | awk '{print $NF}'
instead.Note that this will only catch dependencies that are memory mapped, such as system libraries. It won't catch files that are only read occasionally or which aren't memory mapped.