Достаточно простой вопрос: есть ли какая-нибудь команда оболочки (или метод с графическим интерфейсом), которую я могу использовать, учитывая путь к файлу в моей системе, и говорит мне, в какой пакет ее помещают? Предполагая, что файл на самом деле пришел из пакета, то есть.
Бонусный вопрос: что если это файл, который не установлен в моей системе? Есть ли, скажем, веб-сайт, который позволит мне найти файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?
Вы можете использовать команду dpkg
, чтобы узнать, какой установленный пакет принадлежит файлу:
Из man dpkg
:
-S, --search filename-search-pattern... Search for a filename from installed packages.
Пример:
$ dpkg -S /bin/ls
coreutils: /bin/ls
Вы можете искать либо с полным путем, либо только с именем файла.
Если вы хотите найти файлы, которые еще не установлены на вашем компьютере, вы можете использовать Ubuntu Packages Search
или apt-файл
, как описано в другом ответе.
Команда apt-file
может сделать это за вас из командной строки. Я часто использую ее при сборке пакетов из исходных текстов. Для файлов, предоставляемых пакетами, которые уже установлены в вашей системе, apt-cache
- другой вариант.
Для установки apt-файла
сделайте:
sudo apt-get install apt-file
Затем обновите его базу данных:
sudo 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. У них есть возможность "искать содержимое пакетов" по определенному имени файла.
Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu на сайте Ubuntu Packages. Посмотрите под заголовком "Поиск содержимого пакетов".
Например, вот результаты поиска libnss3.so в понятном виде (10.04):
Есть также apt-файл для поиска файлов в пакетах, которые не установлены. Например:
apt-file list packagename
Вы означает, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например Центр программного обеспечения
.
Использование dpkg
:
dpkg -S /usr/lib/tracker/tracker-store
dpkg -S tracker-extract
dpkg -S tracker-miner-fs
Пример
% dpkg -S /usr/lib/tracker/tracker-store
tracker: /usr/lib/tracker/tracker-store
Использование apt-файла
:
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
Или онлайн здесь , в разделе Поиск содержимого пакетов
.
Пример
Я пытался отследить, что установлено , что
в моей системе. После небольшой работы я создал apt-whatprovides
#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
BINARY=$(realpath $(which $@))
PACKAGE=$(apt-file search $BINARY|grep -E ":\s*${BINARY}$")
echo ${PACKAGE%:*}
. Хотя для большинства вещей вы можете просто использовать
apt-file search $(realpath $(which THING))|grep 'THING$'
Одна из причин, по которой вам может понадобиться это сделать, это если вы компилируете программное обеспечение, в котором уже есть пакет ubuntu, вы можете запустить apt-get build-dep $PACKAGENAME
. Это установит все пакеты, необходимые для компиляции $PACKAGENAME
.
Это расширение к отличному ответу Alexx Roche . Я попытался отредактировать этот ответ, но он был отклонен (хотя и не Alexx)
Я пытался отследить, что установлено , что
в моей системе. После небольшой работы я создал / usr / local / bin / apt-whatprovides
#!/bin/sh
#apt-whatprovides ver. 201801010101 Copyright alexx, MIT Licence
#rdfa:deps="[realpath,apt-file,grep,which,sh,echo]"
BINARY="$(realpath $(which $@) 2>/dev/null)"
[ -z "$BINARY" ] && BINARY="$@"
echo Searching for $BINARY
PACKAGE="$(apt-file search $BINARY|grep -E ":.*[^-.a-zA-Z0-9]${BINARY}$")"
echo "${PACKAGE}"
Хотя для большинства установленных ВЕЩЕЙ вы можете просто использовать:
apt-file search $(realpath $(which THING)) | grep 'THING$'
Для ВЕЩЕЙ, которые не установлены, вы можете использовать:
apt-file search THING | grep '/THING$'
Сценарий apt-whatprovides
работает с файлами, которые есть и не находятся в вашей системе. Например, в моей системе не было dig
, но было ping
, так что это привело к следующему:
pi@raspberrypi:~ $ apt-whatprovides ping
Searching for /bin/ping
inetutils-ping: /bin/ping
iputils-ping: /bin/ping
pi@raspberrypi:~ $ apt-whatprovides dig
Searching for 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
Почему :
У разных дистрибутивов свой путь, слишком много команд, чтобы запомнить o (╥﹏╥) o
Как :
Универсальный решение: pacapt -Qo file_path
Результат :
На ubuntu:
$ pacapt -Qo /usr/bin/iostat
sysstat: /usr/bin/iostat
На centos:
$ pacapt -Qo /usr/bin/iostat
sysstat-10.1.5-19.el7.x86_64
Даже можно найти сам путь:
$ pacapt -Qo iostat
sysstat: /usr/share/man/man1/iostat.1.gz
sysstat: /usr/bin/cifsiostat
sysstat: /usr/bin/iostat
sysstat: /usr/share/man/man1/cifsiostat.1.gz
Что есть pacapt :
pacapt - это оболочка для многих менеджеров пакетов
Установите :
Просто загрузите переносимый скрипт :
wget -O $ HOME / bin / pacapt https: / /github.com/icy/pacapt/raw/ng/pacapt