你的 sources.list 真的有重复的条目。
首先,让我们看一下仓库行或源行的正确格式:
仓库源行的正确格式是
<type of repository> <location> <dist-name> <components>
例如,回购线可以像这样
deb http://archive.ubuntu.com/ubuntu precise main
这里的意思是,该存储库是用于二进制包的,这些包托管在
http://archive.ubuntu.com/ubuntu中,而该存储库是为Ubuntu precise (12.04)准备的,包含了主要组件(也就是Canonical官方支持的软件)。
类型:类型可以是deb
和deb-src
。deb
表示二进制存储库,deb-src
表示源代码存储库。
位置:http://archive.ubuntu.com/ubuntu
是存储库的位置。
发行版名称:Ubuntu版本的发行版名称。对于Ubuntu 12.04,它是precise
,对于11.10,它是oneiric
。
您可以访问Ubuntu Wiki查看更新的Ubuntu版本及其代号列表。
组件:可以是main
、universe
、multiverse
和restricted
。这些词表示软件包的支持级别和许可状态。
更多信息请参见此页面。
请注意,一行中可以添加一个或多个组件,因此“main”,“universe”,“restricted”和“multiverse”可以在同一行上。另请注意,即使在一行上添加了多个组件,APT系统也会将它们视为包含单个组件的单独行。
所以,如果你的sources.list文件中有像这样的一行:
deb http://archive.ubuntu.com/ubuntu precise universe
那么它就不能有像下面这样的另一行(你的文件中有的)
deb http://archive.ubuntu.com/ubuntu precise main universe
这相当于这两行的意思
deb http://archive.ubuntu.com/ubuntu precise main
deb http://archive.ubuntu.com/ubuntu precise universe
因为你重复了两次“宇宙”,所以会出现重复的错误。每找到一个重复项都会报错。
解决方案:
在分析了你的 sources.list 文件之后,我发现它是一个基本的文件,由 Ubuntu 默认提供。你可以按照以下步骤构建一个默认文件:
- 打开终端,首先将现有的
sources.list
文件重命名为 sources.list.bak
文件。(我们可以安全地删除它,但是谨慎是好的)。
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
- 然后打开
software-properties-gtk
来创建一个新文件。在终端或者按下 Alt+F2 打开 Dash 命令提示符,并输入下面的命令:
software-properties-gtk
注意:对于 Ubuntu 11.10 或更早版本,您需要在 software-properties-gtk
命令之前使用 gksu
- 窗口打开后,
- 在Ubuntu 软件选项卡中选择所有四个类别
- 在更新选项卡中选择 precise-security、precise-updates 和 precise-backports 类别。
- 在其他软件选项卡中选择 Canonical 合作伙伴 和 独立 类别。
就是这样。您现在拥有一个没有错误的默认sources.list
文件。如果您愿意,可以将此文件与之前的文件进行比较。
更新以处理 sources.list.d
目录的文件
有时候在 /etc/apt/sources.list.d
目录中的文件中可能存在重复的条目,该目录也被 APT 使用。因此,您应该查看该目录,并检查这些文件中是否存在重复项。重复项不一定需要出现在同一个文件中。
示例情况:
用户在执行 sudo apt-get update
时出现了以下错误信息。
W: Duplicate sources.list entry http://dl.google.com/linux/chrome/deb/ stable/main amd64 Packages (/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-amd64_Packages)
W: Duplicate sources.list entry http://dl.google.com/linux/chrome/deb/ stable/main i386 Packages (/var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_main_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems
但是在主要的/etc/apt/sources.list文件中没有包含http://dl.google.com的条目。查看/etc/apt/sources.list.d/目录,我们找到了以下文件:
ls /etc/apt/sources.list.d/的输出:
aims-sagemath-precise.list
aims-sagemath-precise.list.save
dropbox.list
dropbox.list.save
fossfreedom-packagefixes-precise.list
fossfreedom-packagefixes-precise.list.save
google-chrome.list
google-chrome.list.save
google.list
google.list.save
sagemath-monolithic-precise.list
sagemath-monolithic-precise.list.save
文件
google-chrome.list
和
google.list
是可能包含重复内容的良好候选文件。因此,有必要检查这两个文件的内容。
cat /etc/apt/sources.list.d/google-chrome.list
的输出结果为:
deb http://dl.google.com/linux/chrome/deb/ stable main
和 cat /etc/apt/sources.list.d/google.list
deb http://dl.google.com/linux/chrome/deb/ stable main
所以,Apt 源中存在重复条目。由于 google-chrome.list
只包含了一行 apt 的内容,并且在 google.list
文件中也有该条目,我们可以安全地使用以下命令删除该文件
sudo rm /etc/apt/sources.list.d/google-chrome.list
问题随即得到解决。
/var/lib/apt/lists
中的软件包列表文件格式不正确而引起。感谢你的好奇心! - Anwar