Достаточно простой вопрос: есть ли какая-то команда оболочки (или метод GUI) Я могу использовать это, учитывая путь к файлу в моей системе, который сообщает мне, какой пакет поместил его туда? Предполагая, что файл действительно был получен из пакета, то есть.
Дополнительный вопрос: что, если это файл, который не установлен в моей системе? Есть ли, скажем, веб-сайт, который позволит мне просмотреть файл и посмотреть, какие пакеты, если таковые имеются, предоставляют его?
Вы можете использовать dpkg команда для определения того, какому установленному пакету принадлежит файл:
От man dpkg:
-S, --поиск имени файла-поиск-шаблон... Найдите имя файла в установленных пакетах.
Пример:
$ dpkg -S /bin/lscoreutils: /bin/ls
Вы можете выполнять поиск либо по полному пути, либо только по имени файла.
Если вы хотите выполнить поиск файлов, которые еще не установлены на вашем компьютере, вы можете использовать Поиск пакетов Ubuntu, или apt-file как описано в другой ответ.
То apt-file команда может сделать это за вас из командной строки. Я часто использую его при создании пакетов из исходного кода. Для файлов, предоставляемых пакетами, которые уже установлены в вашей системе, apt-cache это еще один выбор.
Однако гораздо более дружественным способом является использование Поиск пакетов Ubuntu вебсайт. У них есть возможность "искать содержимое пакетов" по определенному имени файла.
Вы можете выполнить поиск по содержимому пакетов, включенных в различные версии Ubuntu, на Пакеты Ubuntu вебсайт. Посмотрите под заголовком ";Поиск содержимого пакетов".
Например, вот результаты поиска по libnss3.so в фокусе (20.04):
Для вещей, которые не установлены, вы можете использовать:
apt-file search THING | grep '/THING$'
То apt-whatprovides скрипт работает для файлов, которые есть и которых нет в вашей системе. Например, в моей системе не хватало dig но имел ping так вот оно к чему привело:
pi@raspberrypi:~ $ apt-whatprovides pingSearching for /bin/pinginetutils-ping: /bin/pingiputils-ping: /bin/pingpi@raspberrypi:~ $ apt-whatprovides digSearching for digdnsutils: /usr/bin/digepic4: /usr/share/epic4/script/digepic4-help: /usr/share/epic4/help/8_Scripts/digknot-dnsutils: /usr/bin/dig
Обратите внимание, что Searching for является полным путем для ping (установлен) и просто двоичное имя для dig не установлен. Это помогло мне обнаружить, что мне нужно установить dnsutils без необходимости искать https://packages.ubuntu.com/#search_contents
Одна из причин, по которой вам, возможно, придется это сделать, заключается в том, что если вы компилируете программное обеспечение, в котором уже есть пакет ubuntu, вы можете запустить apt-get build-dep $PACKAGENAME. Который установит все пакеты, необходимые для компиляции $PACKAGENAME.
Ни один из приведенных здесь ответов на самом деле не охватывает механизм Обеспечивает:. Более подробно, команда типа mailx или sendmail не включена в качестве двоичного файла в * любой * пакет; вместо этого различные пакеты устанавливают свои собственные двоичные файлы, а затем делают некоторые из них доступными под “каноническим” именем через /etc/alternatives. Смотрите также How to search for packages that provides a virtual package? - Ask Ubuntu