How do I find out what Debian package a file came from?
There are several utilites in Debian which perform this task; check this page for a description. I'll mention two of them,
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
It's a good idea to update first:
sudo apt-get update
apt-file is for:
apt-cache show apt-file
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
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.
$ 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
/bin/nc appears when you install the package
dpkg -S /bin/nc
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
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
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:~$