Как узнать название пакета в linux

Обновлено: 05.07.2024

Если вы компилируете программы из исходных кодов, то вы, наверняка, сталкивались с ошибками компиляции, когда программа не находит какой-либо файл и компиляция обрывается. Что делать в данной ситуации? Понятно, что нужно установить пакет, который содержит требуемый файл. Но как узнать имя этого пакета?

Вполне возможно, что вас выручит Гугл, достаточно в строке поиска набрать что-нибудь вроде fatal error: ffi.h и уже в первых результатах поиска вы найдёте сайты с ответом на ваш вопрос. Это не самый хороший способ, поскольку:

  • если постоянно надеяться только на Google, то в конце-концов он подведёт;
  • обычно ссылки ведут нас на англоязычные сайты — а с иностранными языками в РФ так себе;
  • ну и, в конце-концов, это просто нубство.

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

apt-file

Эта программа предназначена для поиска файлов в пакетах. Также она может показать все файлы в пакете.

Сразу после установки кэш данных о программах пуст. Чтобы его обновить нужно выполнить команду (можно выполнять как от рута, так и от пользователя):

Когда всё готово, то поиск осуществляется так:

К примеру я ищу файл ffi.h:

Как можно увидеть файл найден, но кроме него ещё и много лишнего:


На помощь можно призвать умные регулярные выражения, к примеру в следующей строке замените ffi.h на тот файл, который вы ищите — и вы всегда будете получать самый точный результат:


Ну и для любителей графического интерфейса, вот вам от меня графический интерфейс:



Справка по команде apt-file

whichpkg

whichpkg — это единая оболочка для управления пакетами в Debian. Она является обёрткой вокруг apt, apt-cache, dpkg, aptitude и других. Её цель — простое управление пакетами из одного интерфейса путём унификации главных функций этих инструментов.

Как видно, показаны совпадения в установленных и в неустановленных пакетах. НО мой предыдущий фокус с фильтрацией командой grep здесь не работает.

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

auto-apt

Программа auto-apt предназначена для поиска пакетов по файлу и установке пакетов по требованию.

Инструмент auto-apt проверяет доступ к файлам запущенными программами внутри своего окружения, и если программа пытается получить доступ к файлу про который известно, что он принадлежит к неустановленному пакету, то auto-apt установит этот пакет используя apt-get. Эта функция требует рабочих apt и sudo.

Программа также имеет простую базу данных для поиска пакета, содержащего требуемый файл.

После установки нужно обновить список пакетов следующей командой:

Поиск осуществляется так:

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

dlocate

Заключение

Теперь, когда при очередной компиляции возникнет очередная ошибка из-за отсутствующего файла, вам не обязательно открывать Гугл и читать англоязычные форумы. Одной командой прямо в командной строке вы можете найти требуемый пакет.

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

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

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

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

dpkg -S /usr/bin/cloud


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


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

dpkg -S /usr/bin/cloud | awk -F: '' | 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 и передать адрес файла, мы сможем узнать какому пакету принадлежит файл:


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

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

yum whatprovides /bin/ls


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

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

pacman -Qo /usr/bin/pkgfile

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

sudo pacman -S pkgtools

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

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

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

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

equery b /usr/bin/qtconfig

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

Выводы

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы

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

Приведём несколько примеров…

То есть, файл /etc/bashrc попал в систему в результате установки пакета bash . В настоящий момент этот пакет установлен (версия 3.2.57, релиз alt1).

Оказывается, их всего ДВА! И оба откроют вам тонкости работы с командной строкой, специфичные для дистрибутивов АЛЬТ, поскольку там – принятые сокращения. Так, вы узнаете, что вместо длинного «df -h -x supermount» достаточно скомандовать просто «df». А вместо «ls -lapt» – просто «l».

Кроме того, документация может быть упакована в отдельный пакет, а этот пакет ещё не установлен. Проверить довольно легко: обычно это такое же имя пакета с допиской «-doc».

Synaptic – это графический интерфейс к программе управления пакетами APT. С помощью Synaptic можно управлять источниками пакетов (репозиториями), получать сведения о доступных пакетах, устанавливать/удалять/обновлять пакеты, производить поиск по ключевым словам среди доступных пакетов. Подробный обзор работы с Synaptic можно почитать ЗДЕСЬ и ЗДЕСЬ.

Однако по умолчанию эта программа может быть не установлена. Например, на серверах графического интерфейса может не быть совсем. Кроме того, графический интерфейс не может обеспечить всей гибкости и возможностей автоматизации, предоставляемой утилитами командной строки. Поэтому далее будет рассмотрена работа с пакетным менеджером только в командной строке.

RPM (Redhat Package Manager) – низкоуровневая утилита командной строки, используемая для установки, удаления, обновления, выполнения запросов и проверки целостности пакетов программного обеспечения. Все остальные утилиты управления пакетами в конечном итоге работают через RPM. Важно понимать: сам RPM ничего не знает о репозиториях, он оперирует только файлами, пакетами и их зависимостями, для чего использует собственную Базу Данных. Информация, хранимая в этой БД, в идеале должна соответствовать фактической картине внутри файловой системы, иначе проблем не избежать. В дистрибутивах ALT Linux RPM хранит свою БД в /var/lib/rpm . В один момент времени в системе должен быть запущен лишь один процесс, обращающийся к БД RPM, другие запросы блокируются.

