如何修复“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)组件。
-
类型:类型可以是
deb
和deb-src
。deb
表示二进制存储库,其中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版本及其代码名称的更新列表 。 -
组件:它可以是
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
因为,您要复制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键入以下命令software-properties-gtk
注意,对于Ubuntu 11.10或更早版本,您必须在
software-properties-gtk
命令之前使用gksu
-
窗户打开后,
- 在Ubuntu软件选项卡中选择所有四个类别
- 在“ 更新”选项卡中选择精确安全性 , 精确更新和精确后退类别。
- 从其他软件选项卡中选择Canonical partner和Independent 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.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
然后问题就解决了。
对于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
,那么执行以下操作:
- 左键单击设置图标(位于屏幕的最上角),然后选择系统设置。
- 单击“软件源”并转到“其他软件”。
- 取消选中Canonical为其合作伙伴文件打包的“Canonical Partners(源代码) – 软件”之一,以及Canonical为其合作伙伴文件打包的“Canonical Partners -software”之一,然后单击“关闭”离开。
- 同时按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)
要求:
- PHP。
- 须藤。
安装:
- 打开终端。
- 要安装PHP,如果没有,请输入:
sudo apt-get install php5 php5-cli
。 - 下载chkdup 。
- 在任何您喜欢的地方提取文件。
- 键入:
sudo sh install.sh
。
卸载:
- 打开终端。
- 转到您提取工具的路径。
- 键入:
sudo sh uninstall.sh
。
如何使用它:
只需打开终端并输入sudo chkdup
。
常见问题:
install.sh有什么作用?
- 安装程序会将
chkdup.php
移动到/opt/
然后在/usr/bin/
创建一个符号链接。
那个uninstall.sh怎么样?
-
卸载程序将删除以下文件:
-
install.sh
-
/opt/chkdup.php
-
/usr/bin/chkdup
- 本身
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
报告的重复条目将包含重复的函数条目,例如i386
和amd64
变体中都包含的存储库。 删除这些的简单有效的方法是注意哪些存储库通过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