如何修复“ W:重复的sources.list条目”?


190

每当我尝试跑步时,我都会不断收到此警告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

我如何解决它?

Answers:


229

您的sources.list实际上有重复的条目。

首先,让我们看一下存储库行或源代码行的正确形式:

存储库源行的正确格式是

<type of repository>  <location>  <dist-name> <components> 

例如,回购行可以像这样

  deb http://archive.ubuntu.com/ubuntu precise main

在这里,这意味着该存储库用于二进制程序包,这些程序包托管在http://archive.ubuntu.com/ubuntu中,该存储库用于Ubuntu精确(12.04),并且该存储库包含主要的(由正式支持的软件规范)组件。

  • 类型:类型可以是debdeb-srcdeb表示二进制存储库,其中deb-src表示源存储库

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

  • Dist-name: Ubuntu版本的发行名称。对于Ubuntu 12.04,是precise11.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

因为您要复制Universe两次,所以该重复项会有错误。对于找到的每个重复项,都会给出一个错误。

解:

分析您的sources.list文件后,我发现,这是Ubuntu默认提供的基本文件。您可以按照以下步骤构建默认文件:

  1. 打开终端,然后首先将现有sources.list文件重命名为sources.list.bakfile。(我们可以放心地删除它,但要谨慎行事)。

     sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
    
  2. 然后打开software-properties-gtk以构建一个新的。在终端或破折号命令提示符中按Alt+ 键入以下命令F2

    software-properties-gtk
    

    注意,对于Ubuntu 11.10或更早版本,必须gksusoftware-properties-gtk命令之前使用

  3. 窗口打开后,

    • Ubuntu软件选项卡中选择所有四个类别
    • 在“ 更新”选项卡中选择“ 精确安全性”,“ 精确更新”和“ 精确备份”类别。
    • 其他软件选项卡中选择Canonical合作伙伴独立类别。

而已。您现在有了一个sources.list没有错误的默认文件。如果需要,将此文件与上一个文件进行比较。


更新以处理sources.list.ddir的文件

有时,/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

但是http://dl.google.com/etc/apt/sources.list文件中没有条目。查看/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

然后问题解决了。


5
我怎样做才能使自己在sources.list.d中有重复的条目?
Seanny123

@ Seanny123这很难说。
Anwar

1
非常感谢你。我想知道几个小时是如何重复的。最后,您展示了sources.list.d
Isura Manchanayake

1
好的和彻底的答案。在用于处理sources.list.d目录的更新中,您说明了哪些文件/行提供了重复项。您能否类似地解释给出重复项的OP中有6对行(因为您说“您的文件中有6个重复项”)?
sancho.s

1
检查我的sources.list.d的提示是帮助我解决此问题的原因。
lcarsos '16

80

对于Ubuntu 12.04

图形化:

Alt+ F2并粘贴software-properties-gtk(或者您可以打开“软件中心”,然后转到“编辑”>“软件源”)。转到选项卡“其他软件”,选择重复的条目,然后按“删除”按钮。

在此处输入图片说明


如果需要命令行选项,则为:

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.

确实有效!由于某种原因,也无法在12.04上安装git。我没有删除,而是检查了明显重复的“规范合作伙伴”。
davidkonrad,2014年

3
我运行了单行代码,但sudo apt-get update仍然抱怨重复的条目,好像什么都没有改变。如果有关系,我使用的是12.04(特别是基本OS Luna)。
waldyrious

cat是无用的,并阻止您使用sudo perl -i
Tripleee

24

sources.list中重复条目的严重程度如何?

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

顺便说一句,还不错,它只是向您显示您有重复的条目。

资料清单

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

输入您的管理员密码

在此处输入图片说明

双击高级

在此处输入图片说明

扫描并删除重复的PPA,然后单击“确定”

在此处输入图片说明

扫描并删除重复的PPA将花费一些时间(1或2分钟)


2
就我而言,Y PPA一直说没有发现重复。我做了一个source.list的备份,将其删除,然后运行sudo apt-get update来重新创建源列表(ubuntu 12.04)。这对我有用。
michel.iamit 2013年

1
为我在Mint 17上工作,谢谢!
spences14年

在ubuntu 14.04上为我工作..谢谢朋友.. :)
Rahul Singh

1
像魅力一样工作
矢量

1
以我在14.04的情况为例,它一直说 没有发现重复
Muhammad Omer Aslam,

16

合作伙伴存储库在/etc/apt/sources.list和中重复/etc/apt/sources.list.d/precise-partner.list

只是删除那些“精确伴侣”文件作为合作伙伴资源库中已经存在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
丹尼斯

