如何从sources.list中删除格式错误的行?


68

根据在类似线程中找到的信息,我已经取消安装并重新安装了Ubuntu软件中心,并且我对第91行或类似内容得到了相同的响应。

我只是尝试上传屏幕截图,但是由于我是新用户,所以我不允许这样做。我也无法弄清楚如何剪切和粘贴任何内容,因此,当我尝试打开软件中心时,无论是什么情况,当我尝试在终端中输入命令进行卸载并重新安装时,我都必须手动输入错误屏幕上的内容,无论我得到以下相同的信息:

COULD NOT INTITIALIZE THE PACKAGE INFORMATION
An unresolvable problem occured while initializing the package information
Please report t:his bug against the 'update-manager' package and include the
following error message:
'E: Malformed line 91 in source list/etc/apt/sources.list (dist parse) 
E: The list of sources could not be read., 
E: The package list of status file could not be parsed or opened.

如何报告错误?关于这个还能做什么。我已经搜索了,每个人都说要做的所有事情都会把我带回到同一行错误消息。

因此,我不知道如何到达源列表中的第91行。告诉你说什么。抱歉,我真的很陌生。我需要的是找出如何到达那里并修正它所说的话。我真的不想不必重新分区硬盘驱动器并从头开始,所以我非常期待解决此问题。我需要能够安装新软件。


8
您可以/etc/apt/sources.list在第67行和第69行之间添加内容吗?
布鲁诺·佩雷拉

