如何删除Ubuntu中损坏的软件包


38

我无法删除破损的包裹。使用以下命令: 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)

我尝试了各种命令

 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

但是我没有得到任何结果。我无法安装突触。有什么主意该如何删除损坏的包装?


这里很少有建议--force-remove-reinstreq和建议--force-overwrite。请注意,只有当您是Linux专家时,才应使用这两个(尤其是第一个),因为它可能会完全破坏您的系统。
g_p

Answers:


55

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

sudo dpkg --remove --force-remove-reinstreq package_name 

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

sudo apt-get update

成功更新后重新启动系统。


5
应始终避免使用此命令,因为它会使您的系统崩溃而不是得到修复
rancho

2
@rancho取决于它是什么包。
菲利普(Philip)

不错,您总是写package_name的方式,但是我以疯狂的格式看到900行的列表,例如:Broken libopencv-highgui2.4v5:amd64 Conflicts on libopencv-highgui2.4 [ amd64 ] < 2.4.8+dfsg1-2ubuntu1 > ( libs )。等待LTS确实对我做了这个疯狂的把戏。
nyxee

您可以详细说明@rancho“它对您的系统造成的破坏要大于对它的修理” man dpkg并没有太大帮助。
StéphaneGourichon

这是唯一对我有用的东西。我在更新软件包时破坏了MySQL。现在,我无法清除或重新安装。因此,这挽救了我的生命。
Ankit Singhaniya

11

打开终端并使用以下命令

sudo dpkg --purge nodejs-legacy
sudo apt-get install -f

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


11

我发现:

sudo dpkg --remove --force-remove-reinstreq <packagename>

效果最好。如果它提示您由于另一个软件包所依赖而无法删除该软件包,则也请删除该另一个软件包。您必须多次重复此步骤,然后重新安装已删除的软件包。

force-remove-reinstreq是删除软件包的“核选项”。只有根据要删除的软件包有另一个软件包时,此操作才会失败-同样,在这种情况下,请删除相关软件包。


核选择工作,在那里清洗,清理,重新安装,autoremoves,同时通过dpkgapt-get失败。谢谢。
LAFK说恢复莫妮卡

这是最好的解决方案,如果你只是想核弹一切,重新开始。节省了我很多时间!(我还使用了--purge --move之后)
andersevenrud

请,package_name当我们在apt日志文件中有1000条以上的行(有些重复)时,您能给出一些如何填充的提示
吗?

4

这解决了我的问题:

sudo dpkg -i --force-overwrite /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb

因此,请随后将其标记为正确答案。
jarno

完美运作。
Shubham Patel

3

打开您的终端,然后逐行粘贴这些行

sudo rm -rf  /var/cache/apt/archives/nodejs_0.10.28-1chl1~trusty1_amd64.deb
sudo apt-get autoclean
sudo apt-get update
sudo apt-get upgrade

然后再试一次


2

如果这样做apt-get cleanapt-get -f install除非/var/lib/dpkg/status在Ubuntu中从文件中删除垃圾数据,否则会重复相同的错误。

假设我们需要删除apache损坏的软件包。最初,我们必须打开状态文件并搜索apache软件包。删除整个程序包描述并保存状态文件。然后尝试使用apt-get -f installapt-get clean


2

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

艰难的我不建议这样做,即使其他任何事情失败了...


这似乎是唯一对我有用的东西。甚至--force-remove-reinstreq的所谓“核选项”也无法删除有问题的软件包。谢谢你,先生。
Alex

1

以上都不对我有用

我用过sudo aptitude

它立即发现错误并提供了选项。您选择并修复它。


还为我在debian上修复了该问题-这是我唯一可行的解​​决方案。之前没有任何评论对我有用!谢谢!
Hirbod

0

这是一个:

像这样更新您的包裹清单

 sudo apt-get update

然后清理任何部分包

 sudo apt-get autoclean

现在清理apt缓存

 sudo apt-get clean

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

 sudo apt-get autoremove

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

 sudo dpkg --remove --force-remove-reinstreq package_name

最后抹去其他依赖包

 sudo apt-get -f install 

告诉我怎么回事。


我认为此命令是不正确的:`sudo dpkg --remove -force --force-remove-reinstreq package_name。
JuanSimón15年

吉...那么哪种方法是正确的?
Olu Smith

0
  1. 查询今天或昨天安装的所有软件包 awk -v foo=$(date '+%Y-%m-%d') -v bar=$(date -d "yesterday" '+%Y-%m-%d') '($1==foo || $1==bar) && $3~/^install$/ { print $4 }' /var/log/dpkg.log
  2. wine-qqintl:i386引起了问题,所以我删除了包装 sudo dpkg -r wine-qqintl:i386

  3. 完成。


1
好的,我们可以获得类似这样的最新安装的软件包,但这不能回答询问如何删除损坏的软件包的问题
Zanna

0

我有损坏的kodi包问题。我打开了突触包管理器,并使用“损坏的”过滤器定位了该包,并将其标记为可以完全删除。它像冠军一样运作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.