Вопрос достаточно простой: есть ли какая-нибудь команда оболочки (или метод с графическим интерфейсом), которую я могу использовать, учитывая путь к файлу в моей системе, и говорит мне, в какой пакет его помещают? Предполагая, что файл действительно пришел из пакета, то есть.
Дополнительный вопрос: что если это файл, который не установлен в моей системе? Есть ли, скажем, веб-сайт, который позволит мне найти файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?
package-management
Дэвид З
источник
источник
Provides:
механизм. Более подробно, команда похожаmailx
илиsendmail
не включена как двоичный файл в любой пакет; вместо этого различные пакеты устанавливают свои собственные двоичные файлы, а затем делают некоторые из них доступными под «каноническим» именем через/etc/alternatives
. См. Также askubuntu.com/questions/366135/…Ответы:
Вы можете использовать
dpkg
команду, чтобы узнать, какому установленному пакету принадлежит файл:От
man dpkg
:Пример:
Вы можете искать либо по полному пути, либо по имени файла.
Если вы хотите искать файлы, которые еще не установлены на вашем компьютере, вы можете использовать Поиск пакетов Ubuntu
источник
which
чтобы найти программу:dpkg -S `which firefox`
dlocate
может не выполнять работу, если база данных dlocate устарела. Вы должны позвонить,sudo update-dlocatedb
чтобы обновить его.dpkg
точный путь ничего не возвращает (напримерdpkg /usr/bin/java
), попробуйте только имя исполняемого файла (напримерdpkg java
).realpath
для разрешения символических ссылок, например:dpkg -S $(realpath $(which <command>))
.Команда
apt-file
может сделать это для вас из командной строки. Я часто использую его при сборке пакетов из исходного кода. Для файлов, предоставляемых пакетами, которые уже установлены в вашей системе,apt-cache
это другой выбор.Для установки
apt-file
сделайте:Затем вам нужно обновить базу данных:
И, наконец, поиск файла:
Однако гораздо более удобный способ - использовать сайт поиска пакетов Ubuntu . У них есть возможность «искать содержимое пакетов» по конкретному имени файла.
источник
apt-file
часто находит ложные срабатывания, то есть пакеты, которые не установлены. Конечно, этот ответ отлично подходит для «бонусного вопроса».apt-file search <>
это ближайший аналогdnf/yum whatprovides <>
.apt-file find
какapt-find
давно , и это очень удобно! Кстати, последние версии требуют рут дляapt-file update
.Также есть apt-файл для поиска файлов в пакетах, которые не установлены. Например:
источник
Вы можете искать содержимое пакетов, включенных в различные выпуски Ubuntu, на веб-сайте Ubuntu Packages . Загляните под заголовок « Поиск содержимого пакетов ».
Например, вот результаты поиска для libnss3.so в lucid (10.04):
http://packages.ubuntu.com/search?searchon=contents&keywords=libnss3.so&mode=exactfilename&suite=lucid&arch=any
источник
Вы имеете в виду, какой пакет, а не какое приложение. Приложение является вашим менеджером пакетов, например
Software Center
.Использование
dpkg
:пример
Использование
apt-file
:или также возможно:
пример
Или онлайн здесь , в разделе
Search the contents of packages
.пример
источник
Это продолжение отличного ответа Алекса Роша . Я попытался отредактировать этот ответ, но он был отклонен (хотя не Alexx)
Я пытался отследить, что установлено
which
в моей системе. После небольшой работы я создал/usr/local/bin/apt-whatprovides
Хотя для большинства установленных вещей вы можете просто использовать:
Для вещей, которые не установлены, вы можете использовать:
apt-whatprovides
Скрипт работает для файлов, и которые не в вашей системе. Например, моей системе не хватало,dig
но былоping
так, что это привело к тому, что:Обратите внимание, что
Searching for
это полный путь дляping
(установленного) и только двоичное имя дляdig
не установленного. Это помогло мне обнаружить, что мне нужно установитьdnsutils
без необходимости искать поиск https://packages.ubuntu.com/#search_contentsисточник
Я пытался отследить, что установлено
which
в моей системе. После небольшой работы я создал apt-whatprovidesХотя для большинства вещей вы можете просто использовать
источник
Одна из причин, по которой вам, возможно, придется это сделать, - если вы компилируете программное обеспечение, в котором уже есть пакет ubuntu, вы можете запустить его
apt-get build-dep $PACKAGENAME
. Это установит все пакеты, необходимые для компиляции$PACKAGENAME
.источник