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?
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems. It only takes a minute to sign up.
Sign up to join this communityapt-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
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
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
...
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.
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$""