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