Команда для поиска исходного пакета двоичного файла?

33

Я знаю, что есть whichкоманда, которая отображает полное имя двоичного файла (например which sh). Тем не менее, я вполне уверен, что есть команда, которая повторяет пакет, который предоставляет конкретный двоичный файл. Есть ли такая команда? Если так, то, что это? Я хотел бы иметь возможность запустить это:

commandName ls

и получить

coreutils

например.

Делан Азабани
источник

Ответы:

36

Я думаю, вы ищете dpkg -Sкоманду (также смотрите часто используемые опции для dpkg ).

Nik
источник
4
Спасибо! dpkg -S `which COMMANDHERE`работал на меня.
Делан Азабани
Gentoo: qfile <имя>
Сергей
dpkg -Sнаходит имя двоичного имени пакета, которое может отличаться от имени исходного пакета (кода).
Тино
Просто для полноты, -Sэто краткая форма --searchопции, которая на самом деле является опцией для dpkg-queryкоманды (но обычная dpkgтоже работает)
вихревой
10

Если вы хотите найти файлы в пакете, который вы не установили, используйте apt-file

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

Затем, чтобы найти что-то:

apt-file search /usr/bin/file

или

apt-find search file

Где «файл» - это имя того, что вы ищете.

Если вы не хотите проходить это в каждой системе Debian, вы можете использовать этот скрипт:

#!/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

Я только что это взбил, но, похоже, работает хорошо.

Примечание: «dpkg -S» находит только те вещи, которые вы уже установили.

Orwellophile
источник
3
Использование -yпараметра опасно, он может сказать да любому количеству вещей. В сценарии это может быть хорошо, но первая команда должна действительно читать apt-get install apt-fileбез, -yпоскольку вы не можете знать, как выглядит система пользователя.
jmiserez