Debian, к какому пакету принадлежит файл

Обновлено: 21.11.2024

Иногда мне нужно выяснить, из какого пакета Debian взят тот или иной файл (например, потому что я хочу удалить лишний пакет или найти связанные пакеты). В Debian это можно сделать несколькими способами, самый простой из которых следующий:

dpkg — это встроенная команда, поэтому она всегда под рукой. -S означает --search :

Здесь вы можете перестать читать, так как в 99% случаев это, вероятно, лучший вариант для вас. Тем не менее, есть еще один способ решить проблему, а именно использовать apt-file. Вам нужно сначала установить apt-file и инициализировать его базу данных:

Использовать apt-файл очень просто:

Как видите, по умолчанию он предоставляет все возможные совпадения из своей базы данных. Одно из преимуществ apt-file по сравнению с dpkg заключается в том, что он будет выполнять поиск по всем доступным пакетам, а не по всем установленным пакетам. Иногда это может быть удобно, когда вы знаете, что вам нужно установить какой-то файл, но вы не знаете, какой пакет его содержит. По общему признанию, я сам не знал об apt-file до самого недавнего времени, что является одной из причин, по которой я решил составить эту короткую статью. 1

Это все, что у меня есть для вас сегодня. Продолжайте взламывать!

Когда я пишу о том, что только что узнал, вероятность сохранения новых знаний значительно возрастает. Тем не менее, нет ничего лучше, чем постоянно применять новые знания на практике. ↩

Обновлено: 22 января 2022 г.

Вам также может понравиться

Война в Украине

Это одна из статей, которую мне очень трудно было написать. Последние 2 недели я был полностью поглощен ужасной войной в Украине. Много лет я верил .

Дело против криптографической постоянной ссылки

Биткойн напоминает мне слова Оскара Уайльда об охоте на лис. Он сказал, что это погоня за невыразимым за несъедобным. – Чарли Мангер

Титановое издание

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

Читательский блок

Сегодня я впервые за пару месяцев дочитал книгу. Собственно говоря, я почти ничего не читал в последние пару месяцев. Это р.

При работе в системе Ubuntu 8.04 мне часто не хватает программы, справочной страницы или другого файла. Есть ли простой способ узнать, какой пакет содержит данный файл (независимо от того, установлен он уже или нет)? Может какой-то непонятный вариант для apt или dpkg?

8 ответов 8

или

Чтобы установить файл apt, используйте:

Вам нужно будет обновить его базу данных, прежде чем вы сможете его использовать:

К вашему сведению: похоже, что apt-файл зависит от Contents-amd64.gz, предоставляемого репозиториями. И не все сторонние репозитории предоставляют этот файл.

Мне не помогло. Я обновил базу данных, но она ничего не возвращает. dpkg -S работает, как описано ниже.

В большинстве случаев вам не нужно будет устанавливать нестандартный пакет (apt-файл) и использовать предустановленный пакет (dpkg). См. ответ с наибольшим количеством голосов.

'dpkg -S' просто соответствует строке, которую вы ему предоставили, поэтому простое использование 'ls' в качестве аргумента соответствует любому файлу из любого пакета, в имени которого есть 'ls'. Поэтому обычно рекомендуется использовать абсолютный путь. Вы можете видеть во втором примере, что 12 тысяч файлов, известных dpkg, соответствуют пустой строке 'ls'.

В отличие от apt-file , это также находит пакет в файле, если он был установлен вручную с помощью dpkg -i !

Если вы получаете сообщение dpkg-query: путь, соответствующий шаблону, не найден, попробуйте следующее: dpkg -S "$(readlink -fn "$(what rename)")" .

Странно, у меня это не сработало: dpkg-query: не найден путь, соответствующий шаблону /usr/bin/java , хотя в /usr/bin/java есть файл

Для ускорения я добавил ссылку в закладки:

в Firefox и добавил "debfind" в качестве ключевого слова (щелкните "more" в диспетчере закладок, чтобы оно было выделено), так что я могу просто ввести "debfind ", и все заработает. Вы можете изменить «набор» с нестабильного на стабильный или тестовый, если хотите, для других версий дистрибутива.

