What package does that file belong to?

Posted on 12.01.2010 by Kim N. Lesmer.

On Debian it is easy to find out what package a specific program or file belongs to even if the package isn't installed.

You need to install the utility called apt-file:

# apt-get install apt-file

Remember to always update your apt repositories before installing new programs using the:

# apt-get update

Now, if for example you wanted to find out what package the program fuser belongs to. You can do that using the apt-file utility:

# apt-file search fuser
atfs-dev: /usr/share/man/man3/af_afuser.3.gz
crash-whitepaper: /usr/share/doc/crash-whitepaper/doc/help_pages/fuser.html
fish: /usr/share/fish/completions/fusermount.fish
fuse-utils: /usr/bin/fusermount
fuse-utils: /usr/share/man/man1/fusermount.1.gz
gforge-web-apache: /usr/share/gforge/www/pm/ganttofuser.php
kde-guidance: /usr/share/apps/guidance/fuser.pyc
kde-guidance: /usr/share/apps/guidance/fuser_ui.pyc
kde-guidance: /usr/share/apps/guidance/fuser_ui.ui
kde-guidance: /usr/share/python-support/kde-guidance/fuser.py
kde-guidance: /usr/share/python-support/kde-guidance/fuser_ui.py
manpages-fi: /usr/share/man/fi/man1/fuser.1.gz
manpages-it: /usr/share/man/it/man1/fuser.1.gz
manpages-ja: /usr/share/man/ja/man1/fuser.1.gz
manpages-ja: /usr/share/man/ja/man8/ifuser.8.gz
manpages-nl: /usr/share/man/nl/man1/fuser.1.gz
manpages-pl: /usr/share/man/pl/man1/fuser.1.gz
manpages-posix: /usr/share/man/man1/fuser.1posix.gz
pcmcia-cs: /sbin/ifuser
pcmcia-cs: /usr/share/man/man8/ifuser.8.gz
psmisc: /bin/fuser
psmisc: /usr/bin/oldfuser
psmisc: /usr/share/man/man1/fuser.1.g
...

In this case a lot of different filenames are returned (and I have shortened the list), but since fuser is an executeable file, it is rather easy to spot it because it has to be located in a bin directory, and the right package is:

psmisc: /bin/fuser

So in order to get our hands on fuser we need to install the psmisc package.

Another nice feature of the apt-file utility is that it can display all files in a specific package even if the package isn't installed.

If we want to figure out what files will get installed, if we install the psmisc packages, we can do that using the list option:

# apt-file list pmisc
psmisc: /bin/fuser
psmisc: /usr/bin/killall
psmisc: /usr/bin/oldfuser
psmisc: /usr/bin/pstree
psmisc: /usr/bin/pstree.x11
psmisc: /usr/share/doc/psmisc/README
psmisc: /usr/share/doc/psmisc/README.Debian
psmisc: /usr/share/doc/psmisc/changelog.Debian.gz
psmisc: /usr/share/doc/psmisc/changelog.gz
psmisc: /usr/share/doc/psmisc/copyright
psmisc: /usr/share/locale/bg/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/ca/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/de/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/eu/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/fi/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/fr/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/hu/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/it/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/ja/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/nb/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/nl/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/pl/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/pt/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/ro/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/sv/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/locale/vi/LC_MESSAGES/psmisc.mo
psmisc: /usr/share/man/man1/fuser.1.gz
psmisc: /usr/share/man/man1/killall.1.gz
psmisc: /usr/share/man/man1/pstree.1.gz
psmisc: /usr/share/man/man1/pstree.x11.1.gz
psmisc: /usr/share/menu/psmisc
psmisc: /usr/share/pixmaps/pstree16.xpm
psmisc: /usr/share/pixmaps/pstree32.xpm

Take a look at man apt-file for further information.