Как найти пакет, который предоставляет файл?
Достаточно простой вопрос: есть ли какая-нибудь командная оболочка (или GUI-метод), которую я могу использовать, учитывая путь к файлу в моей системе, сообщает мне, какой пакет поставил его там? Предполагая, что файл действительно был из пакета, то есть.
Бонусный вопрос: что, если это файл, который не установлен в моей системе? Есть, скажем, веб-сайт, который позволит мне найти файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?
8 ответов
Вы можете использовать команду dpkg
, чтобы узнать, какой установленный пакет принадлежит файлу:
Из man dpkg
:
-S, --search filename-search-pattern ... Поиск имени файла из установленных пакетов.
Пример:
$ dpkg -S /bin /ls
coreutils: /bin /ls
Вы можете выполнить поиск с полным путем или только с именем файла.
Если вы хотите найти файлы, еще не установленные на вашем компьютере, вы можете использовать Поиск пакетов Ubuntu
Команда apt-file
может сделать это для вас из командной строки. Я часто использую его при создании пакетов из исходного кода. Для файлов, предоставляемых пакетами, которые уже установлены в вашей системе, apt-cache
- еще один выбор.
Чтобы установить apt-file
, выполните:
sudo apt-get install apt-file
Затем вам нужно обновить базу данных:
apt-file update
И, наконец, найдите файл:
$ apt-file find kwallet.h
kdelibs5-dev: /usr/include/kwallet.h
libkf5wallet-dev: /usr/include/KF5/KWallet/kwallet.h
Однако гораздо более дружелюбным способом является использование веб-сайта Ubuntu Packages Search . Они имеют возможность «искать содержимое пакетов» для определенного имени файла.
Существует также apt-файл для поиска файлов в пакетах, которые не установлены. Например:
apt-file list packagename
Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu, на веб-сайте Ubuntu Packages . Посмотрите под заголовком Поиск содержимого пакетов ".
Например, вот результаты поиска для libnss3.so в lucid (10.04):
Вы имеете в виду, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например. Software Center
.
Использование dpkg
:
dpkg -S /usr /lib /tracker /tracker-store
dpkg -S трекер-экстракт
dpkg -S tracker-miner-fs
<ет> Пример
% dpkg -S /usr /lib /tracker /tracker-store
tracker: /usr /lib /tracker /tracker-store
Использование apt-file
:
apt-file search /usr /lib /tracker /tracker-store
, а также возможно:
apt-file search --regex /tracker-extract $
apt-file search --regex /tracker-miner-fs $
<ет> Пример
% apt-file search /usr /lib /tracker /tracker-store
tracker: /usr /lib /tracker /tracker-store
Или онлайн здесь , в разделе Искать содержимое пакетов
.
ответил A.B. 29 72015vEurope/Moscow11bEurope/MoscowSun, 29 Nov 2015 18:57:08 +0300 2015, 18:57:08
Я пытался отслеживать, что установил , который
в моей системе. После небольшой работы я создал apt-whatprovides
#! /Bin /ш
# apt-whatprovides ver. 201801010101 Copyright alexx, лицензия MIT
#rdfa: Deps = "[Realpath, склонный-файл, Grep, который, ш, эхо]"
BINARY = $ (realpath $ (который $ @))
PACKAGE = $ (поиск в apt-файле $ BINARY | grep -E ": \ s * $ {BINARY} $")
echo $ {PACKAGE%: *}
Хотя для большинства THINGs вы можете просто использовать
apt-file search $ (realpath $ (who THING)) | grep 'THING $'
Это расширение для отличного ответа Alexx Roche . Я попытался внести изменения в этот ответ, но получил отклонение (хотя не от Alexx)
Я пытался отслеживать, что установил , который
в моей системе. После небольшой работы я создал /usr /local /bin /apt-whatprovides
#! /Bin /ш
# apt-whatprovides ver. 201801010101 Copyright alexx, лицензия MIT
#rdfa: Deps = "[Realpath, склонный-файл, Grep, который, ш, эхо]"
BINARY = "$ (realpath $ (который $ @) 2> /dev /null)"
[-z "$ BINARY"] & & & BINARY = "$ @"
echo Поиск $ BINARY
PACKAGE = "$ (поиск в apt-файле $ BINARY | grep -E":. * [^ -. A-zA-Z0-9] $ {BINARY} $ ")"
echo "$ {PACKAGE}"
Хотя для большинства установленных THING вы можете просто использовать:
apt-file search $ (realpath $ (who THING)) | grep 'THING $'
Для тех, которые не установлены, вы можете использовать:
apt-file search THING | grep '/THING $'
Скрипт apt-whatprovides
работает для файлов, которые находятся и не находятся в вашей системе. Например, моей системе не хватало dig
, но имел ping
, поэтому это привело к следующему:
pi @ raspberrypi: ~ $ apt-whatprovides ping
Поиск /bin /ping
inetutils-ping: /bin /ping
iputils-ping: /bin /ping
pi @ raspberrypi: ~ $ apt-whatprovides dig
Поиск копания
dnsutils: /usr /bin /dig
epic4: /usr /share /epic4 /script /dig
epic4-help: /usr /share /epic4 /help /8_Scripts /dig
knot-dnsutils: /usr /bin /dig
Обратите внимание, что Поиск
- это полный путь для ping
(установлен) и только двоичное имя для dig
не установлено. Это помогло мне обнаружить, что мне нужно установить dnsutils
, не требуя поиска https: //packages.ubuntu.com/#search_contents
Одна из причин, по которой вам может понадобиться сделать это, - это компиляция программного обеспечения, в котором уже есть пакет ubuntu, вы можете запустить apt-get build-dep $ PACKAGENAME
. Это установит все пакеты, необходимые для компиляции $ PACKAGENAME
.