如何修复“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 

我如何解决它?

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

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

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

     

例如,回购行可以像这样

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

这意味着,存储库是用于二进制包,它存放在http://archive.ubuntu.com/ubuntu中 ,此存储库用于Ubuntu精确(12.04),此存储库包含main(由官方支持的软件) Canonical)组件。

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

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

  • Dist-name: 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 

因为,您要复制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键入以下命令

     software-properties-gtk 

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

  3. 窗户打开后,

    • Ubuntu软件选项卡中选择所有四个类别
    • 在“ 更新”选项卡中选择精确安全性精确更新精确后退类别。
    • 其他软件选项卡中选择Canonical partnerIndependent category。

而已。 您现在有一个默认的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 

然后问题就解决了。

对于Ubuntu 12.04

图形:

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

在此处输入图像描述


如果您需要命令行选项,请执行以下操作:

 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以替换原始的/etc/apt/sources.list文件。

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

输入您的管理员密码

在此处输入图像描述

双击高级

在此处输入图像描述

扫描并删除重复的PPA并单击确定

在此处输入图像描述

扫描和删除重复的PPA需要一些时间(1或2个薄荷)

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

只需删除那些“精确合作伙伴”文件,因为合作伙伴存储库已存在于sources.list

 sudo rm /etc/apt/sources.list.d/precise-partner.* 

制作sources.list的备份副本:

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

现在删除原始并更新:

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

我有同样的问题,开放软件来源。 未经检查的“Canonical Partners”。 冲突发生在“Canonical Partners”和“Canonical partners by Software Center”之间

如果您无法在source.list ,那么执行以下操作:

  1. 左键单击设置图标(位于屏幕的最上角),然后选择系统设置。
  2. 单击“软件源”并转到“其他软件”。
  3. 取消选中Canonical为其合作伙伴文件打包的“Canonical Partners(源代码) – 软件”之一,以及Canonical为其合作伙伴文件打包的“Canonical Partners -software”之一,然后单击“关闭”离开。
  4. 同时按CTRL + ALT + T键打开终端并输入sudo apt-get update

对于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”并单击“确定”。

在此处输入图像描述

10.10和之前

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

要么

系统>管理> Synaptic Packet Manager>设置>存储库

软件源配置窗口

选择并删除重复的条目。

听起来你的/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文件中将不会留下任何来源。

我搜索了这样一个工具,但我没有发现任何……
所以,我最终用PHP编写了一个PHP

对不起脏无组织的源代码。

chkdup – 截图:

在此处输入图像描述

作者

穆巴拉克·阿拉希迪(DeaDSouL)

要求:

  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通用公共许可证

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

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

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

替代文字

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

这是因为建议的命令行只复制了更简单的内置uniq命令的function,只能在SORTED文件上工作,只会删除ADJACENT行。 此外,这些命令仅删除由相同字符串组成的行。

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

但是,应该注意的是apt-get update不仅通过sources.list查找重复的条目,还包括位于/var/lib/apt/lists/存储库文件。 如果Ubuntu认为需要它们,那么从那里删除重复的条目只会暂时删除apt-get update错误消息,因为文件将自动重新安装。 事实上apt-get update会将一些存储库报告为重复,然后建议您运行apt-get update来修复它们,这是一个线索,您真的不需要担心该错误消息。

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

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

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

好吧,我通过将/etc/apt/sources.d (作为root)重命名为其他东西并运行sudo apt-get update来重新建立目录及其内容,从而解决了Duplicate Entry问题。

手动浏览/etc/apt/sources.list sudo nano /etc/apt/sources.list并删除重复项。 apt-get update ,问题解决了。

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

使用Ubuntu源列表生成器 。

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

谷歌似乎有问题,所以我建议不要这样做。 我在Ubuntu 12.10上做了这个(添加了Ubuntu桌面的Studio版本和另一个桌面登录的Unity)。

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

我尝试使用终端完成其他用户提供的可能性,因为这就是你的要求,主要是:

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

然后输入

 sudo nano /etc/apt/sources.list 

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

编辑文件删除或在行的开头用#注释任何重复的行。

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

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

 sudo apt-get update 

玩得开心!

 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 

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

执行以下操作以删除重复项

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

如果是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仍然存在

对于uniq ,省略重复行并仅打印唯一条目是合适的工作,因此我们可以获取uniq输出并用uniq的输出替换旧文件:

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