Пакеты могут предоставлять (провайдить) что-либо, требовать (запрашивать) что-либо и конфликтовать с чем-либо, образуя таким образом систему межпакетных зависимостей (dependencies). В ALT Linux можно установить пакет, если удовлетворены все его зависимости и нет конфликтов с другими уже установленными пакетами и объектами файловой системы. Из этого следует, что никакими системными файлами нельзя манипулировать непосредственно (вручную), никакое программное обеспечение не стоит устанавливать в обход штатного пакетного менеджера, например, разворачивая tar'болы, скаченные из Интернета.

Впрочем, могут быть исключения: АЛЬТ'овый RPM позволяет устанавливать RPM-пакеты из других дистрибутивов, но только на выше оговоренных условиях. Так, очень часто проприетарный софт может распаковываться в /opt , /usr/local/bin , итп, и это не должно вызывать конфликтов с системным ПО из официального репозитория АЛЬТ. Подразумевается, что вы доверяете устанавливаемому из сторонних источников и сами несёте ответственность за всё установленное.

Пакеты всегда содержат определённую мета-информацию, на которую ориентируется утилита rpm. Также пакеты могут содержать какие-то файлы, каталоги и симлинки, но это необязательно. Так называемые мета-пакеты никогда не содержат объектов файловой системы, в них перечисляются только зависимости на другие пакеты.

Основные режимы работы утилиты rpm:

  • Install: установка пакетов
  • Remove: удаление пакетов
  • Upgrade: обновление пакетов
  • Query: выполнение запросов
  • Verify: проверка целостности пакетов

Наиболее часто встречающиеся на практике команды rpm:

Русский перевод man-страницы rpm доступен, например, ЗДЕСЬ.

APT (Advanced Packaging Tool) используется в ALT Linux для установки, обновления, удаления программных пакетов, для транзакционного обновления всей системы, как основной высокоуровневый инструмент командной строки, работающий не только с файлами RPM-пакетов, но и (прежде всего!) на уровне подключенных репозиториев. APT включает в себя несколько инструментов, в том числе, рассматриваемых далее. И, хотя мычит АЛЬТ'овый APT не хуже прародителя (apt-get moo), прозван недоброжелателями гремучей смесью за свою способность удовлетворять такие необычные запросы:

APT на АЛЬТ'е хранит кэш скаченных из сети пакетов в /var/cache/apt/archives , так же, как и в Debian'е. И точно так же можно найти кэш скаченных индексов в /var/lib/apt/lists . Вся конфигурация APT'а хранится в /etc/apt , главный конфигурационный файл: /etc/apt/apt.conf , списки подключенных репозиториев хранятся в /etc/apt/sources.list и /etc/apt/sources.list.d/* . Посмотреть текущую конфигурацию APT'а можно командой:

Более подробно почитать про APT и устройство репозиториев на АЛЬТ'е можно (и нужно обязательно!) на этой ВиКи и в соответствующей справочной документации.

apt-repo – весьма полезная утилита, надстройка над APT'ом для удобного управления источниками (репозиториями). Типовые примеры использования:

Если вдуматься, синтаксис apt-repo add/test task taskid чем-то напоминает apt-add-repository ppa:ppa-name из Debian-подобных систем, но проще в использовании и не приводит к неуправляемому замусориванию системы.

Инструмент для поиска и извлечения полезной информации из индекса подключенных репозиториев. Наиболее часто используемые на практике команды:

Две последние команды требуют наличия в системе установленного пакета apt-scripts . Следует также обратить внимание, что АЛЬТ'овый APT по умолчанию ищет информацию не только в названиях пакетов, но и в описаниях, вследствие чего оказывается более «говорливым» своего прародителя. Уменьшить излишнюю «шумливость» можно фильтрацией вывода, например, так:

Основной инструмент для управления пакетами в системе. Наиболее часто используемые на практике команды:

Внимание! В АЛЬТ'е не принято выполнять частичное обновление системы через apt-get upgrade! Этой командой вы практически гарантировано свою систему поломаете! Используйте только apt-get dist-upgrade вместо неё. Не торопитесь нажимать ENTER или Y в ответ! Внимательно изучите, что APT предлагает удалить, заменить, обновить и установить нового. Вы правда согласны с его предложением!? Никогда не добавляйте «-y», чтобы контролировать намерения APT'а.

АЛЬТ'овый less «из коробки» умеет показывать содержимое RPM-пакетов (rpm -qip && rpm -qlp):

То же самое касается дефолтных настроек Midnight Commander'а ( /usr/bin/mc ) – подсвечивается синтаксис .spec-файлов, можно заходить внутрь RPM-пакетов и изучать их содержимое. Если нужно распаковать содержимое пакета в текущий каталог «ручками», без установки его в систему, выполните следующую команду:

