如何卸载一个 .deb 软件包?

假设我从一个网站下载了一个.deb包并安装了它。(我假设当我双击.deb文件时,通过与dpkg交互的图形界面(GUI)安装了该软件包,对吗?)
那么,我如何卸载它呢?
12个回答

手动安装的软件包会出现在软件中心中,与其他所有软件一起。只需在软件中心中搜索您的软件包,并在那里删除它即可。
您可能需要点击“显示N个技术项目”。

alt text

除此之外,还有几种方法:
Synaptic:
1. 转到“系统”→“管理”→“Synaptic软件包管理器” 2. 点击“状态”按钮,选择“已安装(本地或过时)” 3. 右键单击一个软件包,选择“标记为删除” 4. 点击“应用”按钮
这样做的好处是可以列出所有手动安装的软件包。

alt text

命令行
- 如果你知道软件包的名称,你可以使用sudo apt-get remove packagename来卸载它;如果你不知道软件包的名称,你可以使用apt-cache search crazy-app进行搜索,然后再使用apt get进行卸载。 - 你也可以使用dpkg --remove packagename来卸载软件包。

@GorgeEdison it's a security risk! :P @EveryoneElse, never mind I'm kidding :)

这也会让您知道系统上是否还有任何不必要的软件包,这些软件包可能是作为您的.deb软件包的依赖项安装的。使用sudo apt-get autoremove来摆脱它们。

1aerofs-installer-0(aerofs.com)在美国版Ubuntu软件中心(U.S.C.)中没有出现,只能通过命令行和Synaptic包管理器使用。有任何想法为什么会这样? - nutty about natty
1你可以使用“sudo apt purge package-name”命令来卸载软件包以及软件包的配置。 - kas
3+1 指向 synaptic - 软件中心没有显示该应用程序(Microsoft Teams,可能是因为还有另一个来自 Ubuntu 的版本?) - Breaker222
dpkg --remove webex 帮助我卸载了 Cisco Webex。谢谢! - Nagabhushan S N

使用dpkg-r(或--remove)标志来删除package_name:
sudo dpkg -r package_name

如果你必须强制删除它,请添加--force-all
sudo dpkg -r --force-all pkg_name

使用-P(或--purge)代替-r,如果您想同时删除配置文件。

53或者使用dpkg --purge package_name命令来彻底删除配置文件。 - Tom

每个解决方案都假设您知道或可以找到软件包的名称,但没有提供如何删除一个只有deb文件的软件包。为此,下面的命令将从deb文件中提取软件包名称并删除该软件包名称。
dpkg -r $(dpkg -f your-file-here.deb Package)

注意:这并不意味着被移除的软件包是由deb文件描述的确切版本,请小心操作。

4唯一正确的答案。卸载当前目录中所有*.deb文件的命令可能类似于:for PPP in *.deb ; do sudo dpkg -r $(dpkg -f "$PPP" Package) ; done - dess
1这应该是正确的答案,尤其是使用dess循环脚本。 - Dave
@YodaDaCoda 这真的非常有帮助。非常感谢你。 - undefined

打开Ubuntu软件中心(应用程序-> Ubuntu软件中心),然后搜索您想要卸载的软件包,并单击“移除”按钮:

alt text

或者从命令行:

sudo apt-get remove <package-name>

使用 dpkg 命令时,加上 -r 参数。
要获取更多信息,请参阅此 博文

如果你想要移除该软件包及其相关的所有配置文件:
sudo aptitude purge packagename

apt-get -y 潜在危险:

虽然事实是- 没有图形界面- 我们的选择有:

  • apt-get remove(或 "purge")packageName
  • dpkg -r packageName

其中,dpkg 可以从脚本中执行而不需要类似于 " -y " 的开关,而 apt 则需要此开关以避免用户输入。后果是,apt 可能会自动解决软件包依赖问题并删除命令中提供的目标之外的软件包

apt

注意当我移除 iptables 时,lxdufw 也被移除了。但是,如果我不想移除 lxd 呢?嗯,现在它已经消失了:

apt-get -y purge iptables
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED:
  iptables* lxd* ubuntu-standard* ufw*
0 upgraded, 0 newly installed, 4 to remove and 54 not upgraded.
After this operation, 23.2 MB disk space will be freed.
(Reading database ... 90906 files and directories currently installed.)
Removing ubuntu-standard (1.417.3) ...
Removing ufw (0.36-0ubuntu0.18.04.1) ...
Skip stopping firewall: ufw (not enabled)
Removing lxd (3.0.3-0ubuntu1~18.04.1) ...
Removing lxd dnsmasq configuration
Removing iptables (1.6.1-2ubuntu2) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...
(Reading database ... 90627 files and directories currently installed.)
Purging configuration files for ufw (0.36-0ubuntu0.18.04.1) ...
Purging configuration files for lxd (3.0.3-0ubuntu1~18.04.1) ...
Processing triggers for systemd (237-3ubuntu10.38) ...
Processing triggers for rsyslog (8.32.0-1ubuntu4) ...
Processing triggers for ureadahead (0.100.0-21) ...

dpkg

请注意,如果我在脚本执行中使用dpkg并拒绝删除ufwlxd,它会阻止我意外地更改系统。

dpkg -r iptables
dpkg: dependency problems prevent removal of iptables:
 lxd depends on iptables.
 ufw depends on iptables.

dpkg: error processing package iptables (--remove):
 dependency problems - not removing
Errors were encountered while processing:
 iptables

结论:

虽然确保我们的脚本成功完成并且不出错是正确的,但是如果一个脚本通过修改命令目标之外的系统来完成而不是失败,这可能是可取的。这种情况下,使用dpkg -r更适合脚本执行。


你可以使用remove和force标志:
$ sudo dpkg -r --force-all pkg_name 

或者,如果您通过Ubuntu软件包管理器安装它,可以使用apt将其卸载:

$ sudo apt remove --purge pgk_name

如果您仍然拥有.deb文件,这里是一种用户友好的方法:

  1. 双击.deb文件
  2. Ubuntu软件窗口将打开
  3. 点击“移除”按钮

安装的软件包将在Synaptics和软件中心中都可见。在前者中,它将出现在本地软件包下,在后者中则属于其他类别。