Вы также можете использовать dlocate. Со страницы руководства;

@Avio dlocate не находит недавно установленный пакет, если сначала вы не запустите sudo update-dlocatedb. Команда автоматически запускается ежедневно в /etc/cron.daily/dlocate

Wajig — это удобный инструмент командной строки или консоли, в котором собраны все преимущества apt-get и dpkg, которые вы никогда не хотели изучать. .

Для установки ваджига используйте:

Эта команда 'whatpackage' сама по себе зависит от apt-файла

вам все равно нужно будет обновить его базу данных, прежде чем вы сможете его использовать: - Я еще не знаю, обновляет ли wajig update, который выполняет обновление apt-get, также и файловый кеш, но я ожидаю, что это возможно.

1.Использование apt-file для поиска пакета, предоставляющего файл (для пакетов репозитория, как установленных, так и не установленных)

apt-file индексирует содержимое всех пакетов, доступных в ваших репозиториях, и позволяет вам искать файлы во всех этих пакетах.

Это означает, что вы можете использовать apt-file для поиска файлов внутри пакетов DEB, установленных в вашей системе, а также пакетов, которые не установлены на вашем компьютере с Debian (и дистрибутивами Linux на основе Debian, такими как Ubuntu), но доступны для установки из репозиториев. Это полезно, если вы хотите найти, какой пакет содержит файл, который вам нужен для компиляции какой-то программы и т. д.

apt-file не может найти пакет, содержащий файл, если вы загрузили пакет DEB и установили его без использования репозитория. Пакет должен быть доступен в репозиториях, чтобы apt-file мог его найти.

Возможно, в вашей системе не установлен файл apt. Чтобы установить его в Debian, Ubuntu, Linux Mint и других дистрибутивах Linux на основе Debian или Ubuntu, используйте эту команду:

Этот инструмент находит файлы, принадлежащие пакету, с помощью базы данных, которую необходимо обновить, чтобы иметь возможность использовать его. Чтобы обновить базу данных apt-файлов, используйте:

Теперь вы можете использовать apt-file, чтобы найти пакет DEB, который предоставляет файл, будь то пакет, который вы установили из репозиториев, или пакет, доступный в репозиториях, но не установленный на вашем Debian / Ubuntu / Linux. Система монетного двора. Для этого запустите:

Замените имя файла именем файла, который вы хотите найти.

Эта команда выведет список всех вхождений имени файла, найденных в различных пакетах. Если вы знаете точный путь к файлу и имя файла, вы можете получить в результатах поиска только список пакетов, включающих именно этот файл, например:

Например, запуск только apt-file search cairo.h приведет к отображению большого списка результатов поиска:

Однако, если вы знаете путь к файлу, например. вы хотите узнать, к какому пакету принадлежит файл /usr/include/cairo/cairo.h, запустите:

Здесь указан только пакет, содержащий этот файл:

В этом примере пакет, содержащий искомый файл ( /usr/include/cairo/cairo.h ), называется libcairo2-dev .

apt-file также может использоваться для перечисления всех файлов, включенных в пакет ( apt-file list packagename ), выполнения поиска по регулярному выражению и т. д. Обратитесь к его справочной странице ( man apt-file ) и справке для получения дополнительной информации ( apt-file --help ).

2. Использование dpkg для поиска пакета, предоставляющего файл (только для установленных пакетов DEB — из любого источника)

dpkg также можно использовать для определения того, к какому пакету принадлежит файл. Это может быть быстрее в использовании, чем apt-file, потому что вам не нужно ничего устанавливать и не нужно обновлять базу данных.

Однако dpkg может искать только файлы, принадлежащие установленным пакетам, поэтому, если вы ищете файл в пакете, который не установлен в вашей системе, используйте apt-file. С другой стороны, dpkg можно использовать для поиска файлов, принадлежащих пакетам, которые были установлены без использования репозитория, что недоступно для apt-file.

Чтобы использовать dpkg для поиска установленного пакета DEB, который предоставляет файл, запустите его с флагом -S (или --search ), за которым следует имя файла (или шаблон), которому вы хотите увидеть, к какому пакету он принадлежит, например это:

