如何在ubuntu中删除损坏的包

Kra*_*mir 62 package-management apt

我无法移除破损的包裹。使用以下命令: sudo apt-get -f install 但我得到以下响应:

Preparing to unpack .../nodejs_0.10.28-1chl1~trusty1_amd64.deb ...
Unpacking nodejs (0.10.28-1chl1~trusty1) over (0.10.25~dfsg2-2ubuntu1) ...
dpkg: error processing archive /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb (--unpack):
 trying to overwrite '/usr/share/man/man1/node.1.gz', which is also in package nodejs-legacy 0.10.25~dfsg2-2ubuntu1
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Processing triggers for man-db (2.6.7.1-1) ...
Errors were encountered while processing:
 /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种命令,例如

 2015  sudo apt-get clean
 2020  sudo dpkg --configure -a
 2023  sudo apt-get autoremove
 2034  sudo apt-get upgrade && sudo apt-get -f install
Run Code Online (Sandbox Code Playgroud)

但我没有得到任何结果。我无法安装突触。任何想法如何删除损坏的包?

pre*_*mal 84

运行此命令以删除 ubuntu 中的损坏包。

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

删除软件包后,使用命令更新您的系统

sudo apt-get update

更新成功后重启系统。

  • 应始终避免使用此命令,因为它会破坏系统而不是修复 (9认同)
  • @rancho 取决于它是什么包。 (2认同)
  • 我认为**重新安装损坏的软件包**会减少破坏系统的变化。尝试“sudo apt install --reinstall packagename-here”。成功重新安装该软件包并且不再是损坏的软件包后,您可以正常删除它。 (2认同)

小智 16

我发现:

sudo dpkg --remove --force-remove-reinstreq <packagename>
Run Code Online (Sandbox Code Playgroud)

效果最好。如果它给你一个错误,它不会删除一个包,因为它被另一个包所依赖,也删除那个其他包。您必须多次重复此步骤,然后重新安装已删除的软件包。

force-remove-reinstreq是删除包的“核选项”。如果有另一个包取决于您要删除的包,它只会失败——同样,在这种情况下,也删除了依赖包。


g_p*_*g_p 15

打开终端并使用以下命令

sudo dpkg --purge nodejs-legacy
sudo apt-get install -f
Run Code Online (Sandbox Code Playgroud)

它应该可以解决您的问题。


Kra*_*mir 13

这解决了我的问题:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
Run Code Online (Sandbox Code Playgroud)


小智 11

如果您有一个损坏的依赖项(我遇到过openjdk),您将需要清除包并强制它跳过依赖项问题:

sudo dpkg -P --force-depends package_name
Run Code Online (Sandbox Code Playgroud)

我在另一个论坛找到了答案


Zuk*_*uko 5

这是一个:

像这样更新你的包裹列表

 sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

然后清理所有部分包

 sudo apt-get autoclean
Run Code Online (Sandbox Code Playgroud)

现在清理 apt 缓存

 sudo apt-get clean
Run Code Online (Sandbox Code Playgroud)

现在删除任何不必要的依赖项

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

从上面的命令中,您可以识别任何损坏的软件包并像这样强制删除它

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

最后清理任何其他带有依赖项的包

 sudo apt-get -f install 
Run Code Online (Sandbox Code Playgroud)

告诉我进展如何。


小智 5

以上没有对我有用。最终我编辑了 /var/lib/dpkg/status 文件并从那里删除了包。

艰难我不建议这样做,如果其他任何事情都失败了......

  • 这似乎是唯一对我有用的东西。即使是 --force-remove-reinstreq 所谓的“核选项”也无法删除违规包。谢谢你,先生。 (2认同)

use*_*426 5

rm /var/lib/dpkg/info/<package_name>.*
Run Code Online (Sandbox Code Playgroud)

例子:

rm /var/lib/dpkg/info/elasticsearch.*