Jak całkowicie usunąć PHP?

57

Muszę wyczyścić mój serwer z pakietów PHP 5.3 (jest ich mnóstwo), aby móc skompilować PHP 5.2. Jaka jest najłatwiejsza / najbezpieczniejsza metoda pozbycia się ich wszystkich?

corev
źródło

Odpowiedzi:

86

Powinno to całkowicie usunąć każdy pakiet o nazwie zaczynającej się od phpi wszelkich powiązanych z nim.

sudo apt-get purge 'php*'
RobinJ
źródło
OK, dziękuję wam obojgu. Właśnie wybrałem twoją odpowiedź, ponieważ Marco nie wydaje się mieć braku Karmy :)
corev
W porządku, jakieś pomysły na najlepszy sposób zainstalowania PHP 5.2?
corev
6
To dokładne polecenie właśnie wyczyściło WSZYSTKIE pakiety z mojego systemu. Nie radzę nikomu go używać.
Caballero,
13
php*sprawi, że będzie traktowany jako wyrażenie regularne, a każdy pakiet z phjego nazwą zostanie usunięty.
muru
4
Czy tylko ja uważam, że to naprawdę nie jest bezpieczny pomysł?
Daan,
67

I nie polecam uruchomiony sudo apt-get purge php*.

To było straszne! Na szczęście nie wpisałem tej -yopcji, ponieważ wybrałem około setki paczek bez phpich nazwy.

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

Jak to działa:

Po pierwsze , wykaz pakietów jest generowany przy użyciu tej serii poleceń: dpkg -l | grep php| awk '{print $2}' |tr "\n" " ".

Wskazówka: możesz uruchomić tę część polecenia w swoim terminalu, aby zobaczyć, które pakiety zostaną usunięte. Powinieneś dostać coś takiego: libapache2-mod-php5 php5 php5-cli php5-common php5-json

Wreszcie , po uruchomieniu pełnego polecenia, ta lista pakietów zostaje przekazana do sudo apt-get purge, usuwając wszystkie pakiety.

Wskazówka: jeśli wydaje ci się to bezpieczniejsze, możesz równie łatwo uruchomić je osobno, a także skopiować i wkleić listę pakietów do usunięcia w następujący sposób:sudo apt-get purge libapache2-mod-php5 php5 php5-cli php5-common php5-json

Bento
źródło
3
To powinna być zaakceptowana odpowiedź
Dark Star1
1
Wygląda na to, że sugerujesz, że jedna składnia jest zła, ponieważ jest zbyt szeroka, ale czy masz coś przeciwko wyjaśnieniu, co robi twoje polecenie, więc ludzie mogą być w stanie ocenić, czy jest to właściwe przed jego uruchomieniem?
Vince
2
Co jeśli aptitudenie jest zainstalowany lub nie można go zainstalować na Ubuntu, co powiesz na apt-get cachewyszukiwanie?
Vicky Dev,
17

Prawdopodobnie będziesz chciał usunąć wszystkie pakiety php * ze swojego systemu. Coś z symbolem wieloznacznym powinno działać

sudo apt-get purge php.*

Być może zainteresuje Cię powrót do PHP 5.2, gdzie możesz przejść dalej.

Marco Ceppi
źródło
5
php*sprawi, że będzie traktowany jako wyrażenie regularne, a każdy pakiet z phjego nazwą zostanie usunięty.
muru
3

Najpierw musisz usunąć Apache i wszystkie jego zależności za pomocą:

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

i wtedy:

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

Jeśli masz jakiekolwiek problemy z phpMyAdmin, spróbuj wprowadzić to w terminalu:

dpkg-reconfigure phpmyadmin
Leena Patel
źródło
*** Uwaga dla tych, którzy kopiują i wklejają bez uważnego czytania, spowoduje to również usunięcie apache, o co nie poprosił OP
adavea 16.04.2018
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

W twoim przypadku możesz wyszukać wszystkie pakiety:

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

a następnie oczyść je:

sudo apt-get purge <list of packages found>
krantboy
źródło
aptitudenie jest zainstalowany w moim systemie (16.04)
kleinfreund
Jeśli chcesz zainstalować aptitude, możesz to zrobić, piszącsudo apt-get install aptitude
Just In Time Berlake,
2

Oprócz wszelkich czystek wymienionych w innych odpowiedziach, jeśli chcesz mieć całkowitą pewność, że wszystko zostało usunięte, prawdopodobnie będziesz chciał uruchomić

cd /
sudo find -name "php"

Które pokażą Ci pliki / foldery z nazwą php w nich. Następnie będziesz chciał sprawdzić każdą z tych ścieżek plików, tj .:

cd /usr/local/include/php
ls

I usuń je odpowiednio. Uważaj jednak, aby nie usunąć niczego, co jest krytyczne dla innego procesu, który musisz kontynuować, chyba że chcesz to również zainstalować ponownie.

Aby usunąć katalog lub plik, używamy rmkomentarza z -rfflagą, więc biorąc pod uwagę powyższy przykład, wpiszemy:

sudo rm -rf /usr/local/include/php
Just In Time Berlake
źródło
1

Wyrażenie regularne, które obie osoby powiedziały, jest nieprawidłowe.
Zamiast używać php.*lub php*należy użyć^php*

To właściwa odpowiedź.
Więc użyłbyś:sudo apt-get purge "^php*"

Chociaż nie zalecam używania tej metody, ponieważ jest ona wysoce zautomatyzowana i zachęcam do skorzystania z niej, sudo apt list --installed | grep phpaby uzyskać listę pakietów i użyć tych nazw pakietów, które otrzymałeś z powyższego polecenia w tym poleceniu:

sudo apt-get purge PACKAGENAME_ONE PACKAGENAME_TWO

AmirHossein
źródło
To nie usuwa na przykład libapache2-mod-php.
Patrick B.,
@PatrickB. Więc musisz użyć obu ^php*iphp*
AmirHossein
Ale php.*obejmie również przypadki, w których phppojawia się na początku nazwy pakietu. Nie ma powodu, aby korzystać z obu tych opcji, ^php*a php.*także powinno być ^php.*; apt-get wydaje się wiedzieć, że php*jest globem, a nie wyrażeniem regularnym, ale kiedy dodasz ^znak, nie może to być glob, więc dostaniesz każdy pakiet zaczynający się na „ph”.
Patrick B.