Например, чтобы узнать, к какому пакету принадлежит файл cairo.h, используйте dpkg -S cairo.h :

Как и в случае с apt-file, может отображаться несколько пакетов, в которых есть файлы, содержащие искомое имя файла. Вы можете ввести полный путь к файлу, чтобы получить только тот пакет, который содержит этот конкретный файл. Пример:

В этом примере пакет Debian, содержащий искомый файл ( /usr/include/cairo/cairo.h ), называется libcairo2-dev .

Другой известный способ найти пакет, к которому принадлежит файл, — это онлайн-поиск, предоставляемый Ubuntu и Debian:

На веб-сайте поиска пакетов Linux Mint нет функции поиска файлов внутри пакетов, но вы можете использовать онлайн-поиск пакетов Ubuntu или Debian для пакетов, которые Linux Mint импортирует из Debian / Ubuntu.

Иногда вам нужно узнать связанный пакет файла перед установкой или когда он уже существует. Это очень помогает при укреплении системы или общей очистке системы. В этой статье мы рассмотрим несколько способов определения отношений между файлами и пакетом, к которому они принадлежат. Мы собрали эту информацию для нескольких дистрибутивов Linux.

CentOS, Fedora, RHEL

Показать файлы для пакетов RPM

Показать файлы для пакетов в репозитории

Если вы используете dnf, вы можете запрашивать файлы из пакетов, находящихся в ваших репозиториях. Сам пакет устанавливать не обязательно.

Используйте параметр -q с dnf, чтобы отображались только соответствующие выходные данные.

Показать файлы для каждого установленного пакета

Чтобы показать, какие файлы находятся в пакете, используйте команду rpm.

Если у вас есть имя файла, вы можете перевернуть его и найти соответствующий пакет.

В выходных данных будет указан пакет и его версия.

Чтобы увидеть только имя пакета, используйте параметр –queryformat.

С yum вы можете сделать аналогичный запрос, чтобы увидеть соответствующий пакет.

А в DNF есть аргумент обеспечивает.

Возможно, это даст вам несколько обращений, поскольку файл может быть частью пакетов из разных репозиториев.

Эти данные труднее анализировать из-за разных типов строк.

Debian и Ubuntu

Откройте для себя связанный пакет

Если вы хотите найти связанный пакет двоичного файла (или файла), нам сначала нужно узнать полный путь. Если вы знаете двоичный файл, используйте команду which, чтобы узнать, где он хранится. Использование команды find — еще один вариант, но он может быть менее эффективным. С помощью инструмента управления пакетами dpkg мы можем найти соответствующий пакет.

Без команды awk вывод будет выглядеть так.

Показать файлы, установленные пакетом

Если вы уже знаете имя пакета, вы можете быстро найти файлы, установленные пакетом Debian.

Давайте сделаем то же самое для пакета at и посмотрим, что именно он устанавливает (и куда).

Генту

Первый вариант — использование equery, входящего в состав пакета app-portage/gentoolkit.

Сам пакет должен быть установлен.

Следующая альтернатива — qlist, который является частью app-portage/portage-utils

OpenSUSE

Системы с дистрибутивами SuSE могут использовать инструмент zypper для поиска связи между файлом и пакетом.

Показать связанный пакет

Есть еще полезные команды, которыми можно поделиться? Сообщите об этом в комментариях, и мы добавим их в статью.

И еще одно.

Продолжайте учиться

Значит, вас интересует безопасность Linux? Присоединяйтесь к учебной программе Linux Security Expert, практической лабораторной тренировочной площадке. Для тех, кто хочет стать (или остаться) экспертом по безопасности Linux.

Сканирование системы безопасности с помощью Lynis и Lynis Enterprise

Запустите автоматическое сканирование системы безопасности и повысьте свою защиту. Lynis — это инструмент безопасности с открытым исходным кодом для проведения углубленного аудита. Это помогает повысить безопасность системы, обнаружить уязвимости и обеспечить соответствие требованиям.

Читайте также: