В этой краткой заметке я хочу рассказать как узнать какому пакету принадлежит файл Linux, мы рассмотрим как решить эту задачу не только в Ubuntu, но и в других популярных дистрибутивах. Такая задача возникает очень редко. Например, вы чистите систему, увидели странный файл, или файл который занимает много места и хотите узнать какому пакету он принадлежит, и вообще, нужен ли он здесь. Или другая ситуация вы хотите установить или удалить программу но не помните название пакета, но знаете как называется исполняемый файл.
Для получения такой информации в Ubuntu есть несколько способов. Это стандартная утилита dpkg, которая работает только с существующими файлами, а также инструмент apt-file, позволяющий получить название программы зная имя исполняемого файла. Подобные инструменты есть и для других дистрибутивов.
Содержание статьи
- Узнаем какому пакету принадлежит файл в dpkg
- Как узнать имя пакета по файлу в apt-file
- Узнаем какому пакету принадлежит файл в rpm
- Какому пакету принадлежит файл в Arch Linux
- Поиск пакета по файлу в Gentoo
- Выводы
Узнаем какому пакету принадлежит файл в 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
Такой способ работает только для установленных пакетов. Из-за специфики дистрибутива для не установленных пакетов способа поиска не существует.
Выводы
Теперь вы знаете как понять какому пакету принадлежит файл в любом из самых популярных дистрибутивов Linux. Во всех дистрибутивах, основанных на Ubuntu и Debian, работает dpkg, для RPM-based дистрибутивов подходит утилита rpm. А два остальных менее популярных, но очень интересных мы рассмотрели отдельно. Если у вас остались вопросы, спрашивайте в комментариях!
ADMIN, Благодарю за расширение кругозора!
Спасибо! Весьма полезно, особенно когда в системе нужно что-то починить на скорую руку... к примеру, переустановить сломанный пакет по файлу из него... Так у меня однажды LibreOffice Writer из-за сломавшегося OpenJDK-11 не хотел запускаться. Починилось похожей командой на ту, что ниже. А Идею тут в статье почерпнул:
dpkg -S /opt/XnView/qt.conf | awk -F: '{print $1}'| xargs sudo apt install --reinstall -y