Как узнать название пакета в linux
Если вы компилируете программы из исходных кодов, то вы, наверняка, сталкивались с ошибками компиляции, когда программа не находит какой-либо файл и компиляция обрывается. Что делать в данной ситуации? Понятно, что нужно установить пакет, который содержит требуемый файл. Но как узнать имя этого пакета?
Вполне возможно, что вас выручит Гугл, достаточно в строке поиска набрать что-нибудь вроде 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% управления всей системой обеспечивается описанным здесь инструментарием. Вам этого мало? Тогда продолжим изучение…
Все утилиты, программы и другие библиотеки в операционных системах на базе Linux хранятся в пакетах. Вы скачиваете такую директорию из интернета в одном из доступных форматов, после чего добавляете в локальное хранилище. Иногда может потребоваться просмотреть список всех присутствующих программ и компонентов. Осуществляется поставленная задача разными методами, каждый из которых будет наиболее подходящим для разных юзеров. Далее мы разберем каждый вариант, взяв за пример дистрибутив Ubuntu.
Просматриваем список установленных пакетов в Ubuntu
Способ 1: Терминал
В первую очередь внимание хотелось бы обратить именно на консоль, поскольку присутствующие в ней стандартные утилиты позволяют задействовать всю функциональность по максимуму. Что же касается отображения списка всех объектов, выполняется это достаточно легко:
К сожалению, не всем удобно использовать консоль, а также это не всегда требуется. Именно поэтому следует привести альтернативный вариант отображения списка присутствующих в системе пакетов.
Способ 2: Графический интерфейс
Конечно, графический интерфейс в Ubuntu не позволяет в полной мере проводить те же операции, которые доступны в консоли, однако визуализация кнопок и утилит значительно упрощает выполнение задачи особенно для неопытных юзеров. Сначала советуем обратиться в меню. Здесь присутствует несколько вкладок, а также сортировка на показ всех программ или только популярных. Поиск требуемого пакета может производиться через соответствующую строку.
Менеджер приложений
-
Откройте меню и запустите необходимый инструмент, нажав на его иконку.
Менеджер пакетов Synaptic
Установка дополнительного менеджера пакетов Synaptic позволит получать детальнейшую информацию обо всех добавленных программах и компонентах. Для начала все же придется воспользоваться консолью:
Ни одним из приведенных методов вам не удастся найти пакет, во время инсталляции которого произошли определенные ошибки, поэтому внимательно следите за появляющимися уведомлениями и всплывающими окнами во время распаковки. Если же все попытки завершились провалом, значит искомый пакет отсутствует в системе или имеет другое наименование. Сверьте название с тем, что указано на официальном сайте, и попробуйте переустановить программу.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Читайте также: