如何完全删除PHP?


57

我需要从PHP 5.3软件包中清理服务器(有很多),以便能够编译PHP 5.2。摆脱它们的最简单/最安全的方法是什么?

Answers:


86

这应该完全删除名称以开头的包php及其相关的任何包。

sudo apt-get purge 'php*'

好谢谢你们俩 我刚刚选择了您的答案,因为Marco似乎并不缺乏业力:)
corev

好吧,关于立即安装PHP 5.2最佳方法的任何想法吗?
corev 2011年

6
这个确切的命令只是擦除了系统中的所有软件包。我不建议任何人使用它。
Caballero

13
php*会将其视为正则表达式,并且带有ph其名称的所有软件包都将被删除。
muru

4
我是唯一认为这不是一个安全主意的人吗?
大安

67

建议跑步sudo apt-get purge php*

太恐怖了!幸运的是,我没有键入该-y选项,因为它选择了大约数百个没有php名称的软件包。

sudo apt-get purge `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

这个怎么运作:

首先,使用以下一系列命令生成软件包列表:dpkg -l | grep php| awk '{print $2}' |tr "\n" " "

提示:您可以在终端中运行命令的这一部分,以查看将删除哪些软件包。您应该得到类似以下内容: libapache2-mod-php5 php5 php5-cli php5-common php5-json

最后,当您运行完整命令时,此软件包列表将传递给sudo apt-get purge,从而删除所有软件包。

提示:如果您觉得更安全,则可以轻松地分别运行它们,然后复制并粘贴要删除的软件包列表,如下所示:sudo apt-get purge libapache2-mod-php5 php5 php5-cli php5-common php5-json


3
这应该是公认的答案
Dark Star1 2014年

1
听起来您似乎在暗示一种语法不好,因为它太宽了,但是您是否介意解释命令的作用,因此人们可以在运行该命令之前判断它是否合适?
文斯

2
如果aptitude未安装或无法在Ubuntu上安装该怎么apt-get cache办,搜索怎么样?
Vicky Dev

17

您可能要清除系统中的所有php *软件包。带有通配符的东西应该起作用

sudo apt-get purge php.*

您可能对如何回滚到PHP 5.2感兴趣,下一步该怎么做


5
php*会将其视为正则表达式,并且带有ph其名称的所有软件包都将被删除。
muru

3

首先,您必须使用以下命令删除Apache及其所有依赖项:

sudo apt-get purge apache2 php5 libapache2-mod-php5 mysql-server libapache2-mod-auth-mysql php5-mysql phpmyadmin

接着:

sudo rm -rf /etc/apache2; rm -rf /etc/php5; rm -rf /var/lib/mysql; rm etc/mysql 

如果您对phpMyAdmin有任何疑问,请尝试在终端中输入以下内容:

dpkg-reconfigure phpmyadmin

***请注意那些未经仔细阅读即粘贴的人,这也会删除apache,这不是OP所要求的
adavea

2
sudo apt-get -y purge libapache2-mod-php5 libapache2-mod-php5filter libexpect-php5 libgv-php5 libow-php5 php5 php5-adodb php5-auth-pam php5-cgi php5-cli php5-common php5-curl php5-dbg php5-enchant php5-exactimage php5-ffmpeg php5-fpm php5-geoip php5-gmp php5-idn php5-imagick php5-imap php5-interbase php5-intl php5-json php5-lasso php5-ldap php5-librdf php5-mapscript php5-memcache php5-memcached php5-mhash php5-midgard2 php5-ming php5-mssql php5-mysql php5-mysqlnd php5-odbc php5-pgsql php5-ps php5-pspell php5-radius php5-recode php5-remctl php5-rrd php5-sasl php5-snmp php5-sqlite php5-suhosin php5-svn php5-sybase php5-tidy php5-tokyo-tyrant php5-uuid php5-xcache php5-xdebug php5-xmlrpc php5-xsl

对于您的情况,您可以搜索所有软件包:

sudo aptitude search php5|awk {'print $2'}|grep -v i386|grep -v "^A"|tr "\n"  " "

然后清除它们:

sudo apt-get purge <list of packages found>

aptitude未安装在我的系统上(16.04)
kleinfreund

如果您想安装sudo apt-get install aptitude
智能功能,

2

除了其他答案中提到的任何清除操作之外,如果您想完全确定所有内容都已删除,则可能需要运行

cd /
sudo find -name "php"

它将向您显示名称为php的文件/文件夹。然后,您将要检查每个文件路径,即:

cd /usr/local/include/php
ls

并适当删除它们。但是请注意不要删除对继续运行的另一个进程至关重要的任何内容,除非您也想重新安装它。

要删除目录或文件,我们使用rm-rf标志的注释,因此在上面的示例中,我们将输入:

sudo rm -rf /usr/local/include/php

1

两人说的正则表达式不正确。
而不是使用php.*php*应该使用^php*

那是正确的答案。
因此,您将使用:sudo apt-get purge "^php*"

尽管我不建议您使用这种方法来使它高度自动化,但我建议您使用此方法sudo apt list --installed | grep php来获取软件包列表,并使用从该命令中从上述命令获得的软件包名称:

sudo apt-get purge PACKAGENAME_ONE PACKAGENAME_TWO


例如,这不会删除libapache2-mod-php。
Patrick B.

@帕特里克·B。因此,您必须同时使用^php*php*
AmirHossein

但是php.*也将涵盖php出现在软件包名称开头的情况。我们没有理由同时使用^php*,并php.*另外,它应该是^php.*; apt-get似乎知道这php*是一个glob,而不是正则表达式,但是当您添加^字符时,它不可能是glob,因此您将获得所有以“ ph”开头的包。
Patrick B.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.