Найдите пакет, который предоставляет определенный файл в Linux
В этом кратком руководстве объясняется несколько различных способов найти пакет, предоставляющий определенный файл в Linux. Это может быть полезно при компиляции и установке пакета вручную. Когда вы компилируете пакет из исходного кода, есть вероятность, что вы можете получить сообщение об ошибке, например «Нет правила для создания целевого объекта «
Найдите пакет, который предоставляет определенный файл в Linux
Arch Linux, Antergos, Manjaro Linux:
В Arch есть небольшой инструмент командной строки под названием pkgfile, который используется для поиска файлов в пакетах.
Pkgfile поставляется с предустановленным Arch Linux. Если это не так, вы можете установить его с помощью следующей команды:
sudo pacman -S pkgfile
Затем выполните следующую команду для синхронизации с базой данных pkgfile:
sudo pkgfile -u
Теперь вы можете найти пакет, предоставляющий определенный файл, например, alisp.h, используя команду:
pkgfile alisp.h
extra/alsa-lib
Как видно из приведенного выше вывода, пакет alsa-lib предоставляет файл alisp.h. Пакет доступен в репозитории extra. Теперь вы можете установить этот пакет, как показано ниже.
sudo pacman -S alsa-lib
Чтобы просмотреть все файлы, предоставленные пакетом alsa-lib, запустите:
pkgfile -l alsa-lib
Fedora, RHEL, CentOS, AlmaLinux, Rocky Linux:
В системах на базе RPM, таких как Fedora, RHEL и их клонах, таких как CentOS, AlmaLinux и Rocky Linux, вы можете найти пакет, владеющий определенным файлом, с помощью следующей команды:
dnf provides '*filename'
Или,
yum whatprovides '*filename'
Если файл уже доступен в вашей системе, например, /bin/ls
, вы можете найти пакет, которому принадлежит файл, с помощью команды:
# rpm -qf /bin/ls
coreutils-8.22-18.el7.x86_64
Вы также можете использовать команду repoquery следующим образом:
repoquery -f /bin/ls
Если команда repoquery недоступна в вашей системе, установите пакет yum-utils .
sudo yum install yum-utils
Или,
sudo dnf install yum-utils
Debian, Ubuntu, Linux Mint:
В любой системе на базе DEB вы можете найти пакет, предоставляющий определенный файл, с помощью инструмента apt-file.
Установите apt-файл, как показано ниже, если он еще не установлен:
sudo apt-get install apt-file
Если вы только что установили apt-файл, общесистемный кеш может быть пуст. Вам нужно запустить «apt-file update» от имени пользователя root, чтобы обновить кеш. Вы также можете запустить «обновление apt-файла» от имени обычного пользователя, чтобы использовать кеш в домашнем каталоге пользователя.
Давайте обновим кеш базы данных с помощью команды:
sudo apt-file update
А затем найдите пакеты, содержащие определенный файл, например alisp.h, с помощью команды:
apt-file find alisp.h
Или,
apt-file search alisp.h
Образец будет:
libasound2-dev: /usr/include/alsa/alisp.h
Да, libasound2-dev это так! Вы можете установить этот пакет с помощью команды:
sudo apt-get install libasound2-dev
Если у вас уже есть файл и вы просто хотите узнать, к какому пакету он принадлежит, вы можете использовать команду dpkg
, как показано ниже.
dpkg -S $(which alisp.h)
Или,
dpkg -S `which alisp.h`
Если вы знаете полный путь к файлу, например /bin/ls
, вы можете найти пакеты, к которым он принадлежит, с помощью следующей команды:
dpkg -S /bin/ls
coreutils: /bin/ls
SUSE/openSUSE:
В SUSE и openSUSE выполните следующую команду, чтобы узнать, к какому пакету принадлежит определенный файл.
zypper wp alisp.h
Или,
zypper se --provides --match-exact alisp.h
И это все. Надеюсь это поможет. Если вам известны какие-либо другие способы найти пакет, содержащий определенный файл, сообщите нам об этом в разделе комментариев ниже. Я проверю и обновлю руководство соответствующим образом.
Рекомендуется прочитать:
- Как составить список установленных пакетов из определенного репозитория в Linux
- Как найти зависимости для определенного пакета в CentOS