我尝试卸载 PHP,但出现以下错误。此错误是什么意思?如何解决?
$ sudo apt-get remove --purge php*
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package php-7-v-podlinnike.pdf
E: Couldn't find any package by glob 'php-7-v-podlinnike.pdf'
E: Couldn't find any package by regex 'php-7-v-podlinnike.pdf'
答案1
看来,php*
您的 shell 将未加引号的部分扩展为存在于您当前工作目录中的文件名 ( php-7-v-podlinnike.pdf
)...在这种情况下,扩展将在传递给包名称/名称模式之前进行apt-get
...因此,apt-get
在这种情况下,所有内容都将看到是php-7-v-podlinnike.pdf
而不是php*
...您可以运行set -x
(启用打印命令调试/执行)在您的终端中运行命令以查看实际传递的内容apt-get
是否如下所示:
apt-get remove --purge php-7-v-podlinnike.pdf
并不是:
apt-get remove --purge php*
正如你所想的。
您可以通过引用它来防止扩展(即"php*"
或'php*'
)...请注意,在这种情况下,单引号'...'
可能更安全,因为@Thomas Ward 指出。
此外,您假设apt-get
使用通配符模式来匹配php
名称以 开头的任何包可能并不总是正确/安全的......apt-get
似乎有时可能会将其作为正则表达式而不是通配符模式来处理......正如您在您的情况下看到的apt-get
那样尝试了by glob
和by regex
:
E: Couldn't find any package by glob 'php-7-v-podlinnike.pdf'
E: Couldn't find any package by regex 'php-7-v-podlinnike.pdf'
因此,您可能希望使用类似的方法'^php.*'
来作为更安全的替代方案。
不过,我建议你非常谨慎批量删除软件包时,请仔细阅读要删除的软件包列表,然后再对apt-get
...建议的操作回答“是”。例如,请参阅apt-get remove 删除的通配符比预期的多。为什么?。
另外,顺便提一下,如果您排除该--purge
选项,软件包仍将被删除,但配置文件将被保存,以防您稍后决定重新安装某个软件包,因此它将使用这些配置文件(所以它的行为和你移除它之前一样) 而不是从头开始。
您还可以使用该-s
选项来模拟命令的结果,apt-get
而无需实际删除任何包,如下所示:
apt-get -s remove 'php*'