2
编辑您的问题以包括命令的输出cat /etc/apt/sources.list。不,您不需要清除所有内容。这是一个非常简单的问题(根据我的经验
Anwar 2012年

您不需要代表点即可发布输出。但是,您确实需要将输出设置为代码格式,否则由于您没有足够的表示点来发布多个链接,因此您将无法发布该输出。编辑问题并粘贴输出,然后突出显示输出,然后按CTRL + K将输出格式化为代码,然后保存更改。
mchid

Answers:


55

您的sources.list文件(或中的另一个*.list文件sources.list.d/)中的某些行断开了。

编辑错误中提到的文件以修复虚线。

  1. 为此,请运行以下命令(按Ctrl+ Alt+ T打开终端):

    sudo -H gedit /etc/apt/sources.list
    

    或者,您可能更喜欢使用基于终端的文本编辑器来打开文件,而不是并非所有Ubuntu系统都具有的Gedit:

    sudoedit /etc/apt/sources.list
    

    如有必要,请替换/etc/apt/sources.list为另一个文件名,即内某个文件的路径/etc/apt/sources.list.d/

  2. 查找格式错误的行(请参考错误中的行号,然后四处查看该点)。这些是正确格式化的行的示例:

    # Comment, marked by a line starting with '#'
    deb http://site.example.com/debian distribution component1 component2 component3
    deb-src http://site.example.com/debian distribution component1 component2 component3
    

    URL distribution和组件将有所不同。它不一定必须具有3个组件。

    任何不适合此格式的内容都是错误的。

  3. 保存文件并退出文本编辑器。然后在“终端”窗口中运行以下命令:

    sudo apt-get update
    

假设没有错误,此问题现已解决。您应该能够运行Sofware Center。

但是,虽然可以通过重新安装software-center软件包来解决软件中心的某些问题,但是大多数问题不能解决,因此,您原来的问题仍然存在。如果是这样,您可以发布一个新问题以获取帮助。


我认为有时对于基于Debian的发行版,您需要./在此行的末尾(如本例所示)
user10089632

27

快速方法

解决此问题的方法是sources.list从头开始构建条目。

deb http://archive.ubuntu.com/ubuntu precise main universe restricted multiverse
deb-src http://archive.ubuntu.com/ubuntu precise universe main multiverse restricted

deb http://security.ubuntu.com/ubuntu/ precise-security universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-updates universe main multiverse restricted
deb http://archive.ubuntu.com/ubuntu precise-backports universe main multiverse restricted

# deb http://archive.canonical.com/ubuntu precise partner
# deb-src http://archive.canonical.com/ubuntu precise partner

# deb http://extras.ubuntu.com/ubuntu precise main
# deb-src http://extras.ubuntu.com/ubuntu precise main
  • 复制以上内容(在灰色框中),然后sources.list以根用户身份打开文件。

    sudo -H gedit /etc/apt/sources.list在终端中输入并点击即可Enter完成工作。

  • 然后将复制的内容粘贴到sources.list-注意您可能需要precise用代表您的Ubuntu版本的代号替换-例如trusty14.04。然后保存并关闭gedit。

  • 然后sudo apt-get update,您将看到存储库列表已更新。

说明:在这里,我们使用来自Main Server的存储库条目将内容完全替换为另一个sources.list文件。如果要使用本地服务器,sources.list请参见以下方法。

推荐方法

转到Ubuntu来源列表生成器站点

  • 选择您的国家。
  • 选择所需的分支,例如主,受限,多重,Universe。
  • 选择所需的更新列表,-
  • 如果需要,请选择任何第三方存储库列表。
  • 单击页面底部的“ 生成列表 ”,将为您提供包含存储库的列表。
  • 复制该列表并替换为sources.list您拥有的文件。

大功告成 (我希望这个能帮上忙。)


5
奇怪的是,这不被接受!快速修复,/etc/apt/sources.list通过在行中添加##第一个字符来注释有问题的行。然后尝试sudo apt-get update
贵族亚伯拉罕·

3
也许它未被接受,因为用户可能启用了其他回购协议,如果这样做,他们将丢失它们。例如,VirtualBox的大多数用户都从Oracle的存储库中获得它。而且,Oracle在仓库中使用的软件包名称与Ubuntu在软件包中使用的软件包名称不同。因此,如果我将VirtualBox与Oracle的repo一起安装并遵循本指南,则我将一直坐在同一版本的VirtualBox中,而永远不会获得更新。决不。
约翰·斯科特

@FuzzyToothpaste如果这样做,它们不会丢失。它仅删除重复的条目。您的示例方案与此问题无关
Anwar 2015年

使用Ubuntu源列表生成器站点生成新的source.list文件时,请不要忘记更新GPG密钥。否则问题可能会一直存在
Tushar Goswami

6

从错误中可以看出,它表明您的sources.list文件输入错误。无法解析此错误的条目。此错误与软件中心无关,但主要与apt(程序包管理器)有关

解决此问题的方法是修复格式错误的行91条目。

如果您无法了解第91行的问题,请发布第91行,我们将为您提供帮助


6

请粘贴文件,/etc/apt/sources.list以便我们为您解决此问题。请参阅此简短教程答案,以了解如何执行此操作:

如何轻松与他人共享命令或文本文件的输出?


有时这可能是非常容易的修复,但是由于它是关键文件,因此必须首先备份 sources.list

  1. Ctrl+ Alt+ 打开终端T
  2. 类型/粘贴:(sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup这将创建备份副本)
  3. sudo sed -i -e '68d' /etc/apt/sources.list (这删除了有问题的行)
  4. sudo apt-get update (这将使用希望修复的文件更新数据库)

如果尝试执行步骤4时未发现任何错误,则有望解决此问题。您可以退出终端并返回到软件中心/更新管理器,它应该可以工作。

如果仍然有问题,可以使用从终端还原原始文件sudo cp /etc/apt/sources.list.backup /etc/apt/sources.list。在这种情况下,请将有问题的行甚至整个文件粘贴到pastebin中,然后我们可以提供进一步的帮助。


3
删除违规行可能不是一个好主意(但是,在执行此操作之前,请先备份一下内容)。如果这是用户需要的存储库怎么办?另外,如果将长行以某种方式分成两行,则将有两条格式错误的行(并且必须重复该过程)。man sources.list有一个包含示例的部分,可能要求用户将自己的内容与示例进行比较可能很有用,也许他可以确定问题所在并自己解决。我个人要等到他发布他的sources.list文件。
roadmr 2012年

@roadmr:谢谢,我完全同意您提出的所有方案。我只是觉得新手甚至可能不知道如何发布文件,更不用说文件中的特定行了,除非被告知如何。这启发了我写这篇自我QA-howto :-)
ish

