Centos

RHEL/CentOS - 如何找到所有依賴於特定包的 rpm 包?

  • March 28, 2019

Linux 發行版:Red Hat Enterprise Linux Server 6.10 版(聖地亞哥)

上下文:

我需要在我的伺服器中解除安裝所有舊版本的 Java。

我有 java 路徑的列表,例如:

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el6_10.x86_64/jre/bin/java

我可以通過以下方式找到擁有此文件的 pacakage:

rpm -qf /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.201.b09-2.el6_10.x86_64/jre/bin/java
java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64

現在,如何根據 找到所有包java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64,以便我可以查看刪除包是否安全?

下面的命令說沒有其他包依賴於這個 openjdk 包(參考:問題 166343):

rpm -q --whatrequires  java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64
no package requires java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64

但是mysql-connector-java取決於這個包。

原因:rpm--whatrequires選項的參數是包提供的 CAPABILITY,而不是包名,使用 CAPABILITY 搜尋並不簡單。

下面的命令也沒有返回任何結果:

repoquery --requires --resolve --recursive java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64

那麼,是否有任何簡單的方法來辨識依賴於特定包的所有 rpm 包?

包,我的意思是java-1.8.0-openjdk-headless-1.8.0.201.b09-2.el6_10.x86_64(不是java-1.8.0-openjdk-headless

試試這個,

rpm -e如果有其他包依賴於該包,通常不會解除安裝該包[當然--nodeps可以通過這個來使用]。正如@JeffSchaller 提到rpm -e的,也可以結合使用--test來查看是否有任何error: Failed dependencies:

--test Don’t really uninstall anything, just go through the motions.  Useful in conjunction with the -vv option for debugging.

rpm -e -vv <package_name> - 檢查error: Failed dependencies:

或者

rpm -e -vv --test <package_name> - 檢查error: Failed dependencies:

更多參考man rpm

引用自:https://unix.stackexchange.com/questions/509103