Достаточно простой вопрос: есть ли какая-либо команда оболочки (или GUI-метод), которую я могу использовать, учитывая путь к файлу в моей системе, сообщает мне, какой пакет его там поставил? Предположим, что файл действительно был из пакета, то есть.
Бонусный вопрос: что, если это файл, который не установлен в моей системе? Есть, скажем, веб-сайт, который позволит мне найти файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?
Вы можете использовать команду 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
Вы можете использовать команду 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
Я пытался отслеживать, что установлено which в моей системе. После небольшой работы я создал 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%:*}
Хотя для большинства THING вы можете просто использовать
apt-file search $(realpath $(which THING))|grep 'THING$'
Вы имеете в виду, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например. Software Center.
Использование 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-file: [ ! d5] 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
Или онлайн здесь, в разделе Search the contents of packages.
Пример
Команда apt-file может сделать это для вас из командной строки. Я часто использую его при создании пакетов из исходного кода.
Для установки 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
Однако гораздо более дружелюбным способом является использование apt-file Веб-сайт. Они имеют возможность «искать содержимое пакетов» для определенного имени файла.
Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu на веб-сайте Ubuntu Packages. Посмотрите под заголовком «Поиск содержимого пакетов».
Например, вот результаты поиска для libnss3.so в lucid (10.04):
Также есть apt-файл для поиска файлов в пакетах, которые не установлены. Например:
apt-file list packagename
Одна из причин, по которой вам может понадобиться сделать это, - это если вы компилируете программное обеспечение, которое уже есть пакет ubuntu, вы можете запустить apt-get build-dep $PACKAGENAME. Это установит все пакеты, необходимые для компиляции $PACKAGENAME.
Я пытался отслеживать, что установлено which в моей системе. После небольшой работы я создал 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%:*}
Хотя для большинства THING вы можете просто использовать
apt-file search $(realpath $(which THING))|grep 'THING$'
Это расширение для отличного ответа Alexx Roche. Я попытался внести изменения в этот ответ, но он был отклонен (хотя не Alexx)
Я пытался отслеживать, что установлено which в моей системе. После небольшой работы, которую я создал /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}"
Хотя для большинства установленных THING вы можете просто использовать:
apt-file search $(realpath $(which THING)) | grep 'THING$'
Для ВСТРОЕННЫХ, которые не установлены, вы можете use:
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
Обратите внимание, что Searching for - это полный путь для ping (установлен) и только двоичный имя для dig не установлено. Это помогло мне обнаружить, что мне нужно было установить dnsutils, не требуя поиска Отличный ответ Alexx Roche
Вы имеете в виду, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например. Software Center.
Использование 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-file: [ ! d5] 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
Или онлайн здесь, в разделе Search the contents of packages.
Пример
Команда apt-file может сделать это для вас из командной строки. Я часто использую его при создании пакетов из исходного кода.
Для установки 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
Однако гораздо более дружелюбным способом является использование apt-file Веб-сайт. Они имеют возможность «искать содержимое пакетов» для определенного имени файла.
Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu на веб-сайте Ubuntu Packages. Посмотрите под заголовком «Поиск содержимого пакетов».
Например, вот результаты поиска для libnss3.so в lucid (10.04):
Также есть apt-файл для поиска файлов в пакетах, которые не установлены. Например:
apt-file list packagename
Одна из причин, по которой вам может понадобиться сделать это, - это если вы компилируете программное обеспечение, которое уже есть пакет ubuntu, вы можете запустить apt-get build-dep $PACKAGENAME. Это установит все пакеты, необходимые для компиляции $PACKAGENAME.