Linux кому принадлежит пакет

Как узнать, к какому пакету принадлежит определенный файл

Или хуже: как исправить классику конфликт зависимости«файл X уже установлен«? Для этого необходимо открыть какой пакет содержит рассматриваемый файл. Как это сделать? Ха! Заходи и узнай .

Некоторое время назад мы видели как это сделать на Debian, Ubuntu и производных. Теперь посмотрим, как это делается и в остальных дистрибутивах.

APT: Debian, Ubuntu и производные

Те дистрибутивы, которые используют APT, могут использовать APT-файл.

sudo apt-get установить apt-файл

После установки он работает так:

поиск apt-файла / путь / файл

Где / path / file — это путь к файлу, который вы ищете.

RPM: Red Hat, Fedora и производные

Вам нужно только выполнить следующую команду:

Где / path / file — это путь к файлу, который вы ищете.

Pacman: Arch и производные

В Arch вам нужно только использовать всемогущего Pacman:

pacman -Qo /usr/lib/gtk-2.0/2.10.0/engines/libmist.so
/usr/lib/gtk-2.0/2.10.0/engines/libmist.so принадлежит gtk-engine 2.20.2-1

Также можно использовать pkgfile. Вам нужно только установить его:

Где файл — это имя файла, который вы ищете.

Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.

Полный путь к статье: Из Linux » ФайлДавайте использовать Linux » Как узнать, к какому пакету принадлежит определенный файл

Источник

Как в Linux узнать, в каком пакете содержится файл

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

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

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

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

apt-file

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

sudo apt-get install apt-file

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

Читайте также:  Move uploaded file linux

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

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

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

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

t=ffi.h; apt-file search $t | grep -E "/$t$"

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

FILE=`/usr/bin/zenity --entry --width=300 —title="Нахождения пакета по файлу" --text="Пожалуйста, введите название файла:"`; if [ $? -eq 1 ]; then exit -1; fi; apt-file search $FILE | grep -E "/$FILE$" | zenity --text-info --width 530 --height 350

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

apt-file [опции] действие [образец] apt-file [опции] -f действие apt-file [опции] -D действие Configuration options: --architecture -a Использовать определённую архитектуру --cache -c Директория кэша --cdrom-mount -d Использовать особую точку монтирования cdrom --dummy -y запустить в фиктивном режиме (без действий) --fixed-string -F Не расширять шаблон --from-deb -D Использовать файловый список .deb пакета(ов) как шаблон; подразумевает -F --from-file -f Прочитать шаблон из файла(ов), один на строку (используйте '-' для стандартного ввода) --ignore-case -i Игнорировать различия регистра --non-interactive -N Пропустить схемы, требующие ввода пользователя (полезно в работах cron) --package-only -l Показать только имя пакета --regexp -x образец — это регулярное выражение --sources-list -s расположение sources.list --verbose -v запустить в вербальном режиме --help -h Показать справку. -- Конец опций (требуется если образец начинается с '-') Действия: update Извлечь информацию оглавлений файлов из apt-sources. search|find Поиск файлов в пакете list|show Список файлов в пакете purge Удалить файлы кэша

whichpkg

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

sudo apt-get install wajig
wajig wajig> whichpkg ffi.h INSTALLED MATCHES (x2) ---------------------- libffi-dev:amd64: /usr/share/doc/libffi6/html/Using-libffi.html libffi-dev:amd64: /usr/include/x86_64-linux-gnu/ffi.h UNINSTALLED MATCHES (x13) ------------------------- watobo: /usr/share/watobo/rvm/gems/ruby-2.0.0-p643/gems/ffi-1.9.10/ext/ffi_c/libffi/include/ffi.h.vc64 libffi-dev: /usr/share/doc/libffi6/html/Using-libffi.html pypy-doc: /usr/share/doc/pypy-doc/html/rffi.html chipmunk-dev: /usr/include/chipmunk/chipmunk_ffi.h watobo: /usr/share/watobo/rvm/gems/ruby-2.0.0-p643/gems/ffi-1.9.10/ext/ffi_c/libffi/include/ffi.h.vc ghc-doc: /usr/share/doc/ghc-doc/html/users_guide/ffi.html watobo: /usr/share/watobo/rvm/gems/ruby-2.0.0-p643/gems/ffi-1.9.10/ext/ffi_c/libffi/include/ffi.h.in jython-doc: /usr/share/doc/jython-doc/html/javadoc/org/python/modules/jffi/jffi.html mlton-basis: /usr/lib/mlton/include/basis-ffi.h watobo: /usr/share/watobo/rvm/gems/ruby-2.0.0-p643/gems/ffi-1.9.10/ext/ffi_c/rbffi.h libgirepository1.0-dev: /usr/include/gobject-introspection-1.0/girffi.h pypy-doc: /usr/share/doc/pypy-doc/html/config/objspace.usemodules._rawffi.html libffi-dev: /usr/include/x86_64-linux-gnu/ffi.h wajig>

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

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

auto-apt

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

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

Читайте также:  How to stop nginx linux

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

sudo apt-get install auto-apt

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

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

dlocate

dlocate является альтернативой dpkg -L и dpkg -S. Её преимуществом является более быстрый поиск, разные дополнительные функции вроде подсчёта занимаемого места, но… она ищет только по установленным пакетам — т. е. для целей, которые озвучены в начале заметки она неприменима.

sudo apt-get install dlocate
dlocate -S ffi.h libffi-dev:amd64: /usr/share/doc/libffi6/html/Using-libffi.html libffi-dev:amd64: /usr/include/x86_64-linux-gnu/ffi.h

Заключение

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

Связанные статьи:

Источник

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

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

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

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

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

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

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

dpkg -S /usr/bin/cloud | awk -F: » | xargs dpkg -s

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

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

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

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

apt-file search /usr/bin/ncdu

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

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

Читайте также:  Запуск jar приложения linux

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

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

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

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

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

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

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

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

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

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

Выводы

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

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

How do I find out which package owns a file?

Alternatively, there are several utilites in Debian which perform this task; check this page for a description. I’ll mention two of them, apt-file and dlocate .

apt-file searches its internal cache, thus allowing you to not install all the packages you want to search. Below you will find more detailed guide.

dlocate is a fast alternative to dpkg -L (the command that lists package contents), and as so, it searches only installed packages. Search is performed by dlocate -S file.name .

Also you can search packages online using packages.debian.org server (the Search the contents of packages section).

Installing and using apt-file

It’s a good idea to update first:

sudo apt-get install apt-file 

Read data from repositories (this works also without sudo but creates user’s cache then; with sudo the cache is system-wide):

Perform search. In this example we want to know in which package xrandr executable is:

It lists many packages with unxrandr , lxrandr.mo or source_lxrandr.py . Not very useful in our case. More clever search:

( $ denotes end of line). Example output:

bash-completion: /usr/share/bash-completion/completions/xrandr x11-xserver-utils: /usr/bin/xrandr 

The first result doesn’t look like executable, the second one does. We can investigate further. Run:

apt-cache show x11-xserver-utils 

Bingo! This is the package.

Источник

Оцените статью
Adblock
detector