Discover to which package a file belongs to
Related Packages and Files
Sometimes you want to know the related package of a file, before installation, or when it is already there. This is of great help during system hardening or general system cleanups. In this article we have a look at several ways to determine the relationships between files and the package they belong to. We have gathered this information for multiple Linux distributions.
CentOS, Fedora, RHEL
Show files for RPM packages
rpm -qlp /path/to/file.rpm
Show files for packages on the repository
If you use dnf, then you can query files from the packages that are in your repositories. The package itself does not have to be installed.
dnf repoquery -q -l packagename
Use the -q option with dnf to show only the relevant output.
Show files per installed package
To show what files are in a package, use the rpm
command.
rpm -ql package
If you have the file name, you can turn this around and find the related package.
rpm -qf /bin/ps
The output will provide the package and its version.
To just see the package name, use the –queryformat option.
rpm -qf /bin/ps --queryformat '%{NAME}'
With yum you can do a similar request to see the related package.
yum whatprovides /bin/ps
And with DNF there is the provides argument.
dnf provides /bin/ps
This will give you possibly multiple hits, as a file can be part of packages from different repositories.
This data is less easy to parse due to the different types of lines.
Debian and Ubuntu
Discover related package
If you want to find the related package of a binary (or file), we first have to know the full path. If you know the binary, then use the which
command to discover where it is stored. Using the find
command is another option, but may be less efficient. With the dpkg
package management tool we can find the related package.
dpkg -S /usr/sbin/atd | awk -F: ‘{print $1}’
Without the awk
command, the output will look like this.
Show files installed by package
If you already know the package name, you can quickly look up the files that are installed by a Debian package.
dpkg -L package
Let’s do the same for the at package and see what it exactly installs (and where).
Gentoo
The first option is using equery, which is part of the package app-portage/gentoolkit.
equery files <installed package>
The package itself should be installed.
Next alternative is qlist, which is part of app-portage/portage-utils
qlist <installed package>
OpenSUSE
Systems running the distributions from SuSE can use the zypper tool to find the link between a file and a package.
Show related package
zypper what-provides /bin/ps
Got more useful commands to share? Let it know in the comments and we add them to the article.
2:08 PM
Example for Arch Linux:
$ pacman -Qo /usr/bin/ls
/usr/bin/ls is owned by coreutils 8.26-1
9:35 PM
Thanks for sharing Frank
3:18 PM
Hey, place a like button somewhere in your blog pages!.
8:38 AM
Those like buttons can leak information to Facebook and Twitter, so that is why there are none :)