Главная >> Инструкции >> Какому пакету принадлежит файл в Linux

Какому пакету принадлежит файл в Linux

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

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


Содержание статьи

Узнаем какому пакету принадлежит файл в dpkg

Для того чтобы узнать какому пакету принадлежит файл dpkg имеет опцию -S, правда, выведено будет только имя пакета и адрес файла, например:

dpkg -S /usr/bin/cloud

Теперь если хотим получить информацию о пакете, используем опцию -s:

dpkg -s ncdu

Или объедением эти команды:

dpkg -S /usr/bin/cloud | awk -F: '{print $1}' | xargs dpkg -s

Как узнать имя пакета по файлу в apt-file

Утилита apt-file не является стандартной для системы Ubuntu, поэтому сначала ее нужно установить:

sudo apt install apt-file

Затем нужно обновить базу данных программы, при обновлении загрузиться около 30 Мегабайт данных:

sudo apt-file update

Теперь можно использовать:

apt-file search /usr/bin/ncdu

 

Узнаем какому пакету принадлежит файл в rpm

В системах на базе Red Hat Linux тоже можно выполнить аналогичное действие. Здесь вместо dpkg используется консольная утилита rpm. Для получения информации о пакетах используется опция -q, если комбинировать ее с опцией -f и передать адрес файла, мы сможем узнать какому пакету принадлежит файл:

rpm -qf /bin/ls

Хотите более подробной информации о пакете, добавьте опцию -i:

rpm -qif /bin/ls

Пакетный менеджер yum, используемый в системах, основанных на Red Hat, тоже умеет искать пакеты по файлу, для этого есть команда whatpovides:

yum whatprovides /bin/ls

Какому пакету принадлежит файл в Arch Linux

ArchLinux использует собственный менеджер пакетов, очень сильно отличающийся от описанных выше. Но здесь тоже можно сделать то, что нам нужно. Для этого есть опция -Qo:

pacman -Qo /usr/bin/pkgfile

Но этот способ работает только для установленных пакетов, если пакет не установлен, можно использовать утилиту pkgfile. Она не поставляется по умолчанию, но ее можно установить:

sudo pacman -S pkgtools

Теперь посмотрим какому пакету принадлежит /bin/evince:

pkgfile evince

Теперь вы можете узнать из какого пакета можно получить нужную вам программу.

Поиск пакета по файлу в Gentoo

Еще один интересный дистрибутив со своеобразной системой работы с пакетами. Здесь пакеты поставляются в виде исходных кодов и скриптов для сборки. Найти пакет по файлу вы можете с помощью утилиты equery, передав ей параметр b. Например:

equery b /usr/bin/qtconfig

x11-libs/qt-qt3support-4.6.2 (/usr/bin/qtconfig)

Такой способ работает только для установленных пакетов. Из-за специфики дистрибутива для не установленных пакетов способа поиска не существует.

Выводы

Теперь вы знаете как понять какому пакету принадлежит файл в любом из самых популярных дистрибутивов Linux. Во всех дистрибутивах, основанных на Ubuntu и Debian, работает dpkg, для RPM-based дистрибутивов подходит утилита rpm. А два остальных менее популярных, но очень интересных мы рассмотрели отдельно. Если у вас остались вопросы, спрашивайте в комментариях!

2 комментария к “Какому пакету принадлежит файл в Linux”

  1. Спасибо! Весьма полезно, особенно когда в системе нужно что-то починить на скорую руку... к примеру, переустановить сломанный пакет по файлу из него... Так у меня однажды LibreOffice Writer из-за сломавшегося OpenJDK-11 не хотел запускаться. Починилось похожей командой на ту, что ниже. А Идею тут в статье почерпнул:

    dpkg -S /opt/XnView/qt.conf | awk -F: '{print $1}'| xargs sudo apt install --reinstall -y

    Ответить

Оставьте комментарий