Весьма полезная утилита sisyphus-mirror поможет с организацией локальных зеркал и даже их архивами. Как и в Debian-подобных системах, в АЛЬТ'е тоже есть свой aptitude, но насколько он рабочий, судить не берусь. Судя по ченжлогу, не обновлялся очень давно, так что в любом случае не рекомендовал бы с него начинать.

Есть много других пакетов (утилит), так или иначе связанных с управлением пакетами, например, apt-scripts , apt-repo-tools , apf, epm, подробное описание которых выходит за рамки основ пакетного менеджмента. Кое-что из этого уже упоминалось выше, о чём-то будет сказано дальше. Вы можете изучить это самостоятельно после того, как освоите наиболее важные инструменты, описанные ранее: apt-repo, apt-cache, apt-get и rpm.

Предположим, мы знаем, что ищем программу partclone.ntfs. Но другие инструменты поиска успеха не дали: пакета с таким названием в репозитории не оказалось.

Как быть? Как найти точное название пакета, если известна часть имени или пути файла, в том числе, исполняемого?

По умолчанию пакет apf (аналог apt-file из Debian-based дистрибутивов) не установлен, а после установки требуется его настройка.

По умолчанию одноимённая команда apf будет искать файлы в Сизифе. Отредактируйте конфигурацию apf , указав нужный источник, например так:

После обновления индексов (apf update под рутом) можно искать интересующую информацию:

И это не единственный способ!

По умолчанию пакет eepm не установлен. Ставим его:

Теперь можно искать интересующее:

Здесь нет опечатки: программа epm входит в состав пакета eepm !

Найти нужную информацию можно и обычной командой grep по индексному файлу, не устанавливая никаких дополнительных пакетов! Предположим, вы используете локальное зеркало, доступное через /ALT/p8 .

Если локального зеркала нет, нужный файлик сначала скачиваем:

Какие модули ядра сейчас используются/загружены?

Подробная информация о модуле ядра:

К какому пакету относится модуль ядра?

В последней команде мы взяли из вывода modinfo первую строку (head -n1) и отщипнули от неё второе по счёту поле (awk '') с полным путём к файлу модуля. Этот путь к файлу мы передали в качестве параметра команде rpm. В данном случае нам сообщили, что модуль e1000e входит в пакет самого ядра. Но далеко не всегда это так и если сетевая карта не работает, возможно, в системе просто не установлен пакет с нужным модулем.

Теперь вы знаете ОСНОВЫ и можете переходить к практике. Изучение основ управления пакетами не заменяет необходимости самолично глубоко и досконально изучить всё, что связано с пакетным менеджментом. Данный раздел содержит подсказки, где и как можно найти недостающую информацию. Почему это важно, говорилось в самом начале: 90% управления всей системой обеспечивается описанным здесь инструментарием. Вам этого мало? Тогда продолжим изучение…

Список установленных пакетов в Ubuntu

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

Просматриваем список установленных пакетов в Ubuntu

Способ 1: Терминал

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

Переход к работе с терминалом в Ubuntu

Отобразить список всех пакетов в Ubuntu

Ознакомиться со списком всех пакетов в Ubuntu

Выполнить поиск по установленным пакетам в Ubuntu

Ознакомиться с результатами поиска по пакетам в Ubuntu

Найти файлы установленного пакета в Ubuntu

Ознакомиться с файлами установленного пакета в Ubuntu

Узнать пакет файла в Ubuntu

К сожалению, не всем удобно использовать консоль, а также это не всегда требуется. Именно поэтому следует привести альтернативный вариант отображения списка присутствующих в системе пакетов.

Способ 2: Графический интерфейс

Конечно, графический интерфейс в Ubuntu не позволяет в полной мере проводить те же операции, которые доступны в консоли, однако визуализация кнопок и утилит значительно упрощает выполнение задачи особенно для неопытных юзеров. Сначала советуем обратиться в меню. Здесь присутствует несколько вкладок, а также сортировка на показ всех программ или только популярных. Поиск требуемого пакета может производиться через соответствующую строку.

Нахождение программ через меню в Ubuntu

Менеджер приложений

    Откройте меню и запустите необходимый инструмент, нажав на его иконку.

Запуск менеджера приложений в Ubuntu

Переход к списку установленных приложений в Ubuntu

Ознакомиться с приложениями в менеджере Ubuntu

Менеджер пакетов Synaptic

Установка дополнительного менеджера пакетов Synaptic позволит получать детальнейшую информацию обо всех добавленных программах и компонентах. Для начала все же придется воспользоваться консолью:

Команда для установки Synaptic в Ubuntu

Ввод пароля для установки Synaptic в Ubuntu

Подтвердить добавление пакетов Synaptic в Ubuntu

Запустить Synaptic в Ubuntu

Ознакомиться с интерфейсом программы Synaptic в Ubuntu

Поиск пакетов в программе Synaptic U

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

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

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