42

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.

bertieb
  • 7,543
Delan Azabani
  • 1,086
  • 2
  • 10
  • 17

2 Answers2

51

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

nik
  • 57,042
13

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.

Orwellophile
  • 549
  • 6
  • 9