@roadmr我相信,如果将一条长行拆分为两行,则会收到有关两条格式错误的行的错误消息。
mchid

请注意,如果-i.backup传递给sed,而不是仅仅-ised会让自己的备份文件。
伊莱亚·卡根

5

该文件/etc/apt/sources.list包含Web服务器的URL以及其他来源形式(例如cds)的位置,您可以从中检索软件和更新。它基本上告诉Ubuntu在哪里寻找新软件和对已安装程序的更新。您收到的错误消息意味着,文件以某种方式受到破坏。不知道文件的内容是什么,很难知道文件到底有什么问题。因此,您应该sudo more /etc/apt/sources.list为我们发布输出,以更好地帮助您。

如果文件混乱到无法修复,则可以使用Ubuntu Source List Generatorsources.list重新生成。但是您应该事先备份旧的。同样,这将导致您丢失对软件源所做的所有更改,例如在Sofware Center中。

解决此问题的更好方法是让我们了解您的问题 sources.list

发布后编辑sources.list

我相信您发布的文件应如下所示(请注意最后一行,最后缺少行/etc/apt/sources.list):

# /etc/apt/sources.list

deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 
deb http://security.ubuntu.com/ubuntu/ precise-security main restricted universe multiverse
deb http://archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://archive.canonical.com/ubuntu partner
deb-src http://archive.canonical.com/ubuntu partner

备份文件后,我将尝试使用源列表生成器,但这确实需要一段时间。我的笔记本电脑仍在HDD上,因此还没有那么快。我将source.list添加到上述消息中。
Odi1215'8

仅备份一个名为的文件就足够了sources.list
con-f-use

好吧,会的。然后,我将尝试使用源列表生成器吗?
Odi1215

正。是的。
con-f-use

我在sudo中输入了更多/etc/apt/sources.list,但没有任何反应。
Odi1215

5

请尝试sources.list通过放入sudo gedit /etc/apt/sources.list终端(可能会要求输入密码)来编辑文件,然后在gEdit的菜单编辑/首选项中选择启用“行号”,然后单击“显示行号”复选框,然后在您的错误中手动转到“行”,例如91或通过使用“搜索/转到行”(Ctrl + I可以解决问题)。

在此处输入图片说明

在第91行的开头,放置两个#符号(##)对该行进行注释,并通过这种方式将其从更新过程中删除(您也可以自行删除该行,建议您做一个备份)。

完成后,保存文件并关闭它。然后打开终端并运行sudo apt-get update,查看错误是否仍然出现。如果没有,请尝试打开更新管理器。

某种程度上,sources.list文件第91行中的文本似乎已损坏或存在某种错误,这意味着某些软件无法安装/更新/升级。

通过注释/删除错误的行,如果您尝试这样做,则将不会安装(如果尚未安装)该软件或将不会对其进行更新/升级。我建议您检查其中的那条线是从哪里来的(哪个软件需要它),并根据需要进行适当的修改,以确保一切正常。


4

