我使用 zsh。当我尝试升级系统时,会弹出一些与 php 相关的软件包,我想删除它们
$ sudo apt-get upgrade
Reading package lists... Done
Building dependency tree
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
fonts-opensymbol kdelibs-bin kdelibs5-data kdelibs5-plugins kdoctools
libkcmutils4 libkde3support4 libkdeclarative5 libkdecore5 libkdesu5
libkdeui5 libkdewebkit5 libkdnssd4 libkemoticons4 libkfile4 libkhtml5
libkidletime4 libkio5 libkjsapi4 libkjsembed4 libkmediaplayer4
libknewstuff3-4 libknotifyconfig4 libkntlm4 libkparts4 libkprintutils4
libkpty4 libkrosscore4 libktexteditor4 libnepomuk4 libnepomukquery4a
libnepomukutils4 libplasma3 libsolid4 libssl1.0.0 libssl1.0.0:i386
libthreadweaver4 openssl php-pear php5-cli php5-common php5-curl php5-fpm
php5-gd php5-intl php5-mysql php5-pspell php5-readline php5-recode php5-snmp
php5-sqlite php5-tidy php5-xmlrpc php5-xsl
54 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 18.4 MB/20.0 MB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n]
我尝试过的:
sudo apt-get remove php
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php
▶ sudo apt-get remove php*
zsh: no matches found: php*
sudo apt-get remove php *
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package 'dropbox' is not installed, so not removed
E: Unable to locate package php
E: Unable to locate package avlfolder
E: Unable to locate package boot-scripts
E: Unable to locate package Calibre Library
E: Unable to locate package Desktop
E: Unable to locate package Documents
E: Unable to locate package Downloads
E: Unable to locate package Dungeons and Dragons Online
E: Unable to locate package Games
E: Unable to locate package java ide
E: Unable to locate package jdownloader
E: Unable to locate package lello
E: Unable to locate package liberam
E: Unable to locate package Music
E: Unable to locate package netbeans-8.0
E: Couldn't find any package by regex 'netbeans-8.0'
E: Unable to locate package netbeans-8.0.desktop
E: Couldn't find any package by regex 'netbeans-8.0.desktop'
E: Unable to locate package Pictures
E: Unable to locate package PlayOnLinux's virtual drives
E: Unable to locate package projects
E: Unable to locate package Public
E: Unable to locate package qtprojects
E: Unable to locate package Savage2
E: Unable to locate package sketchbook
E: Unable to locate package Templates
E: Unable to locate package text.txt
E: Couldn't find any package by regex 'text.txt'
E: Unable to locate package themes
E: Unable to locate package tor-browser-linux64-3.6.1_en-US.tar.xz
E: Couldn't find any package by regex 'tor-browser-linux64-3.6.1_en-US.tar.xz'
E: Unable to locate package Videos
E: Unable to locate package VirtualBox VMs
E: Unable to locate package workspace
E: Unable to locate package xal
我尝试了同样的方法,php5
但purge
没有任何变化。autoremove
也没有用
更新
由于我至今还没有答案,所以我跑了
sudo apt-get remove --purge php-pear php5-cli php5-common php5-curl php5-fpmphp5-gd php5-intl php5-mysql php5-pspell php5-readline php5-recode php5-snmpphp5-sqlite php5-tidy php5-xmlrpc php5-xsl
[sudo] password for elie:
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package php5-fpmphp5-gd
E: Unable to locate package php5-snmpphp5-sqlite
我一直在寻找更好的解决方案,无论如何我不明白如何安装它们php5-fpmphp5-gd
,php5-snmpphp5-sqlite
如果未安装它们,是否需要升级。系统如何检测到它们需要升级,但在我尝试删除它们时却没有检测到它们?
答案1
与 bash 不同,zsh 具有不同的 glob/通配符/扩展系统,因此其工作方式不同,php*
可能无法按预期工作。因此,您可以
使用 代替:sudo apt-get remove php*
引用:
sudo apt-get remove "php*"
猛击它:
bash -c "sudo apt-get remove php*"
注意:虽然这也是一个坏主意(如前所述)sudo apt-get remove php *
返回当前工作目录中文件和文件夹的名称(可能是你的主目录)因为*
- 但这也意味着如果终端当前工作目录中有任何以 开头的文件php
,您在使用 请求内容时可能会遇到问题php*
,因为它可能在扩展中包含这些文件名。
另一个 NB 你说的php5-fpmphp5-gd
并且php5-snmpphp5-sqlite
可能是更新的一部分,因为一些正在更新的软件包需要这些软件包作为新的依赖项。php5-fpmphp5-gd
和,可能是,,,...php5-snmpphp5-sqlite
php5-fpm
php5-gd
php5-snmp
php5-sqlite
(查看您提供的输出,这是因为这些点出现了换行符)你也许应该运行:
sudo apt-get remove --purge php-pear php5-cli php5-common php5-curl php5-fpm php5-gd php5-intl php5-mysql php5-pspell php5-readline php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
答案2
资质是 apt-get 的替代品,它可以轻松使用类似正则表达式的模式匹配多个包名称。
例如,列出所有已安装的包名称包含术语“php”的包:
aptitude search ~iphp
编辑:当使用 zsh shell 时,引用该参数以使其不会在波浪号上中断:
sudo aptitude search "~iphp"
或者卸载它们:
sudo aptitude remove ~iphp
或者
sudo aptitude purge ~iphp
咨询此引用了解有关 aptitude 搜索语法的更多信息。
注意:aptitude 比 apt-get 更强大,因此更容易破坏您的系统。在确认继续之前,请务必检查它计划删除、安装或降级哪些软件包。例如,有时为了满足您卸载软件包的请求,aptitude 需要卸载一堆依赖于它的其他软件包。
如果你想知道是什么原因导致 php 包首先被安装,你可以通过搜索包的反向依赖关系来做一些侦查工作:哪些包取决于软件包。默认情况下会安装推荐的依赖项,但可以覆盖此设置并安装不带“推荐”依赖项的软件包,或者在不删除原始软件包的情况下删除一些“推荐”依赖项。
列出当前安装的依赖于 php5-fpm 的软件包:
aptitude why php5-fpm
这在大多数情况下应该有效,但由于各种原因,有时系统无法判断是什么原因导致包自动安装 - 也许它曾经是某个东西的依赖项,但升级后不再被依赖,等等。
如果您command not found
在尝试使用 aptitude 时出现此错误,则需要将其安装到您的系统上,如下所示:
sudo apt-get install aptitude
注意:过去,人们常常警告人们不要交替使用 apt-get 和 aptitude 来实际修改系统,因为它们无法跟踪彼此自动安装了哪些软件包。这不再是一个问题(至少从 3 年前开始),它们都使用相同的方式记录自动安装了哪些软件包。
编辑:修复了 aptitude why 命令
答案3
您可以使用 purge、autoremove 和 remove。我使用 autoremove 作为示例。
$ sudo apt-get autoremove 'php*'
你也可以使用 aptitude
$ sudo aptitude remove 'php*'
检查已安装的软件包
$ sudo apt-cache policy 'php*'
如果所有这些都是 none,那么所有的 php 应用程序都没有安装
如果有已安装的软件包,您可以通过以下方式删除它
$ sudo apt-get autoremove 'packagename'
注意:清除和删除不一样。purge
删除包及其配置和remove
仅删除包。