Чей это файл? Узнаем, какому пакету в Linux что принадлежит
Вы нашли в системе подозрительный файл или просто хотите понять, откуда взялась та или иная программа? Эта головоломка знакома каждому, кто работает с Linux. Внезапно обнаруженный незнакомый исполняемый файл может вызывать вопросы о его необходимости и безопасности.
Наша статья — ваш универсальный ключ к решению этой задачи. Мы не ограничимся одним дистрибутивом, а дадим вам работающие команды для всех популярных систем. Больше не нужно гадать, нужен ли этот файл или можно его смело удалять.
Вы научитесь использовать мощь стандартных утилит. В Ubuntu и Debian это команда dpkg, которая мгновенно покажет владельца любого существующего файла. А для поиска по всем доступным пакетам существует apt-file.
Для пользователей CentOS, Fedora и других RPM-систем мы раскроем секреты утилиты rpm. Одна короткая команда — и вы получите исчерпывающую информацию. Не останутся в стороне и поклонники Arch Linux с их менеджером pacman, а также пользователи Gentoo.
Мы подготовили четкие, готовые к использованию команды для каждого случая. Эти знания сэкономят вам часы поисков в интернете и избавят от лишних сомнений. Готовы навсегда закрыть для себя вопрос "Чей это файл?"? Тогда переходите к полному тексту и становитесь настоящим мастером диагностики вашей системы!
В этой краткой заметке я хочу рассказать как узнать какому пакету принадлежит файл 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
x11-libs/qt-qt3support-4.6.2 (/usr/bin/qtconfig)
Такой способ работает только для установленных пакетов. Из-за специфики дистрибутива для не установленных пакетов способа поиска не существует.
Выводы
Теперь вы знаете как понять какому пакету принадлежит файл в любом из самых популярных дистрибутивов Linux. Во всех дистрибутивах, основанных на Ubuntu и Debian, работает dpkg, для RPM-based дистрибутивов подходит утилита rpm. А два остальных менее популярных, но очень интересных мы рассмотрели отдельно. Если у вас остались вопросы, спрашивайте в комментариях!