How do I find out what Debian package a file came from?
5 Answers
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.
-
The first link in this answer (debianhelp.co.uk/findfile.htm) seems to be defunct now.– rogpeppeCommented Jan 23, 2018 at 14:33
-
I have edited this answer and added the method using "dpkg-query -S" from superuser.com/a/179354/62940 Commented Aug 26, 2020 at 13:32
user@host:~$ dpkg-query -S /bin/bash
bash: /bin/bash
Where bash is the package name.
-
8
-
1Correct. It's unfortunate that the "accepted answer" gets a green checkmark, which is a mark that also conveys "correct answer". In this case, the accepted answer misses on
dpkg-query -S
AND it sends you down the wrong path of installing optional packages.. Commented Sep 13, 2019 at 18:56 -
I've updated the accepted answer to include this "dpkg-query -S" approach Commented Aug 20, 2020 at 10:56
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...
Installation generated files will not be found by dpkg -S
, as mentioned at: https://askubuntu.com/a/667227/52975
For example, /bin/nc
appears when you install the package netcat-openbsd
.
But upon:
dpkg -S /bin/nc
we get dpkg-query: no path found matching pattern /bin/nc
.
This happens because /bin/nc
is generated by the update-alternatives
call in the postinst script that gets run after installation.
It works like this because another version of /bin/nc
is provided by the netcat-traditional
package.
I don't think there is a general way of finding such generated files. In the specific case of alternative symlinks, we can just follow the link with readlink -f
:
dpkg -S "$(readlink -f /bin/nc)"
Not being familiar with Debian, I was baffled when I tried this:
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/vncviewer
dpkg-query: no path found matching pattern /usr/bin/vncviewer
kearnsp@xubuntuvb:~$
A bit of investigation and I found the package:
kearnsp@xubuntuvb:~$ ls -l /usr/bin/vncviewer
lrwxrwxrwx 1 root root 27 May 28 15:49 /usr/bin/vncviewer -> /etc/alternatives/vncviewer
kearnsp@xubuntuvb:~$ ls -l /etc/alternatives/vncviewer
lrwxrwxrwx 1 root root 20 May 28 15:49 /etc/alternatives/vncviewer -> /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$ dpkg -S /usr/bin/xvnc4viewer
xvnc4viewer: /usr/bin/xvnc4viewer
kearnsp@xubuntuvb:~$