问题描述
每当我键入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
这应该是一种解决方法(备份,”fix”版本字符串):
cp /var/lib/dpkg/status ~/dpkg-status.back
sudo sed -i "s/56127_Ubuntu_karmic/56127Ubuntukarmic/" /var/lib/dpkg/status