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?
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?
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
...
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
.
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").
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$""
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. – Luc Oct 07 '16 at 17:50apt-file search -x '/mysqldump$'
– JJoao Sep 08 '23 at 07:26