Вопрос или проблема
Я хотел бы запросить базу данных pacman для пакета, который удовлетворяет требованию: по сути, пакет, который будет установлен, если я выполню pacman -S <требование>
.
Похоже, есть три случая:
- Требование – это имя пакета.
- Требование – это имя файла или библиотеки.
- Требование появляется в поле
provides
другого пакета.
Первые два случая довольно просты, но третий вызывает у меня проблемы.
Например, требование apache-ant
предоставляет пакет ant
.
pacman -S apache-ant
правильно находит и устанавливает ant.
pacman -Q apache-ant
возвращает нужную мне информацию, но только если пакет уже установлен.
Есть ли команда, которая работает аналогично pacman -Q
, но не дает сбой, если пакет не установлен локально?
Нет встроенного метода для третьего случая, но я использовал это:
pacprovides(){
pacman -Si | sed -n '/^Name.*: /{s///;h}; /^Provides.*'"$1"'/{g; p}'
}
h
ранит имя пакета, g
ет и p
ечатает его, когда находит соответствующую строку.
--print
показывает цели транзакции:
$ pacman –sync –print libtagparser.so
file:///var/cache/pacman/pkg/cpp-utilities-5.20.0-100-x86_64.pkg.tar.zst
file:///var/cache/pacman/pkg/tagparser-11.5.0-100-x86_64.pkg.tar.zst
Пакет – это последняя цель, обрезанная:
$ pacman –sync –print libtagparser.so | tail -n1 | rev | cut –delimiter=”https://superuser.com/” –fields=1 | cut –delimiter=”-” –fields=4- | rev
tagparser
Это должно сработать
pacman -Ss "^<требование>$"
Это дает все пакеты, которые обеспечивают требование.
Он не скажет, какой будет установлен, но быстрее, чем pacman -Sp
Попробуйте pacman -F string1 string2 ...
Смотрите: Запрос баз данных пакетов
.
Ответ или решение
Как найти пакет в Arch Linux, который удовлетворяет требованию
Arch Linux — это мощная дистрибуция, известная своей гибкостью и управляемостью. Часто пользователи сталкиваются с необходимостью определить, какой пакет может удовлетворять определённым требованиям. Рассмотрим подробно три случая, с которыми вы можете столкнуться, и предоставим советы по их решению.
1. Требование — это имя пакета
Если вы знаете название пакета, который хотите установить, вы можете просто выполнить следующую команду:
pacman -S <имя_пакета>
Если пакет доступен в репозиториях и не установлен, pacman
автоматически его установит. Вы также можете подтвердить наличие пакета, выполнив:
pacman -Q <имя_пакета>
Это покажет информацию о пакете, если он у вас установлен.
2. Требование — это имя файла или библиотеки
Если требуемый элемент — это файл или библиотека, вы можете использовать команду:
pacman -Fy
Это обновит базу данных файлов и должна занять некоторое время. После этого вы сможете выполнить следующую команду:
pacman -F <имя_файла>
Эта команда покажет, какой пакет предоставляет запрашиваемый файл.
3. Требование содержится в поле provides
другого пакета
Здесь возникает несколько сложностей, так как стандартные команды pacman
не позволяют просто так выяснить, какой пакет удовлетворяет требованиям, если он не установлен. Для решения этой задачи можно использовать несколько подходов.
Способ 1: Использование кастомной функции в bash
Можно создать функцию, которая поможет вам найти пакет, предоставляющий требование, обрабатывая информацию из базы данных пакетов:
pacprovides() {
pacman -Si | sed -n '/^Name.*: /{s///;h}; /^Provides.*'"$1"'/{g; p}'
}
Эта функция проходит по списку доступных пакетов и ищет среди них те, которые предоставляют запрашиваемую зависимость.
Способ 2: Использование pacman -Ss
Для получения общего списка пакетов, предоставляющих требование, можно использовать команду:
pacman -Ss "^<требование>$"
Это выдаст все пакеты, которые соответствуют запрашиваемому требованию. Имейте в виду, что такая команда не указывает, какой конкретно пакет будет установлен при выполнении pacman -S <требование>
.
Способ 3: Использование pacman -F
Для поиска пакетов по именам файлов или библиотек можно использовать:
pacman -F <строка_поиска>
Эта команда поможет вам найти пакеты, которые содержат указанную строку в их названиях или описаниях.
Заключение
В сумме приведённые методы предоставляют вам полный инструментарий для поиска пакетов в Arch Linux, удовлетворяющих вашим требованиям. Использование вышеописанных команд и подходов поможет вам эффективно управлять пакетами и зависимостями на вашей системе. Не забывайте углубляться в документацию Arch Wiki для получения более подробной информации и рекомендаций.