Как найти пакет, который предоставляет файл?

Достаточно простой вопрос: есть ли какая-нибудь командная оболочка (или GUI-метод), которую я могу использовать, учитывая путь к файлу в моей системе, сообщает мне, какой пакет поставил его там? Предполагая, что файл действительно был из пакета, то есть.

Бонусный вопрос: что, если это файл, который не установлен в моей системе? Есть, скажем, веб-сайт, который позволит мне найти файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?

365 голосов | спросил David Z 30 J000000Friday10 2010, 12:10:55

8 ответов


347

Вы можете использовать команду dpkg, чтобы узнать, какой установленный пакет принадлежит файлу:

Из man dpkg:

-S, --search filename-search-pattern ...
                  Поиск имени файла из установленных пакетов.

Пример:

$ dpkg -S /bin /ls
coreutils: /bin /ls

Вы можете выполнить поиск с полным путем или только с именем файла.

Если вы хотите найти файлы, еще не установленные на вашем компьютере, вы можете использовать Поиск пакетов Ubuntu

ответил Ressu 30 J000000Friday10 2010, 12:42:03
180

Команда 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 . Они имеют возможность «искать содержимое пакетов» для определенного имени файла.

ответил jbowtie 11 AM00000060000002331 2010, 06:43:23
32

Существует также apt-файл для поиска файлов в пакетах, которые не установлены. Например:

apt-file list packagename
ответил ptman 30 J000000Friday10 2010, 12:49:52
16

Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu, на веб-сайте Ubuntu Packages . Посмотрите под заголовком Поиск содержимого пакетов ".

Например, вот результаты поиска для libnss3.so в lucid (10.04):

http: //packages.ubuntu .com /поиск searchon = содержимое & Amp;? ключевые слова = libnss3.so & амп; режим = exactfilename & амп; люкс = осознанных & амп; арка = любой

ответил moberley 11 AM00000060000001031 2010, 06:42:10
10

Вы имеете в виду, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например. 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> </p>

<p> <ет> Пример </EM> </p>

<p> <a href=  введите описание изображения здесь>> </a> </p></div>
										<div class=ответил A.B. 29 72015vEurope/Moscow11bEurope/MoscowSun, 29 Nov 2015 18:57:08 +0300 2015, 18:57:08

2

Я пытался отслеживать, что установил , который в моей системе. После небольшой работы я создал 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 17 MarpmSat, 17 Mar 2018 18:25:54 +03002018-03-17T18:25:54+03:0006 2018, 18:25:54
2

Это расширение для отличного ответа 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

ответил Bruno Bronosky 18 J000000Wednesday18 2018, 08:45:47
1

Одна из причин, по которой вам может понадобиться сделать это, - это компиляция программного обеспечения, в котором уже есть пакет ubuntu, вы можете запустить apt-get build-dep $ PACKAGENAME. Это установит все пакеты, необходимые для компиляции $ PACKAGENAME.

ответил Rory 11 PM000000110000004131 2010, 23:31:41

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132