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
--installedist 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, repoqueryhandelt 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 --recursiveam 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, rpmarbeitet mit Funktionen zur Auflösung von Abhängigkeiten, nicht nur mit Paketen, wie dies z. B. dpkgin der Debian / Ubuntu-Familie von Linux-Distributionen der Fall ist. Wie andere angemerkt haben, rpm -q --whatrequires sqliteerzählt das einfache Tun nicht die ganze Geschichte, weshalb einige vorgeschlagen haben, es zu verwenden repoquery. repoqueryIn 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 rpmselbst integriert sind, und erfordert daher keine Installation zusätzlicher Pakete (z. B. yum-utilsin CentOS 7, dem Paket, das diese enthält repoquery).
repoquerykann 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