52

On Debian systems (and derivatives):

$ dpkg --search /bin/ls
coreutils: /bin/ls

That is, the file /bin/ls belongs to the Debian package named coreutils.

But this only works if the package is installed. What if it's not?

4 Answers 4

67

apt-file

apt-file provides the feature of searching for a package providing a binary (like Debian or Ubuntu), it is not installed by default but in the repositories.

apt-file search <path-to-file>

You may want to update once before searching...

apt-file update 

For example, let's search for the not installed binary mysqldump:

$ apt-file search /usr/bin/mysqldump

mysql-client-5.1: /usr/bin/mysqldump
mysql-client-5.1: /usr/bin/mysqldumpslow
mysql-cluster-client-5.1: /usr/bin/mysqldump
mysql-cluster-client-5.1: /usr/bin/mysqldumpslow

It's also possible to list the contents of a (not-installed) package:

$ apt-file list mysql-client-5.1

mysql-client-5.1: /usr/bin/innochecksum
mysql-client-5.1: /usr/bin/innotop
mysql-client-5.1: /usr/bin/myisam_ftdump
mysql-client-5.1: /usr/bin/mysql_client_test
...

yum

yum has been largely superseded by dnf on modern Fedora/RedHat-based Linux distributions; see below.

yum accepts the command whatprovides (or provides) to search for installed or not installed binaries:

yum whatprovides <path-to-file>

Again, the not installed mysqldump:

$ yum whatprovides /usr/bin/mysqldump

mysql-5.1.51-2.fc14.i686 : MySQL client programs and shared libraries
Repo        : fedora
Matched from: 
Filename    : /usr/bin/mysqldump

mysql-5.1.51-1.fc14.i686 : MySQL client programs and shared libraries
Repo        : fedora
Matched from: 
Filename    : /usr/bin/mysqldump

dnf

dnf has a repoquery subcommand, which you can use similarly to yum whatprovides:

dnf repoquery --whatprovides /path/to/file

For example:

$ dnf repoquery --whatprovides '*/mysqldump'
mariadb-3:10.5.22-1.el9_2.alma.1.x86_64
mysql-0:8.0.36-1.el9_3.x86_64

zypper

zypper's search command can check file lists when used with the -f option.

zypper se -f /bin/mksh
Loading repository data...
Reading installed packages...

S | Name | Summary           | Type   
--+------+-------------------+--------
  | mksh | MirBSD Korn Shell | package

Webpin provides a webbased solution, there is even a script for the command-line.

pkgfile

Available as pkgtools for pacman based systems. Provides a similar search feature like the others above:

$ pkgfile -si /usr/bin/mysqldump

Name      : mysql-clients
Version   : 5.1.54-1
Url       : http://www.mysql.com/
License   : GPL
Depends   : libmysqlclient
...
3
  • apt-file search protoc, for example, gives over six thousand results. However the results end in the filename, so with grep you can actually find the filename you are looking for: apt-file search protoc | grep 'protoc$'. It works because it filters out anything that ends in "protoc". Of course you should replace "protoc" with whatever you are searching for. Commented Oct 7, 2016 at 17:50
  • unix.stackexchange.com/a/191983/235261 Commented Apr 10, 2022 at 10:01
  • yet another option/variant: apt-file search -x '/mysqldump$' Commented Sep 8, 2023 at 7:26
7

The standard tool for this is apt-file. Run apt-file update to download the index file. Here's the output:

Downloading complete file ftp://ftp.is.co.za/debian/dists/squeeze/Contents-i386.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 16.6M  100 16.6M    0     0  33191      0  0:08:47  0:08:47 --:--:-- 38951

After that, run apt-file search search_term.

5

If you don't have access to the machine or can't use the commands given in the previous answers, you can also find this out using the Debian package web-based search engine (the second form, "Search the contents of packages").

0

apt-file can produce many results. With its perl regex, it is almost able to perform the task... if only the file was verified to be installed somewhere in $PATH...

apt-file find --regexp "/$COMMAND$" | grep -E "($(tr : '|' <<< "$PATH"))/$COMMAND$""

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.