如何从 64 位 Ubuntu 中删除所有 i386 软件包?

yos*_*ile 37 64-bit package-management uninstall 32-bit

随着时间的推移,我安装了许多不再需要的 i386 软件包。如何清理系统并只使用 amd64 软件包?

Pyt*_*Nic 32

其他自动化解决方案很危险,并不总是有效 (1),所以这里有另一种方式

sudo aptitude purge `dpkg --get-selections | grep ":i386" | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)

或者

sudo apt-get purge `dpkg --get-selections | grep ":i386" | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)

(尝试始终且仅使用其中一种工具。由于 aptitude 在有依赖性问题时更好,因此我更喜欢这样。)

好主意也

dpkg --remove-architecture i386
Run Code Online (Sandbox Code Playgroud)

有可能

dpkg --print-foreign-architectures
Run Code Online (Sandbox Code Playgroud)

(1) 其他命令也列出了名称中只有 i386 的包(虽然它们是针对 64 位架构的),正则表达式不起作用,dpkg 显示已经删除但仍有配置文件的包(dpkg -l 显示“rc”而不是“ii”作为状态)。


Mat*_*ode 23

我把我所有的 32 位软件包都像这样:

sudo apt-get remove `dpkg --get-selections | grep i386 | awk '{print $1}'`
Run Code Online (Sandbox Code Playgroud)


Hen*_*enk 18

如果他们不妨碍你,我会把他们留在原地。

如果您坚持删除,请使用dpkg -l | grep i386来创建 i386-packages 列表。您可以在仔细检查诸如sudo apt-get purge <package-name>.

  • “经过仔细检查”——这是模糊的。请更清楚。 (3认同)
  • 除了 aptitude [在 multiarch 上损坏](https://bugs.launchpad.net/ubuntu/+source/aptitude/+bug/831768),所以不会那么好用:P (2认同)

Fra*_*sco 13

Debian的multiarch指南中提到此命令:apt-get purge ".*:<arch>",这看起来是这样的i386

sudo apt-get purge ".*:i386"
Run Code Online (Sandbox Code Playgroud)

然后您可以从 dpkg 中删除架构:

sudo dpkg --remove-architecture i386
Run Code Online (Sandbox Code Playgroud)


小智 9

如果有人想知道,有一种更加理智和优雅的方式来做到这一点。最后一个先前的答案希望做同样的事情,但该搜索失败了,因为体系结构实际上不是包名称的一部分,除非在特殊情况下。

以 root 用户(或使用 sudo)运行:

aptitude remove ~i~ri386
Run Code Online (Sandbox Code Playgroud)

如果您还没有使用 aptitude 而不是 apt-get,请使用。真是太棒了。您可以在此处找到 aptitude 的搜索词列表。


kev*_*rpe 6

还有另一种降低风险的方法:

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

这将只匹配以 结尾的包":i386",这是所有i386架构 Debian 包的标准命名约定。

  • @Lotus 我使用了 purge 并且它在 14.04 上工作。这仅在删除引号和插入符号后对我有用。`sudo apt-get purge .*:i386` (2认同)