这是一个奇怪的问题,我找不到直接的解决方案。
我运行了sudo apt-get update && sudo apt-get upgrade -y
(我从来没有在这台机器上运行过它,但它和所有其他机器一样,都是 Ubuntu 服务器 12.04)。
它进行更新并进行部分升级,然后我收到此错误
(Reading database ... 80%dpkg: unrecoverable fatal error, aborting:
files list file for package 'mysql-common' is missing final newline
E: Sub-process /usr/bin/dpkg returned an error code (2)
现在,当我尝试运行任何 apt-get 命令时都会出现同样的错误。
我努力了:
apt-get clean
apt-get autoremove
apt-get install -f mysql-common
apt-get install --reinstall mysql-common
也许还有一些我现在想不起来的。
大多数情况下,并非总是如此,我可以准确地记得它发生在哪些命令上(我已经研究这个问题一段时间了)它以该错误结束。我仍然无法更新。
有任何想法吗?
编辑
Rehatcc 的回答让我根据错误检查了 mysql-common.filesfiles list file for package 'mysql-common' is missing final newline
该文件只是垃圾文本。
这是否类似于适用于所有系统的通用模板文件?我可以直接粘贴来自其他系统的文本吗?
答案1
去:
cd /var/lib/dpkg/info
类型
ls -l mysql*
如果出现“mysql-common.list”或“mysql-common.md5sums”等文件,请执行以下操作:
sudo mv ./mysql-common.list ~/mysql-common.list
如果存在
sudo mv ./mysql-common.md5sum ~/mysql-common.md5sum
重启系统。然后让我们知道之后您的状态(不工作...工作...半工作...)
注意:如果它们在该目录中,请用 cat 打开它们,查看末尾是否有空行或隐藏字符等(cat ./mysql-common.md5sum
)。如果您无法判断这些文件中是否有隐藏字符,请运行以下命令(它将删除这些文件中的所有字母、数字和斜线):
cat ./mysql-common.list | egrep -v [[:alpha:]]
除 /. 或 /.. 之外,此后显示的任何内容都是您的问题行。
答案2
我最近在使用另一个软件包(linux-libc-dev)时也遇到了同样的问题。
这是对我有用的解决方案(部分基于RedHatcc的答案):
注意:代码示例参考包linux-libc-dev\:armhf.list
——将其替换为您的包的名称。
验证列表文件是否无效
cd /var/lib/dpkg/info cat linux-libc-dev\:armhf.list
无效文件将显示为空或包含非字母数字字符。
有效的包列表将包含如下纯文本路径:
/. /usr /usr/include /usr/include/sound /usr/include/sound/asequencer.h /usr/include/sound/asound.h /usr/include/sound/sfnt_info.h
删除无效的包列表
sudo rm linux-libc-dev\:armhf.list
强制 APT 重新安装软件包,重新创建已删除的软件包列表
sudo apt-get install linux-libc-dev --reinstall
验证列表文件是否有效
有效的包列表将包含如下纯文本路径:
/. /usr /usr/include /usr/include/sound /usr/include/sound/asequencer.h /usr/include/sound/asound.h /usr/include/sound/sfnt_info.h
无效文件将显示为空或包含非字母数字字符。