如果您遇到任何如下所示的格式错误的行错误,我强烈建议您将行注释掉(在行之前添加#),而不是在/etc/apt/sources.list文件中将其删除。

E: Malformed line 91 in source list /etc/apt/sources.list (dist parse)

从以上的错误时,行号91/etc/apt/sources.list文件已损坏。要注释掉行号91,必须在终端上运行以下命令。

sudo sed -i '91s/\(.*\)/#\1/' /etc/apt/sources.list

91上面的代码中的代表行号。如果遇到任何格式错误的行错误,请用您的代码替换上面代码中的数字91。

在某些情况下,/etc/apt/sources.list.d目录中实际存在的列表文件中也会出现格式错误的行错误。例如,

E: Malformed line 1 in source list /etc/apt/sources.list.d/google.list (dist parse)

在这种情况下,我强烈建议您google.list通过运行删除文件sudo rm /etc/apt/sources.list.d/google.list,然后再次添加相应的PPA。

最后,通过sudo apt-get update在终端上运行命令来更新所有存储库。现在错误不会出现。


3

您必须删除该文件的最后一行(当然不是文件本身):

 /etc/apt/sources.list

您的sources.list文件必须看起来像这样:

# /etc/apt/sources.list
deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse 
deb http://security.ubuntu.com/ubuntu/ precise-security main restricted universe   multiverse
deb http://archive.ubuntu.com/ubuntu/ precise-updates main restricted universe multiverse
deb http://archive.canonical.com/ partner
deb-src http://archive.canonical.com/ partner

当然,仅用sources.list该文本替换文件可能是一件很糟糕的事情,尤其是如果以前看起来很不同的话。关键是每行以deb或开头deb-src(注释除外,以开头#)。


1
@Malika您好,很高兴这解决了这个问题。但是,请尝试回答不仅针对提问者的问题,还应回答针对Google这个问题并且对提问者的问题略有不同的人的问题。这可能需要更多的解释才能使其成为一个很好的“通用”答案。:)
Jjed 2012年

@JacobJohanEdwards我不同意您的意见,因为我们真的无法帮助那些在阅读问题之前执行命令的人,IMO
Anwar 2012年

2
@Anwar在我看来,答复者有责任(a)不以帮助原始问询者(过于本地化)的方式做出答复,(b)不能适当地警告a的潜在副作用命令。免责声明会有所帮助。
2012年

1

使用CTRL+ Alt+ 打开终端T并执行以下命令以删除第6行,这不是正确的存储库源代码行形式,因此容易给您有关格式错误的行的错误。

警告:不要先阅读问题,然后再执行此命令,此命令将删除/etc/apt/sources.list文件的第68行。检查您的问题是否相似,即使存在,也请替换68为您需要删除的行号

sudo sed -i.old '68d' /etc/apt/sources.list

此命令将删除该行sed。它将创建一个备份/etc/apt/sources.list.old。如果您不想要备份,则可以使用Plain -i而不是-i.old

或者,您可以使用Gedit手动删除该行。

  • Alt+ F2并输入gksu gedit /etc/apt/sources.list
    (如果没有,则gksu可以使用sudo -H gedit。)
  • 找到损坏的/etc/apt/sources.list并将其删除。
  • 保存并退出Gedit。

正确的存储库源代码行形式:

存储库源代码行的正确格式为:

<type of repository> <location i.e URI>  <dist-name> <components i.e main, universe>

例如:

  deb http://archive.ubuntu.com/ubuntu precise main
  • 类型: deb是回购的类型,表示它是二进制存储库,而不是具有类型的源存储库deb-scr
  • 位置: http://archive.ubuntu.com/ubuntu存储库的位置
  • Dist-name: precise是Ubuntu版本的发行名称。对于Ubuntu 12.04,11.10 preciseoneiric

  • 组件: main指示存储库的组件。Ubuntu存储库分为四个部分。

    1. -包含自由和开源软件,官方支持
    2. Universe -Canonical不支持这些软件,但由社区维护。
    3. 受限 -Canonical支持这些软件,但它们并非免费。支持这些以提供一些必要的驱动程序
    4. Multiverse-这些也是非免费软件,Canonical不支持。

有关更多信息,请参见此页面

您现在可以理解,这/etc/apt/sources.list不是存储库源代码行,因此您会apt-get抱怨它。



1
嗨,安瓦尔(Anwar),这是一个很好的答案,但是仅在其顶部放一个命令是非常有风险sudo sed的。许多具有相同问题(但情况略有不同)的人将看到此答案,并且会随意地运行它,并可能破坏他们sources.list无法修复的东西。在这种情况下,可能会采用更通用的方法(使用文本编辑器)。
2012年
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.