Antworten:
Die gewünschte rpm-Option ist:
rpm -q --whatrequires sqlite
Bearbeitet: hinzugefügt - installiert pro Diskussion in anderen Antworten / Kommentaren
Bearbeitet: entfernt - installiert, da dies eine ungültige Option für rpm ist
--installed
ist eine Option für repoquery
, ist aber ungültig für rpm
.
repoquery -q --installed --whatrequires sqlite
rpm -q --whatrequires sqlite
meldet nur Abhängigkeiten von Paketnamen.
Im Gegenteil, repoquery
handelt wie folgt (von 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.
Lass uns ein Paket nehmen libdb
.
# rpm -q --whatrequires libdb
no package requires libdb
Kein Paket hängt davon ab libdb
, daher sollten wir es problemlos entfernen können. Jedoch...
# 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
Wie Sie sehen, waren einige andere Pakete nicht direkt vom Paket abhängig, sondern von libdb-5.3.so()(64bit)
der von ihm bereitgestellten Datei .
Schließlich ist hier die reale Liste der Pakete abhängig von 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
Für dnf (neue Version von yum) können Sie den Befehl repoquery wrapper verwenden:
dnf repoquery --whatrequires sqlite
Wenn es nicht verfügbar ist, können Sie es mit folgendem Befehl installieren:
dnf -y install dnf-plugins-core
--installed --recursive
am Ende nur das zurückgeben, was tatsächlich installiert ist und nicht aus den Repositorys ziehen
Sie können diesen Befehl auch ausprobieren.
repoquery --whatrequires sqlite
Ich habe diesen Befehl von ServerFault und auch von den Fedora-Foren erhalten.
Ich denke, was Sie wirklich wissen wollen, ist "Was sind die Pakete, die sqlite-3.3.6 erfordern, aber mit sqlite-3.4.z nicht zufrieden sein werden" ... und der einzige gute Weg, dies herauszufinden, ist zu Versuch es. Mögen:
echo | yum upgrade sqlite
Wie Wes Hardaker sagte , ist die Verwendung einer guten eingebauten Methode rpm -q --whatrequires <package>
. Die Sache ist, rpm
arbeitet mit Funktionen zur Auflösung von Abhängigkeiten, nicht nur mit Paketen, wie dies z. B. dpkg
in der Debian / Ubuntu-Familie von Linux-Distributionen der Fall ist. Wie andere angemerkt haben, rpm -q --whatrequires sqlite
erzählt das einfache Tun nicht die ganze Geschichte, weshalb einige vorgeschlagen haben, es zu verwenden repoquery
. repoquery
In RHEL / CentOS 7 minimal ist es jedoch nicht standardmäßig installiert (möglicherweise auch auf dem Desktop?), sodass es möglicherweise nicht für alle verfügbar ist.
Ein Benutzer kann rpm -q --provides <pkgname>
alle Funktionen eines Pakets anzeigen und dann anhand der rpm -q --whatrequires <capability>
installierten Pakete ermitteln, welche Funktionen für dieses Paket erforderlich sind. Diese Informationen können mit einem BASH-Einzeiler (hier zweizeilig) kurz abgefragt werden:
capabilities=($(rpm -q --provides sqlite | awk -F= '{print $1}'));
for c in "${capabilities[@]}"; do rpm -q --whatrequires "$c"; done
Dies verwendet nur Optionen, die in sich rpm
selbst integriert sind, und erfordert daher keine Installation zusätzlicher Pakete (z. B. yum-utils
in CentOS 7, dem Paket, das diese enthält repoquery
).
repoquery
kann verwendet werden, um eine schöne baumartige Struktur aller Pakete zu generieren, die ein bestimmtes Paket erfordern, zum Beispiel:repoquery --pkgnarrow=installed --tree-whatrequires sqlite