如何修复"W: Duplicate sources.list entry"的问题?

每当我尝试运行sudo apt-get update时,我总是收到这个警告。
W: Duplicate sources.list entry http://archive.ubuntu.com/ubuntu/ precise-updates/main i386 Packages (/var/lib/apt/lists/archive.ubuntu.com_ubuntu_dists_precise-updates_main_binary-i386_Packages)
W: You may want to run apt-get update to correct these problems

以下是来自/etc/apt/sources.list文件的输出内容:
deb http://archive.ubuntu.com/ubuntu precise main restricted
deb-src http://archive.ubuntu.com/ubuntu precise main restricted

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

deb http://archive.ubuntu.com/ubuntu precise universe
deb-src http://archive.ubuntu.com/ubuntu precise universe
deb http://archive.ubuntu.com/ubuntu precise-updates universe
deb-src http://archive.ubuntu.com/ubuntu precise-updates universe

deb http://archive.ubuntu.com/ubuntu precise multiverse
deb-src http://archive.ubuntu.com/ubuntu precise multiverse
deb http://archive.ubuntu.com/ubuntu precise-updates multiverse
deb-src http://archive.ubuntu.com/ubuntu precise-updates multiverse

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

怎么修好它?
25个回答

你的 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官方支持的软件)。
  • 类型:类型可以是debdeb-srcdeb表示二进制存储库,deb-src表示源代码存储库。

  • 位置:http://archive.ubuntu.com/ubuntu是存储库的位置。

  • 发行版名称:Ubuntu版本的发行版名称。对于Ubuntu 12.04,它是precise,对于11.10,它是oneiric
    您可以访问Ubuntu Wiki查看更新的Ubuntu版本及其代号列表

  • 组件:可以是mainuniversemultiverserestricted。这些词表示软件包的支持级别和许可状态。

更多信息请参见此页面

请注意,一行中可以添加一个或多个组件,因此“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 默认提供。你可以按照以下步骤构建一个默认文件:
  1. 打开终端,首先将现有的 sources.list 文件重命名为 sources.list.bak 文件。(我们可以安全地删除它,但是谨慎是好的)。
    sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
  2. 然后打开 software-properties-gtk 来创建一个新文件。在终端或者按下 Alt+F2 打开 Dash 命令提示符,并输入下面的命令:
    software-properties-gtk
    

    注意:对于 Ubuntu 11.10 或更早版本,您需要在 software-properties-gtk 命令之前使用 gksu

  3. 窗口打开后,
    • Ubuntu 软件选项卡中选择所有四个类别
    • 更新选项卡中选择 precise-securityprecise-updatesprecise-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.listgoogle.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

问题随即得到解决。

6我做了什么导致我的sources.list.d中出现重复条目? - Seanny123
@Seanny123 这个很难说。 - Anwar
点击这里Solve Duplicate source.list entry,解决了我困惑的问题。试一试,如果对你有帮助,请赞扬O.A.K. - Peter M. - stands for Monica
1非常感谢。我一直在想重复出现的问题是如何发生的。最后你展示了sources.list.d文件夹。 - Isura Manchanayake
@IsuraManchanayake 很高兴知道它对你有帮助!它也花了我一些时间 :) - Anwar
1回答得很好,详细又周到。在你的更新以处理sources.list.d目录下的文件中,你解释了哪些文件/行是重复的。能否同样解释一下原帖中有哪6对重复的行(因为你说"你的文件有6个重复的地方")? - sancho.s ReinstateMonicaCellio
@sancho.s 奇怪的是,我在他贴出的配置中至少没有发现重复项!不知道为什么我写了那一行!可能是聊天讨论或其他原因导致的。但无论如何,那一行是错误的。有时这个错误也会因为/var/lib/apt/lists中的软件包列表文件格式不正确而引起。感谢你的好奇心! - Anwar
1查看我的sources.list.d文件夹的提示帮助我解决了这个问题。 - lcarsos

对于Ubuntu 12.04:
图形化方式: 按下Alt + F2,然后粘贴software-properties-gtk(或者您可以打开"软件中心",然后转到"编辑" > "软件源")。进入"其他软件"选项卡,选择重复的条目,然后点击"移除"按钮。

enter image description here


如果你需要一个命令行选项,这里就是:
cat /etc/apt/sources.list | perl -ne '$H{$_}++ or print' > /tmp/sources.list && sudo mv /tmp/sources.list /etc/apt/sources.list  

这个命令的作用是: cat 读取文件并将内容传递给 perl,后者会删除重复的行。然后,结果被保存到一个临时文件中,并将其移动以替换原始的 /etc/apt/sources.list 文件。

2只要解决问题,不要混淆视听和过多的细节。谢谢! - Peter M. - stands for Monica
真的成功了!不知道为什么,在12.04上也无法安装git。我没有选择删除,而是只勾选了明显重复的“Canonical合作伙伴”。 - davidkonrad
3我运行了这个一行命令,但是sudo apt-get update仍然抱怨有重复的条目,就好像什么都没有改变一样。如果有关系的话,我用的是12.04(具体来说是 elementary OS Luna)。 - waldyrious
这只猫 毫无用处,并且阻止你使用 sudo perl -i - tripleee

sources.list中的重复条目有多糟糕?

我不知道有多糟糕,但我不喜欢sudo apt-get update显示出重复的条目。

顺便说一下,这并不是很糟糕,只是告诉你有重复的条目。

SourcesList

sources.list文件是向Ubuntu安装添加或升级应用程序的关键因素。系统也会使用该文件进行系统更新。该文件基本上是系统了解从哪里下载程序进行安装或升级的路线图。

