Command to find the source package of a binary?

I know there's a which command, that echoes the full name of a binary (e.g. which sh). However, I'm fairly sure there's a command that echoes the package that provides a particular binary. Is there such a command? If so, what is it? I'd like to be able to run this:

commandName ls

and get

coreutils

for example.


I guess you are looking for the dpkg -S command (also see frequently used options for dpkg).


If you want to find files in a package that you haven't installed, use apt-file

apt-get install -y apt-file
apt-file update

Then, to find something:

apt-file search /usr/bin/file

or

apt-find search file

Where "file" is the name of whatever you're searching for.

If you don't feel like going through this on every debian system, you can use this script:

#!/bin/bash
which apt-get >/dev/null || { echo apt-get not found >&2; exit 1; }
which apt-file >/dev/null || { apt-get install -y apt-file;  apt-file update; }
unset i; IFS=$'\x0a'; select i in $( apt-file search "/$@" ); do 
    test -n "$i" || break; apt-get install "${i%% *}"; done

I just whipped that up then, but it seems to work well.

Note: "dpkg -S" only finds things that you've already installed.