当前位置: 首页>>技术教程>>正文


bash – 如何重建损坏的dpkg状态文件?

,

问题描述

每当我键入sudo apt-get remove然后按auto-completion的Tab键时,我都会收到以下消息:

grep-status: /var/lib/dpkg/status:15945: expected a colon
.

在状态文件的第15945行,我看不到任何特别奇怪的东西。这是单声道库软件包的description字段中的点字符,插入冒号没有帮助。删除包含点的线也不起作用。用status-old覆盖文件会产生相同的消息。

有什么方法可以重建状态文件?

最佳答案

我终于解决了这个问题。恢复状态文件的备份不起作用,因为我遇到了很长时间的问题,这是所有备份中的问题。

该修补程序涉及grepping实际的格式中断,并手动对其进行修复。它并不像听起来那样难。

http://thepcspy.com/read/fixing-dpkg-status-corruption/

次佳答案

您应该能够使用先前已知的良好状态文件并从那里进行更新。每次执行安装或更新时,状态文件都会保存到/var /backups下的gzip压缩备份中。在目录上执行ls -l dpkg *显示:

-rw-r--r-- 1 root root   2266732 2010-09-30 08:35 dpkg.status.0
-rw-r--r-- 1 root root    624182 2010-09-29 08:49 dpkg.status.1.gz
-rw-r--r-- 1 root root    623844 2010-09-28 08:55 dpkg.status.2.gz
-rw-r--r-- 1 root root    620358 2010-09-24 11:04 dpkg.status.3.gz
-rw-r--r-- 1 root root    619021 2010-09-23 15:34 dpkg.status.4.gz
-rw-r--r-- 1 root root    619013 2010-09-23 08:03 dpkg.status.5.gz
-rw-r--r-- 1 root root    618968 2010-09-21 08:33 dpkg.status.6.gz

在/var /lib /dpkg /目录中创建的文件的备份也名为status-old。在目录上执行ls -l status *显示:

-rw-r--r-- 1 root root 2266732 2010-09-30 08:35 status
-rw-r--r-- 1 root root 2267191 2010-09-30 08:35 status-old

因此,要从损坏中恢复,您应该能够执行以下操作:

1.备份损坏的状态文件:

mv /var/lib/dpkg/status /var/lib/dpkg/status_bkup

2.从以上任一来源复制最新的dpkg状态文件:

要么

cp /var/lib/dpkg/status-old /var/lib/dpkg/status

要么

cp /var/backups/dpkg.status.#.gz /var/lib/dpkg/
gunzip -d /var/lib/dpkg/dpkg.status.#.gz 
mv /var/lib/dpkg/dpkg.status.# /var/lib/dpkg/status

3.然后运行apt-get更新:

sudo apt-get update

那应该做。

第三种答案

我可以通过删除状态文件中损坏条目的软件包来解决此问题。

sudo dpkg -r handbrake-cli

通过pcregrep接受的解决方案不起作用(pcregrep找不到任何东西)。

第四种答案

对于有问题的软件包,请尝试使用“ dpkg -P”。这将从本地存储库中清除它,删除所有跟踪。在我的系统上,这是修复了导致该错误的已删除(但尚未清除)软件包的修复程序。

第五种答案

在这种情况下,我将备份损坏的/var/lib/dpkg/status文件,然后使用来自以下位置的信息手动进行更正(在第1888和9550行附近)

apt-cache show libssl0.9.8
apt-cache show udev

第六种答案

这是一个bug(应该已修复):Launchpad Bug 613018

上游:Debian Bug 590885

这应该是一种解决方法(备份,”fix”版本字符串):

cp /var/lib/dpkg/status ~/dpkg-status.back
sudo sed -i "s/56127_Ubuntu_karmic/56127Ubuntukarmic/" /var/lib/dpkg/status

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11668.html,未经允许,请勿转载。