Ответы:
Опция rpm, которую вы хотите:
rpm -q --whatrequires sqlite
Отредактировано: добавлено - установлено за обсуждение в других ответах / комментариях
Отредактировано: удалено - установлено, так как это неверная опция для rpm
--installed
это опция для, repoquery
но недействительная для rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
только сообщает о зависимостях от имен пакетов.
Наоборот, repoquery
действует следующим образом (из manpages):
--alldeps
When used with --whatrequires, look for non-explicit dependencies in addition to explicit ones (e.g. files and Provides in addition to package names).
This is the default.
Давайте возьмем пакет libdb
.
# rpm -q --whatrequires libdb
no package requires libdb
От пакета ничего не зависит libdb
, поэтому мы должны быть в состоянии удалить его гладко. Тем не мение...
# yum remove -y libdb
Loaded plugins: fastestmirror
Resolving Dependencies
--> Running transaction check
---> Package libdb.x86_64 0:5.3.21-19.el7 will be erased
--> Processing Dependency: libdb(x86-64) = 5.3.21-19.el7 for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: pam-1.1.8-12.el7_1.1.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: libdb-utils-5.3.21-19.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: cyrus-sasl-lib-2.1.26-20.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-python-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: python-libs-2.7.5-39.el7_2.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-devel-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: 2:postfix-2.10.1-6.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: rpm-build-libs-4.11.3-17.el7.x86_64
--> Processing Dependency: libdb-5.3.so()(64bit) for package: iproute-3.10.0-54.el7_2.1.x86_64
--> Running transaction check
. . .
. . .
. . .
Error: Trying to remove "systemd", which is protected
Error: Trying to remove "yum", which is protected
Как вы можете видеть, некоторые другие пакеты зависели не напрямую от пакета, а от libdb-5.3.so()(64bit)
предоставленного им файла .
Наконец, вот реальный список пакетов в зависимости от libdb
:
# repoquery -q --installed --whatrequires libdb
cyrus-sasl-lib-0:2.1.26-20.el7_2.x86_64
iproute-0:3.10.0-54.el7_2.1.x86_64
libdb-utils-0:5.3.21-19.el7.x86_64
pam-0:1.1.8-12.el7_1.1.x86_64
postfix-2:2.10.1-6.el7.x86_64
python-libs-0:2.7.5-39.el7_2.x86_64
rpm-0:4.11.3-17.el7.x86_64
rpm-build-libs-0:4.11.3-17.el7.x86_64
rpm-devel-0:4.11.3-17.el7.x86_64
rpm-libs-0:4.11.3-17.el7.x86_64
rpm-python-0:4.11.3-17.el7.x86_64
Для dnf (новая версия yum) вы можете попробовать с помощью команды оболочки repoquery:
dnf repoquery --whatrequires sqlite
Если он недоступен, вы можете установить его с помощью команды:
dnf -y install dnf-plugins-core
--installed --recursive
конце вам нужно, чтобы он возвращал только то, что на самом деле установлено, и не
Вы также можете попробовать эту команду.
repoquery --whatrequires sqlite
Я получил эту команду от ServerFault, а также от форумов Fedora.
Я думаю, что вы действительно хотите знать, это «какие пакеты требуют sqlite-3.3.6, но не будут рады sqlite-3.4.z» ... и единственный хороший способ выяснить это, это попробуй. Подобно:
echo | yum upgrade sqlite
Как сказал Уэс Хардакер , хороший встроенный метод - это использование rpm -q --whatrequires <package>
. Дело в том, что он rpm
работает с возможностями разрешения зависимостей, а не просто с пакетами, как, например dpkg
, в семействе дистрибутивов Linux Debian / Ubuntu. Как отметили другие, простое выполнение rpm -q --whatrequires sqlite
не рассказывает всей истории, поэтому некоторые предлагают использовать repoquery
. repoquery
однако по умолчанию не установлен в RHEL / CentOS 7 минимальный (может быть, и настольный компьютер тоже?), поэтому он может быть доступен не для всех.
Пользователь может rpm -q --provides <pkgname>
просмотреть все возможности, предоставляемые пакетом, а затем rpm -q --whatrequires <capability>
узнать, какие установленные пакеты требуют этой возможности. Эта информация может быть кратко запрошена с использованием однострочного BASH (разделенного здесь на две строки по длине):
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done
При этом используются только встроенные в него параметры rpm
, и поэтому не требуется устанавливать никаких дополнительных пакетов (например, yum-utils
в CentOS 7, который является пакетом, который содержит repoquery
).
repoquery
может быть использован для создания прекрасного дерева , как структура всех пакетов , которые требуют конкретного пакета, например:repoquery --pkgnarrow=installed --tree-whatrequires sqlite