How do I find out which package owns a file?

by A Student at a University   Last Updated August 30, 2015 00:00 AM

How do I find out what Debian package a file came from?

Answers 5

user@host:~$ dpkg-query -S /bin/bash 
bash: /bin/bash

Where bash is the package name.

A Student at a University
A Student at a University
August 23, 2010 10:25 AM

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

Also you can search packages online using 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, or 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.

August 23, 2010 10:31 AM

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...

Gert van den Berg
Gert van den Berg
March 26, 2013 17:31 PM

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

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
Philip Kearns
Philip Kearns
May 28, 2015 15:10 PM

Installation generated files will not be found by dpkg -S, as mentioned at:

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)"
Ciro Santilli 烏坎事件2016六四事件 法轮功
Ciro Santilli 烏坎事件2016六四事件 法轮功
August 29, 2015 21:12 PM

Related Questions

Installing libsdl2-dev on Kali 3.18.0 amd64

Updated June 05, 2015 22:00 PM

Install pgAgent 3.4.1 on Debian Jessie

Updated August 29, 2017 10:01 AM