1
尝试sudo rm /etc/apt/sources.list.d/*partner*。还要检查您的/etc/apt/sources.list,查找重复的行。
埃里克·卡瓦略

运气不好,我在该目录中没有任何带有“伙伴”名称的文件。并且/etc/apt/sources.list根据,不包含任何重复项uniq
丹尼斯

10

备份您的sources.list的副本:

sudo cp /etc/apt/sources.list{,.backup}

现在删除原始文件并更新:

sudo rm /etc/apt/sources.list && sudo apt-get update

没有sources.list文件怎么更新?
安瓦尔2012年

它将重新填充。=)
wojox 2012年

我的
人口

恢复到您备份的备份
wojox 2014年

如何还原到备份列表?去除去除了很多重要的东西...这完全不安全
。.– alvas

8

我有同样的问题,打开软件源。未选中“规范合作伙伴”。冲突发生在“规范合作伙伴”和“软件中心添加的规范合作伙伴”之间


7

如果您无法在中找到答案source.list,请执行以下操作:

  1. 左键单击设置图标(位于屏幕的最右上角),然后选择系统设置。
  2. 单击软件源,然后移至其他软件。
  3. 也取消选中“ Canonical为合作伙伴打包的”经典合作伙伴(源代码)”软件之一和“ Canonical为合作伙伴打包的”“经典合作伙伴”软件之一,然后单击“关闭”退出。
  4. 同时按CTRL+ ALT+ T键打开终端并键入sudo apt-get update

我遵循了您的建议,但仍然出现此错误。
hsinxh 2012年

请在此处发布“软件源”的图像,以了解罪魁祸首。
all4naija 2012年

请在此处发布“其他软件”的图像。
all4naija 2012年

6

10.10及更早版本

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

要么

系统>管理> Synaptic数据包管理器>设置>存储库

软件来源配置窗口

选择并删除重复的条目。


5

对于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

之后,只需启动应用程序,然后转到“高级”菜单。

在此处输入图片说明

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

在此处输入图片说明


这是很酷的工具,但不能解决问题。我做了这个选择,之后有同样的警告。
nazar_art 2013年

4

听起来/etc/apt/sources.list文件中有两行相同。

转到终端,然后输入sudo editor /etc/apt/sources.list,然后在该文件中查找任何相同的行,如果找到它们,则将其删除。完成后,保存并退出,然后执行操作sudo apt-get update,那应该可以解决您的问题。

如果那不能解决您的问题,那么您将不得不使用反复试验的方法。首先,创建sources.list文件的备份,然后在实际文件中遍历并注释掉或删除每行,apt-get update在注释掉或删除每行之后保存并添加-ing。逐行注释掉不同的行,最终将告诉您哪一行是多余的。如果apt-get update仍然显示相同的提示,请不要忘记注释任何行,否则sources.list文件中将没有任何源。


4

我搜索这样的工具,但我没有发现任何......
所以,我结束了编码一个自己PHP

对不起,肮脏的未经组织的源代码。

chkdup-屏幕截图:

在此处输入图片说明

作者

穆巴拉克·阿拉希迪(Moubarak Alrashidi)

要求:

  1. PHP。
  2. 须藤

安装:

  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/

那uninstall.sh呢?

  • 卸载程序将删除以下文件:

    1. install.sh
    2. /opt/chkdup.php
    3. /usr/bin/chkdup
    4. 本身 uninstall.sh

使用chkdup安全吗?

  • 是的,因为它会在尝试执行任何操作之前先备份当前sources.list。但是,如果发生任何事情,我概不负责。全部责任将由您承担。

执照

GNU通用公共许可证


刚刚尝试了一下,很好很简单:-)很好:-)
bmbaker 2012年

3

你检查了ls /etc/apt/sources.list.d/吗?也许那里有一些“额外的”存储库?


2

安装ubuntu-tweak并从那里删除重复的条目。

sudo add-apt-repository ppa:tualatrix/ppa
sudo apt-get update
sudo apt-get install ubuntu-tweak

替代文字


这里没有说怎么做。
RolandiXor

1

不,没有一个命令行可以查找和删除/etc/apt/sources.list文件中的重复条目。

这是因为建议的命令行仅复制了更简单的内置uniq命令的功能,它们仅适用于SORTED文件,并且仅删除ADJACENT行。此外,这些命令将仅删除由相同的字符串组成的行。

报告的重复条目apt-get update将由重复的功能条目组成,例如其i386amd64变体中都包含一个存储库。删除这些存储库的简单有效方法是注意通过apt-get update将哪些存储库报告为重复存储库,并通过软件中心将其删除。打开它,然后选择“ 编辑” ->“ 软件源” ->“ 其他软件”选项卡。只需查找重复的条目,然后取消选中它们。(source-code如果您不编译软件包,这也是删除所有存储库的机会)。

但是,应该注意的是apt-get update,不仅通过查找重复条目sources.list,而且还包含位于中的存储库文件/var/lib/apt/lists/。从那里删除重复的条目只会apt-get update在Ubuntu认为需要错误消息时暂时删除错误消息,因为这些文件将自动重新安装。apt-get update将某些存储库报告为重复的事实,然后建议您自己运行apt-get update以对其进行修复,这一事实表明您确实不需要担心该错误消息。


1

就我而言,重复项在prerequists-sources.list文件中。我可以通过在终端中运行以下命令来继续升级:

sudo mv /etc/apt/sources.list.d/prerequists-sources.list /tmp
sudo apt-get update

然后转到Update Manager并安装更新。


不必移动到/ tmp。重命名为不止于此的东西.list就足够了
Daniel Alder 2014年

1

好吧,我自己通过重命名/etc/apt/sources.d(作为根用户)并运行sudo apt-get update来重新建立目录及其内容,从而解决了重复输入的问题。


1

经历了/etc/apt/sources.list手动sudo nano /etc/apt/sources.list和除去重复项。之后apt-get update,问题得以解决。


1

在其中,/etc/apt/sources.list您必须注释(#在行的开头添加)重复的存储库条目并保存更改。之后重复sudo apt-get update


1

使用Ubuntu Sources List Generator

  • sudo -H nautilus在终端中运行
  • /etc/apt/sources.list
  • 右键单击并使用文本编辑器打开文件(如果单击它,将打开软件源GUI)
  • 只需复制并粘贴到中sources.list并保存。
  • 退出终端,您就完成了。

Google似乎有问题,因此建议您将其排除在外。我已经在Ubuntu 12.10(添加了Ubuntu桌面的Studio版本和另一个登录的Unity的Studio版本)上完成了此操作。


1

只需编辑文件/etc/apt/sources.list(例如使用sudo -H gedit /etc/apt/sources.list),然后删除重复的行或#在行的开头放置。


1

我尝试使用终端来完成其他用户提供的功能,因为这是您所要求的,主要是:

如果使用的是基于文本的安装,请登录;如果使用的是GUI,请按Alt+ F2并键入gnome-terminal

然后输入

sudo nano /etc/apt/sources.list

(为了更好地理解,/etc您可以在目录中(几乎)找到计算机的所有配置文件,并且在apt目录中找到souces.list包含APT用于更新或安装和升级软件的所有存储库的文件)

编辑该文件,以删除#该行或在该行的开头添加注释,或将所有重复的行添加到该行。

Ctrl+ X退出,然后按y保存文件(或n退出而不保存)。

然后更新以查看是否已修复:

sudo apt-get update

玩得开心!


我还认为,像vim这样的经过改进的文本编辑器可以自动查找重复项,但是我不知道该怎么做才能获得任何有趣的信息
Pitto

0
S="/etc/apt/sources.list" ;
S2="$S ${S}.d/*.list" ;
grep -b "^deb\`cat $S2 |
    grep -i "^deb[[:space:]]http" |
    sort |
    uniq -dc |
    sed -e 's;[[:space:]]\\+[[:digit:]]\\+[[:space:]]\\+deb\\(.\\+$\\);\\1;g'\`$" $S2

*插入换行符以提高可读性。


2
请说明答案,否则可能会被删除。
jokerdino

欢迎来到Ask Ubuntu!作为指示jokerdino,这个答案将大大受益,如果你要编辑它添加一些解释(或者至少告诉用户究竟做什么用这些行)。
伊莱亚·卡根

这个答案是错误的,因为它可能会删除重复的条目,但不会删除重复的源条目看到这里的解释
Anwar 2012年

0

执行以下操作删除重复项

cat /etc/apt/sources.list | perl -ne '$H{$_}++ or print' > /tmp/sources.list && sudo mv /tmp/sources.list /etc/apt/sources.list  

对此的更多信息

0

如果是 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)

打开: sources.list.d

rm google.list

所以只有google-chrome.list遗体


0

uniq省略重复行并仅打印唯一条目的适当工作,因此我们可以输出uniq并将输出替换为旧文件uniq

 sort /etc/apt/sources.list | uniq > /tmp/sources && sudo mv /tmp/sources  /etc/apt/sources.list

1
uniq需要排序的输入。
muru

sort -u做同样的工作=)
AB
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.