就像Windows更新一样。

您可以使用Y PPA Manager轻松删除重复的条目。

 sudo add-apt-repository ppa:webupd8team/y-ppa-manager -y
 sudo apt-get update
 sudo apt-get install y-ppa-manager -y

打开y-ppa-manager,从Dash中打开

输入您的管理员密码

enter image description here

双击高级选项

enter image description here

扫描并删除重复的PPA,然后点击确定。

enter image description here

需要一些时间(1或2分钟)来扫描和删除重复的PPA。

2在我的情况下,Y PPA一直显示没有找到重复项。我备份了source.list文件,然后将其删除,并运行sudo apt-get update命令重新创建源列表(ubuntu 12.04)。这对我起作用了。 - michel.iamit
在Ubuntu 14.04上对我有用,谢谢伙计..:) - Rahul Singh
1事情进行得非常顺利 - vector
1在我的情况下,使用14.04版本时一直显示未发现重复项 - Muhammad Omer Aslam

合作伙伴存储库在 /etc/apt/sources.list 和 /etc/apt/sources.list.d/precise-partner.list 中是重复的。
只需删除那些 "precise-partner" 文件,因为合作伙伴存储库已经存在于 sources.list 中。
sudo rm /etc/apt/sources.list.d/precise-partner.*

我收到了 rm: cannot remove '/etc/apt/sources.list.d/precise-partner.*': No such file or directory的信息。 - Dennis
1尝试使用 sudo rm /etc/apt/sources.list.d/*partner* 命令。同时检查你的 /etc/apt/sources.list 文件,查找重复的行。 - Eric Carvalho
没有运气,在该目录中我没有任何以“partner”命名的文件。而/etc/apt/sources.list根据uniq命令,没有包含任何重复项。 - Dennis

备份您的sources.list文件:
sudo cp /etc/apt/sources.list{,.backup}

现在移除原始内容并进行更新:
sudo rm /etc/apt/sources.list && sudo apt-get update

他如何在没有sources.list文件的情况下进行更新? - Anwar
它将重新填充。=) - wojox
我的没有重新填充 - musicman1979
回复到你备份的那个 - wojox
如何恢复到备份的列表?删除操作删除了很多重要的东西...这完全不安全.. - alvas
@alvas 以同样的方式备份它(我假设您通过将文件复制到某个地方来进行备份。将其复制回来)。 - sehe

我遇到了同样的问题,打开软件源。取消选中“Canonical Partners”。冲突是在“Canonical Partners”和“通过软件中心添加的Canonical Partners”之间。

如果你在你的source.list中找不到解决方法,那么请按照以下步骤操作:
  1. 左键点击设置图标(位于屏幕最上角),选择系统设置。
  2. 点击软件源并切换到其他软件。
  3. 取消选中一个“Canonical合作伙伴(源代码)-由Canonical为其合作伙伴打包的软件”文件和一个“Canonical合作伙伴-由Canonical为其合作伙伴打包的软件”文件,并点击关闭以离开。
  4. 同时按下CTRL + ALT + T键打开终端,然后输入sudo apt-get update

我按照你的建议操作了,但是仍然出现了这个错误。 - hsinxh
请将您的“软件源”图像发布在这里,以便查明罪魁祸首。 - all4naija
请在这里发布您的“其他软件”图片。 - all4naija

10.10及之前版本

应用程序 > Ubuntu软件中心 > 编辑 > 软件源 > 其他软件

或者

系统 > 管理 > Synaptic软件包管理器 > 设置 > 仓库

Software Sources config window

选择并删除重复条目。

适用于Ubuntu 9.10 - 12.04

有一个名为Y-PPA-Manager的应用程序可以完成这个任务,而且还可以做更多其他事情。

你可以通过终端这样安装它:

sudo add-apt-repository ppa:webupd8team/y-ppa-manager
sudo apt-get upgrade
sudo apt-get install y-ppa-manager

之后,只需启动应用程序并转到高级菜单即可。

enter image description here

然后选择“扫描并删除重复的PPA”,然后点击确定。

enter image description here


这是一个很酷的工具,但它并不能解决问题。我选择了这个工具,但之后仍然收到相同的警告信息。 - catch23

我搜索了这样的工具,但是没有找到任何一个... 所以,最后我用PHP自己编写了一个。
对于那些混乱不整洁的源代码,我表示抱歉。
chkdup - 截图:

enter image description here

作者

Mubarak Alrashidi (DeaDSouL)

要求:

  1. PHP。
  2. sudo。

安装:

  1. 打开终端。
  2. 如果没有安装PHP,请输入以下命令进行安装:sudo apt-get install php5 php5-cli
  3. 下载chkdup
  4. 将文件解压到任意位置。
  5. 输入命令:sudo sh install.sh

卸载:

  1. 打开终端。
  2. 进入工具所在路径。
  3. 输入命令:sudo sh uninstall.sh

如何使用:

只需打开终端,输入sudo chkdup即可。

常见问题:

install.sh文件的作用是什么?

安装程序将把chkdup.php移动到/opt/,然后在/usr/bin/创建一个符号链接。
卸载程序将删除以下文件: 1. install.sh 2. /opt/chkdup.php 3. /usr/bin/chkdup 4. 自身uninstall.sh 使用chkdup是否安全? 是的,因为它在尝试执行任何操作之前会备份当前的sources.list。但如果发生任何问题,我不负责任。全部责任将由您承担。
许可证 GNU通用公共许可证

刚刚试了一下,挺不错的,简单易用,很赞!很赞! - bmbaker