How do I find out which package owns a file?
How do I find out what Debian package a file came from?
To do this without installing any extra packages, run
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
where bash is the package name.
Alternatively, there are several utilites in Debian which perform this task; check this page for a description. I'll mention two of them, apt-file
and dlocate
.
apt-file
searches its internal cache, thus allowing you to not install all the packages you want to search. Below you will find more detailed guide.
dlocate
is a fast alternative to dpkg -L
(the command that lists package contents), and as so, it searches only installed packages. Search is performed by dlocate -S file.name
.
Also you can search packages online using packages.debian.org server (the Search the contents of packages section).
Installing and using apt-file
It's a good idea to update first:
sudo apt-get update
See what apt-file
is for:
apt-cache show apt-file
Install it:
sudo apt-get install apt-file
Read data from repositories (this works also without sudo
but creates user's cache then; with sudo
the cache is system-wide):
sudo apt-file update
Perform search. In this example we want to know in which package xrandr
executable is:
apt-file search xrandr
It lists many packages with unxrandr
, lxrandr.mo
or source_lxrandr.py
. Not very useful in our case. More clever search:
apt-file search -x /xrandr$
($
denotes end of line). Example output:
bash-completion: /usr/share/bash-completion/completions/xrandr
x11-xserver-utils: /usr/bin/xrandr
The first result doesn't look like executable, the second one does. We can investigate further. Run:
apt-cache show x11-xserver-utils
Bingo! This is the package.
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Where bash is the package name.
Another alternative:
$ dpkg -S /bin/bash
bash: /bin/bash
On my Ubuntu at least, both seem to be in the dpkg
package, so no real advantage to any specific one...