E:无法找到包 php-7-v-podlinnike.pdf

E:无法找到包 php-7-v-podlinnike.pdf

我尝试卸载 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 globby 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*'

相关内容