完全删除应用程序的正确方法是什么?

use*_*949 667 package-management command-line

我在网上搜索了这些信息,发现了不同的命令行,如下所示:

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*
Run Code Online (Sandbox Code Playgroud)

那么,正确的做法是什么呢?有必要使用那个“*”吗?

之后,我还找到了这些命令:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)
Run Code Online (Sandbox Code Playgroud)

ger*_*ijk 829

  • apt-get remove packagename

    将删除二进制文件,但不会删除包的配置或数据文件packagename。它还将在安装时保持安装的依赖项不变。

  • apt-get purge packagename 或者 apt-get remove --purge packagename

    将删除有关包的所有内容packagename,但不会删除安装时随包一起安装的依赖项。这两个命令是等效的。

    当您想使用应用程序“重新开始”时特别有用,因为您弄乱了配置。但是,它不会删除驻留在用户主目录中的配置或数据文件,通常位于那里的隐藏文件夹中。也没有简单的方法可以将它们删除。

  • apt-get autoremove

    删除孤立的包,即曾经作为依赖项安装但不再安装的已安装包。在删除已经安装了您不再感兴趣的依赖项的包后使用它。

  • aptitude remove packagenameaptitude purge packagename(同样)

    还将尝试删除packagenameon需要但任何剩余包不需要的其他包。请注意,aptitude它只记住它已安装的包的依赖信息。

还有更多的存在。dpkg可以使用较低级别的命令(高级)或 GUI 工具,如 Muon、Synaptic、软件中心等。删除应用程序或执行与包管理交互的其他任务没有单一的“正确方法”。

您找到的列表只是示例。在接受操作之前,请确保您理解其含义并尝试它想要做什么(您需要Y在它实际执行建议的操作之前按)。

问题中的星号版本可能是错误的apt-get接受正则表达式而不是 glob 模式作为外壳。那么会发生什么

sudo apt-get remove application*
Run Code Online (Sandbox Code Playgroud)

如下:

  1. shell 尝试扩展application*查看当前目录中的文件。如果(通常情况下)它什么也没找到,它将返回未bash更改的 glob 模式(假设这里有默认行为 ---zsh会出错)。

  2. apt-get将删除其名称的包包含一个字符串,其满足的正则表达式application*,即,applicatio其次是任意数量的napplicatioapplicationapplicationnlibapplicatio,等。

  3. 要了解这有多危险,请尝试(没有 root 以实现双重安全)apt-get -s remove "wine*"-s将模拟该事情而不是执行该操作)---它会说将删除所有名称中带有“win”的包和依赖项,几乎整个系统...

可能,这个命令的意思是真的

 sudo apt-get remove "^application.*"
Run Code Online (Sandbox Code Playgroud)

(注意引号和点)这将删除名称以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.
Run Code Online (Sandbox Code Playgroud)

完全超出了包管理的范围。不要在不使用包管理器的情况下删除属于包的文件!它会变得混乱,并且是错误的做事方式。

如果您不知道文件属于哪个包,请尝试以下操作:

dpkg -S /path/to/file
Run Code Online (Sandbox Code Playgroud)

  • --purge 选项在尝试完全删除任何剩余的依赖项(包括它们的配置文件)时也很方便:`apt-get-autoremove --purge` 同样重要的是要注意主目录中的配置文件不受 --purge 的影响选项。这些您必须手动删除。 (13认同)
  • 这里有一个错误:apt-get 接受 RE,而不是 globs;所以 apt-get remove pack* 将删除所有以 pac 开头的包,后跟零个或多个 k ......这通常是意外的。我编辑了分析仪。另见 http://askubuntu.com/questions/210976/apt-get-remove-with-wildcard-removed-way-more-than-expected-why (2认同)
  • 我不是在问一个新问题。我指的是一个可能的变化,因为这个答案会使一些细节不正确。也就是说,似乎 `apt-get remove packa*` 确实采用了全局 `packa*` 而不是将其视为正则表达式:它匹配 `package` 但不匹配 `pack`。 (2认同)

Kur*_*sis 142

对于 Ubuntu 12.04 或更高版本,正确的方法是:

sudo apt-get --purge autoremove packagename
Run Code Online (Sandbox Code Playgroud)

详见这里

不要使用,packagename*因为这会删除意外的包并导致比它解决的问题更多的问题。或者,如果您必须,至少先使用-s, --simulate,--dry-run标志运行它,以确切了解不执行它会做什么。

  • 这是正确的答案,简短而简洁: (14认同)

pl_*_*ock 30

你可以使用这个命令:

sudo apt-get purge --auto-remove packagename
Run Code Online (Sandbox Code Playgroud)

它将清除所需的包以及随这些包安装的依赖项。该--auto-remove选项(作为 的别名autoremove)的工作方式类似于sudo apt-get autoremove。通过使用这个命令,我们可以运行一个命令:

sudo apt-get purge --auto-remove packagename
Run Code Online (Sandbox Code Playgroud)

代替:

sudo apt-get purge packagename
sudo apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

  • 虽然你是对的,但你也可以使用 `sudo apt-get --purge autoremove packagename`。相同的 1 个命令在这里 (2认同)

rev*_*dj1 7

您可以安全地使用sudo apt-get remove --purge applicationsudo apt-get remove applications99% 的时间。当您使用该purge标志时,它也会简单地删除所有配置文件。这可能是您想要的,也可能不是您想要的,这取决于您是否要重新安装所述应用程序。在application*将匹配以启动所有的应用程序application通常是插件,附加功能等要删除的主要应用。IE

sudo apt-get remove gedit*
Run Code Online (Sandbox Code Playgroud)

将删除gedit,gedit-pluginsgedit-common。通常没有必要这样做,因为大多数插件/相关程序都依赖于主应用程序,并且会在您卸载主应用程序时自动删除(或标记为删除)。

您的最后一个命令只是从已知具有凌乱卸载程序的应用程序中删除剩余部分,并且只是删除应用程序的任何残余部分。


vrc*_*cmr 5

我在互联网上找到了这个命令。

dpkg --purge --force-depends application
Run Code Online (Sandbox Code Playgroud)

http://www.debian-administration.org/article/Reinstalling_packages_to_fix_problems


Dan*_*Bob 5

我收到了一些删除包的错误消息,我发现唯一有效的方法是:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package
Run Code Online (Sandbox Code Playgroud)

我发现虽然只使用

dpkg --remove --force-remove-reinstreq package
Run Code Online (Sandbox Code Playgroud)

不删除包,它向我显示了要移动的文件的正确路径:

mv /var/lib/dpkg/info/package.* /tmp/
Run Code Online (Sandbox Code Playgroud)

用您的应用程序名称替换包。在 Ubuntu 中使用 sudo,在 Debian 中成为 root。