完全删除应用程序的正确方法是什么?
我在网上搜索了这些信息,发现了不同的命令行,比如这些:
sudo apt-get remove application sudo apt-get remove application* sudo apt-get remove --purge application sudo apt-get remove --purge application* sudo apt-get purge application sudo apt-get purge application*
那么,正确的方法是什么? 是否有必要使用“*”?
之后,我还发现了以下命令:
sudo updatedb sudo locate application sudo rm -rf (file/folder name)
-
apt-get remove packagename
将删除二进制文件,但不删除程序包
packagename
的配置或数据文件。 它还会在安装时保持不变的情况下随附安装的依赖项。 -
apt-get purge packagename
或apt-get remove --purge packagename
将删除有关包
packagename
所有内容,但不会删除安装时随附安装的依赖项。 两个命令都是等效的。当您想要使用应用程序“重新开始”时,特别有用,因为您搞砸了配置。 但是,它不会删除驻留在用户主目录中的配置或数据文件,通常是在那里的隐藏文件夹中。 没有简单的方法可以删除那些。
-
apt-get autoremove
删除孤立的包,即已安装的包以前作为依赖项安装,但不再是。 删除已安装了您不再感兴趣的依赖项的软件包后,请使用此方法。
-
aptitude remove packagename
或aptitude purge packagename
(同样)还将尝试删除
packagename
所需的其他软件包,但任何剩余的软件包都不需要这些软件包。 请注意,aptitude
仅记住已安装的软件包的依赖关系信息。
还有更多存在。 可以使用较低级别的dpkg
命令(高级),或Muon,Synaptic,软件中心等GUI工具。 没有一种“正确的方法”可以删除应用程序或执行与包管理交互的其他任务。
您找到的列表只是示例。 确保您理解其含义并在接受操作之前尝试它想要做的事情(您需要在实际执行所建议的操作之前按Y
)。
问题中的星号版本可能是错误的 ; apt-get
接受一个正则表达式而不是一个glob模式作为shell。 那么会发生什么
sudo apt-get remove application*
如下:
-
shell尝试扩展
application*
查看当前目录中的文件。 如果(通常情况下)它什么都没找到,它会不加改变地返回glob模式(假设这里有bash
默认行为—zsh
会出错)。 -
apt-get
将删除其名称包含满足正则表达式application*
的字符串的包,即,applicatio
后跟任意数量的n
:applicatio
,application
,applicationn
,libapplicatio
等。 -
要了解这可能是多么危险,请尝试(没有root用于双重安全)
apt-get -s remove "wine*"
(--s
将模拟事物而不是这样做)—它会说会删除所有包在他们的名字和依赖,几乎整个系统中“赢”了……
也许,真正意义上的命令
sudo apt-get remove "^application.*"
(注意引号和点)将删除名称以application
开头的所有包。
这些命令,
sudo updatedb # <-- updates the locate database (index). harmless sudo locate application # <-- locates the file 'application'. harmless sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.
完全超出了包管理的范围。 不使用包管理器删除属于包的文件! 它会变得混乱,是做错事的错误方法。
如果您不知道文件属于哪个包,请尝试以下操作:
dpkg -S /path/to/file
对于Ubuntu 12.04而言可能更高,正确的方法是:
sudo apt-get --purge autoremove packagename
详情如下。
不要使用packagename*
因为它可以删除非预期的包并导致比它解决的更多问题。 或者如果你必须,至少首先使用-s
,– --simulate
, – --dry-run
标志运行它, --simulate
在不执行此操作的情况下确切地查看它将执行的操作。
您可以使用此命令:
sudo apt-get purge --auto-remove packagename
它将清除所需的包以及随这些包一起安装的依赖项。 --auto-remove
选项(作为autoremove
的别名)的工作方式类似于sudo apt-get autoremove
。 通过使用此命令,我们可以运行单个命令:
sudo apt-get purge --auto-remove packagename
代替:
sudo apt-get purge packagename sudo apt-get autoremove
您可以安全地使用sudo apt-get remove --purge application
或sudo apt-get remove applications
99%的时间sudo apt-get remove applications
。 当您使用purge
标志时,它也会删除所有配置文件。 哪个可能是您想要的,也可能不是,这取决于您是否要重新安装所述应用程序。 application*
将匹配所有以应用程序开头的application
,这些application
通常是您要删除的主应用程序的插件,附加function等。 即
sudo apt-get remove gedit*
将删除gedit
, gedit-plugins
和gedit-common
。 通常没有必要这样做,因为大多数插件/关联程序依赖于主应用程序,并且在卸载主应用程序时将自动删除(或标记为删除)。
您的最后一个命令就是从已知具有凌乱的卸载程序的应用程序中删除剩余部分,它只是删除应用程序的任何残余部分。
我收到一些删除包的错误消息,我找到的唯一方法是:
mv /var/lib/dpkg/info/package.* /tmp/ dpkg --remove --force-remove-reinstreq package
我发现虽然只使用
dpkg --remove --force-remove-reinstreq package
不删除包,它显示了要移动的文件的正确路径:
mv /var/lib/dpkg/info/package.* /tmp/
用您的应用程序名称替换包。 在Ubuntu中使用sudo,成为Debian中的root用户。
我在互联网上找到了这个命令。
dpkg --purge --force-depends application
http://www.debian-administration.org/article/Reinstalling_packages_to_fix_problems 。
这取决于您要删除的应用程序。 在发出yes命令之前,请务必检查其依赖关系。 当您通过命令行删除某些内容时,它有时会显示一些不再需要的库。 这些可以通过apt-get autoremove删除。
请注意,通过使用sudo等命令,删除–purge applicationname可能会删除其他应用程序所需的某些依赖项,因此可能会破坏您的系统。
如果您想以更安全的方式进行操作,只需使用软件中心或apt-get remove applicationname即可将其删除。 如果不再需要依赖项,请稍后发出apt-get autoremove。
我只想澄清一件似乎是混乱的事情。 dpkg
实用程序不知道或跟踪彼此相关的包依赖关系,这是我相信apt
开发的一个重要原因。 您可以在本页的 8.6节中阅读它.Debian GNU / Linux FAQ – Debian软件包管理工具
-
使用apt:如果我想清除包A,并且它有一个名为包B的依赖项,而包B没有其他依赖包,那么包A和B将被清除。 如果包B DID具有其他依赖包,则仅清除包A。
-
用dpkg:什么依赖? 你刚告诉我清除该死的
包这就是我做的! 你的计划不好不会
对我来说构成紧急情况。
话虽如此,这里有两个单行,可以用于每个清除方法:
dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')
删除--dry-run
以执行实际的清除操作,而不是报告它将采取的操作。