Ramón Asked: 2010-09-28 13:08:59 +0800 CST2010-09-28 13:08:59 +0800 CST 2010-09-28 13:08:59 +0800 CST 如何重建损坏的 dpkg 状态文件? 772 每当我键入sudo apt-get remove然后按Tab自动完成键时,我都会收到以下消息: grep-status: /var/lib/dpkg/status:15945: expected a colon . 我在状态文件的第 15945 行没有看到任何特别奇怪的地方。它是单声道库包的描述字段中的点字符,插入冒号没有帮助。删除包含点的行也不起作用。用 status-old 覆盖文件会产生相同的消息。 有没有办法重建状态文件? dpkg bash 8 个回答 Voted Jim 2010-10-05T07:20:38+08:002010-10-05T07:20:38+08:00 您应该能够使用以前已知的良好状态文件并从那里进行更新。 -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 在名为 status-old 的 /var/lib/dpkg/ 目录中创建的文件还有一个备份。 -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 update: sudo apt-get update 那应该这样做。 Best Answer Oli 2011-01-30T18:07:49+08:002011-01-30T18:07:49+08:00 我终于修复了我的系统。恢复状态文件的备份不起作用,因为我有这个问题很长时间了,它在我所有的备份中。 该修复涉及 grepping 实际的格式中断并手动修复它们。这并不像听起来那么难。 http://thepcspy.com/read/fixing-dpkg-status-corruption/ ordually 2011-08-26T08:08:28+08:002011-08-26T08:08:28+08:00 为有问题的软件包尝试“dpkg -P”。这将从本地存储库中清除它,删除所有痕迹。在我的系统上,这是对产生该错误的已删除(但尚未清除)包的修复。 gap 2011-07-09T03:41:52+08:002011-07-09T03:41:52+08:00 我能够通过删除状态文件中已损坏条目的包来解决此问题。 sudo dpkg -r handbrake-cli 通过 pcregrep 接受的解决方案不起作用(pcregrep 没有找到任何东西)。 arrange 2011-03-10T15:07:14+08:002011-03-10T15:07:14+08:00 在这种情况下,我将备份损坏的/var/lib/dpkg/status文件,然后使用来自 apt-cache show libssl0.9.8 apt-cache show udev htorque 2011-06-12T18:17:53+08:002011-06-12T18:17:53+08:00 这是一个错误(应该已修复):Launchpad Bug 613018 上游:Debian 错误 590885 这应该是一种解决方法(备份,“修复”版本字符串): cp /var/lib/dpkg/status ~/dpkg-status.back sudo sed -i "s/56127_Ubuntu_karmic/56127Ubuntukarmic/" /var/lib/dpkg/status Ramón 2010-09-30T15:57:28+08:002010-09-30T15:57:28+08:00 的儿子... 好的,实际错误出现在第 15266 行,尽管它被报告了大约 700 行。状态文件中有问题的条目是由我安装的一个 deb 引起的,以便让我的 Lexmark 打印机很久以前工作。这导致了解析错误。lexmark-inkjet-08-driver. 为了找到这个,我采用了一种散弹枪故障排除方法,并开始随机尝试。grep-status -P e. 如果可能的话,我想要另一个答案,它可以描述一种更好的方法来找到此类问题,以防将来有人遇到类似问题。谢谢。 Marcos 2014-08-30T01:23:02+08:002014-08-30T01:23:02+08:00 因为我的状态太老了,即使是apt-get update, 这对我来说效果很好: (作为根) cd /var/lib/dpkg cp -avf status status.corrupt tr -cd '\11\12\15\40-\176' < status.corrupt > status 此命令使用 tr 命令的 -c 和 -d 参数从输入流中删除除单引号之间显示的 ASCII 八进制值之外的所有字符。此命令专门允许以下字符通过此 Unix 过滤器: 八进制 11:制表符 八进制 12:换行 八进制 15:回车 八进制 40 到八进制 176:所有“好”键盘字符 在此翻译过程中,所有其他二进制字符(文件中的“垃圾”字符)都会被删除。 信用:http ://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix 如果您好奇发生了什么变化或损坏在哪里:(可能很长) diff /var/lib/dpkg/{status-old,status} |less
您应该能够使用以前已知的良好状态文件并从那里进行更新。
在名为 status-old 的 /var/lib/dpkg/ 目录中创建的文件还有一个备份。
因此,要从损坏中恢复,您应该能够执行以下操作:
1. 备份损坏的状态文件:
2. 从上述任一来源复制最近的 dpkg 状态文件:
任何一个
或者
3.然后运行apt-get update:
那应该这样做。
我终于修复了我的系统。恢复状态文件的备份不起作用,因为我有这个问题很长时间了,它在我所有的备份中。
该修复涉及 grepping 实际的格式中断并手动修复它们。这并不像听起来那么难。
http://thepcspy.com/read/fixing-dpkg-status-corruption/
为有问题的软件包尝试“dpkg -P”。这将从本地存储库中清除它,删除所有痕迹。在我的系统上,这是对产生该错误的已删除(但尚未清除)包的修复。
我能够通过删除状态文件中已损坏条目的包来解决此问题。
通过 pcregrep 接受的解决方案不起作用(pcregrep 没有找到任何东西)。
在这种情况下,我将备份损坏的
/var/lib/dpkg/status
文件,然后使用来自这是一个错误(应该已修复):Launchpad Bug 613018
上游:Debian 错误 590885
这应该是一种解决方法(备份,“修复”版本字符串):
的儿子...
好的,实际错误出现在第 15266 行,尽管它被报告了大约 700 行。状态文件中有问题的条目是由我安装的一个 deb 引起的,以便让我的 Lexmark 打印机很久以前工作。这导致了解析错误。
lexmark-inkjet-08-driver
.
为了找到这个,我采用了一种散弹枪故障排除方法,并开始随机尝试。
grep-status -P e
.
如果可能的话,我想要另一个答案,它可以描述一种更好的方法来找到此类问题,以防将来有人遇到类似问题。谢谢。
因为我的状态太老了,即使是
apt-get update
,这对我来说效果很好:
(作为根)
信用:http ://alvinalexander.com/blog/post/linux-unix/how-remove-non-printable-ascii-characters-file-unix
如果您好奇发生了什么变化或损坏在哪里:(可能很长)