【发布时间】:2012-08-13 21:16:30
【问题描述】:
我被授予访问安装了 50+ php rpms 的服务器的权限。我正在尝试将它们全部删除。
基本上,我正在尝试将这两个命令结合起来:
rpm -qa | grep 'php'
和
rpm --erase
我对管道和重定向知之甚少,但我不知道如何将它们用于此目的。请帮忙。
【问题讨论】:
我被授予访问安装了 50+ php rpms 的服务器的权限。我正在尝试将它们全部删除。
基本上,我正在尝试将这两个命令结合起来:
rpm -qa | grep 'php'
和
rpm --erase
我对管道和重定向知之甚少,但我不知道如何将它们用于此目的。请帮忙。
【问题讨论】:
我今天有这个。如果没有 --allmatches,使用 --justdb 和 --noscripts rpm 参数是不够的,仅此而已。
[root@localhost ~]# rpm -ev --allmatches --justdb <the-package-name>
https://mcvictech.blogspot.com/2011/10/rpm-error-specifies-multiple-packages.html
【讨论】:
yum
列出并删除指定的包及其所有依赖项,但需要y/N 确认:
yum remove 'php*'
要绕过确认,请将yum 替换为yum -y。
rpm
列出已安装的 RPM:
rpm -qa 'php*'
rpm -qa | grep '^php' # Alternative listing.
列出哪些 RPM 将被删除,而不是实际删除它们:
rpm -e --test -vv $(rpm -qa 'php*') 2>&1 | grep '^D: erase:'
在 Amazon Linux 上,您可能需要改用 grep '^D: ========== ---'。
如果上述命令未列出相关的 RPM,请检查错误:
rpm -e --test -vv $(rpm -qa 'php*')
删除这些 RPM:
rpm -e $(rpm -qa 'php*')
确认删除:
rpm -qa 'php*'
【讨论】:
grep 命令在我的 Amazon Linux 实例上没有获取任何内容,我认为它应该寻找 '^D: ========== ---'。此外(因为这是不明显的),在多个通配符的情况下(例如,LibreOffice),查询命令看起来像rpm -qa 'libreoffice*' 'libobasis*'。
列出:
rpm -qa | grep 'php'
删除已安装的列表和过滤:
rpm -e $(rpm -qa |grep 'php')
【讨论】:
另一种选择是直接在rpm --erase 命令中使用rpm -qa | grep ... 的输出:
rpm --erase `rpm -qa | grep php`
可能不适用于您引用的php 案例,但xargs 方法可能会遇到问题,如果它决定将列表拆分为rpm -e 的多个调用并且第一个列表包含作为依赖项的包后续列表中的软件包。当然,如果您要同时删除这么多包,您可能还有其他需要考虑的事情...
【讨论】:
【讨论】: