问题描述
我在网上搜索了这些信息,发现了不同的命令行,就像这些:
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
只会记住它已安装的软件包的相关性信息。
还有更多的存在。可以使用Lower-level dpkg
命令(高级)或GUI工具,如Muon,Synaptic,Software Center等。没有单个’correct way’用于移除应用程序或执行与包管理相互作用的其他任务。
您找到的列表只是示例。确保您理解含义并在接受该操作之前尝试执行其操作(在按照建议实际执行操作之前,您需要按Y
)。
问题中的星号可能是错误的; apt-get
接受正则表达式而不是shell作为glob模式。所以会发生什么
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
将模拟事情而不是做它)—它会说将删除所有名称中包含”win”的包,几乎整个系统…
可能,这个命令是真的
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
如详细的here。
不要使用packagename*
,因为它可以删除非预期的软件包并导致比解决问题更多的问题。或者如果必须的话,至少应该先用-s
,--simulate
,--dry-run
标志运行它,以便确切地看到它会做什么而不做它。
第三种解决方法
你可以使用这个命令:
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%的时间。当您使用purge
标志时,它也会删除所有配置文件。这可能是也可能不是你想要的,取决于你是否想重新安装所述应用程序。 application*
将匹配以application
开头的所有应用程序,这些应用程序通常是要删除的主应用程序的插件,附加功能等。即
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。