![RHEL/CentOS - 如何找到依赖于特定软件包的所有 rpm 软件包?](https://linux22.com/image/150838/RHEL%2FCentOS%20-%20%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E4%BE%9D%E8%B5%96%E4%BA%8E%E7%89%B9%E5%AE%9A%E8%BD%AF%E4%BB%B6%E5%8C%85%E7%9A%84%E6%89%80%E6%9C%89%20rpm%20%E8%BD%AF%E4%BB%B6%E5%8C%85%EF%BC%9F.png)
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
我可以通过以下方式找到拥有该文件的包:
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 软件包(参考:Question-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
)
答案1
尝试这个,
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