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 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.
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:~$