Як виправити "W: повторюваний запис source.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

Як це виправити?

Відповіді:


229

У вашому Source.list дійсно є копії записів.

Спочатку давайте подивимось правильну форму рядка сховища чи рядка джерела:

Правильний формат вихідного рядка сховища

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

Наприклад, лінія репо може бути такою

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

Тут, це означає, що сховище призначене для бінарних пакетів, розміщених у http://archive.ubuntu.com/ubuntu, і це сховище є для Ubuntu точним (12.04), і це сховище містить головне (програмне забезпечення, яке офіційно підтримується Канонічний) компонент.

  • Тип: тип може бути debі deb-src. debозначає бінарне сховище, де deb-srcозначає сховище джерела

  • Місцезнаходження: http://archive.ubuntu.com/ubuntu місцезнаходження сховища.

  • Dist-name: ім'я розповсюдження випуску Ubuntu. Для Ubuntu 12.04 - це precise, для 11.10 - це oneiric.
    Ви можете відвідати Ubuntu Wiki, щоб переглянути оновлений список випусків Ubuntu та їх кодових імен .

  • Компонент: Це може бути main, universe, multiverseта restricted. Ці слова вказують на рівень підтримки пакетів та статус ліцензування.

Дивіться цю сторінку для отримання додаткової інформації.

Зверніть увагу, що ви можете додати один або кілька компонентів у рядок, тому "головний", "Всесвіт", "Обмежений" та "Мультисвіт" можуть бути в одному рядку. Також зверніть увагу: Хоча ви додаєте більше одного компонента в один рядок, система 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

    software-properties-gtk
    

    Зауважте, що для Ubuntu версії 11.10 або новішої ви повинні використовуватись gksuперед software-properties-gtkкомандою

  3. Після відкриття вікна

    • Виберіть усі чотири категорії на вкладці Програмне забезпечення Ubuntu
    • На вкладці " Оновлення" виберіть категорію " Точна безпека" , " Точні оновлення" та " Точні спинки " .
    • Виберіть Canonical партнера і Independent категорії Іншого програмного забезпечення вкладки.

Це воно. Тепер у вас є sources.listфайл за замовчуванням без помилок. Порівняйте цей файл з попереднім, якщо хочете.


Оновлення для роботи з sources.list.dфайлами dir

Іноді дублікат може бути у файлі в /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.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міститься лише одна влучна рядок і вона також була вказана у google.listфайлі, ми можемо сміливо видалити цей файл командою

sudo rm /etc/apt/sources.list.d/google-chrome.list

Тоді проблема була вирішена.


5
Що я зробив, щоб у моїх джерелах було вказано повторювані записи?
Seanny123

@ Seanny123 Це важко сказати.
Анвар

1
Дуже дякую. Мене годинами цікавило, як траплялися дублікати. Нарешті ви показали
source.list.d

1
Приємна і ретельна відповідь. У своєму Онові для роботи з файлами dir source.list.d ви пояснюєте, які файли / рядки дають дублікати. Чи можете ви так само пояснити, які 6 пар рядків (оскільки ви кажете, що "ваш файл має 6 дублікатів") в ОП, які дають дублікати?
sancho.s

1
Підказка перейти перевірити мій izvor.list.d - це те, що допомогло мені вирішити це.
lcarsos

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
Тільки як це виправити, без плутанини та надто глибоких деталей. Дякую!
Пітер М.

Це фактично спрацювало! З певних причин не вдалося встановити також git на 12.04. Замість того, щоб видалити, я просто перевірив явне копіювання "Canonical partners".
davidkonrad

3
Я запустив однолінійку, але sudo apt-get updateвсе одно скаржиться на повторювані записи, ніби нічого не змінилося. Якщо це має значення, я 12.04 (конкретно, елементарна ОС Luna).
waldyrious

Це catмарно і не заважає вам використовуватиsudo perl -i
tripleee

24

Наскільки погані дублікати записів у source.list?

Я не знаю, як це погано, але мені не подобається оновлення sudo apt-get, що показує мені дублікати записів.

До речі, це не так вже й погано, це просто показує вам, що у вас є дублікати записів.

SourcesList

Файл source.list є ключовим фактором додавання або оновлення програм до вашої установки Ubuntu. Ця система також використовується для оновлення системи. Файл - це в основному дорожня карта вашої системи, щоб знати, де вона може завантажувати програми для встановлення або оновлення.

Це так само, як оновлення Windows

Ви можете видалити повторювані записи за кілька простих кроків за допомогою менеджера Y PPA

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

Відкрийте y-ppa-менеджер форму Dash

Введіть пароль адміністратора

введіть тут опис зображення

Двічі клацніть на розширеному

введіть тут опис зображення

Сканування та видалення дублікатів PPA та натисніть кнопку ОК

введіть тут опис зображення

Пройде певний час (1 або 2 хвилини), щоб сканувати та видалити дублікати PPA


2
У моєму випадку Y PPA продовжував говорити, що дублікатів не знайдено. Я зробив резервну копію source.list, видалив її, і запустив оновлення apto-get sudo для відновлення списку джерел (ubuntu 12.04). Це працювало для мене.
michel.iamit

1
Працював для мене на Монетному дворі 17, дякую людино!
spences10

Працював для мене на ubuntu 14.04..Спасибі приятель .. :)
Рахул Сінгх

1
працював як шарм
вектор

1
У моєму випадку 14.04 він продовжує говорити, що жодних копій не знайдено
Мухаммед Омер Аслам

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
Dennis

1
Спробуйте sudo rm /etc/apt/sources.list.d/*partner*. Також перевірте /etc/apt/sources.list, шукайте повторювані рядки.
Ерік Карвальо

Не пощастило, у мене немає файлів з "partner" в імені в цьому каталозі. І /etc/apt/sources.listне містить жодних дублікатів відповідно до uniq.
Денніс

10

Створіть резервну копію свого source.list:

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

Тепер видаліть оригінал та оновіть:

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

Як він може оновлюватись без sources.listфайлу?
Анвар

Це переселиться. =)
wojox

міна не переселилась
conman253

Поверніться до того, кого ви
зробили з

Як повернутися до резервного списку? видалення видалило багато важливого ... це абсолютно не безпечно ..
alvas

8

У мене була така ж проблема, відкриті джерела програмного забезпечення. без галочки "Канонічні партнери". Конфлікт між "Canonical Partners" та "Canonical партнерами, доданими програмним центром"


7

Якщо ви не змогли розібратися в цьому source.list, зробіть це:

  1. Клацніть лівою кнопкою миші на значку налаштувань (у крайньому верхньому куті екрана) та виберіть Налаштування системи.
  2. Клацніть на Джерела програмного забезпечення та перейдіть до Іншого програмного забезпечення.
  3. Зніміть прапорець із програмного забезпечення «Canonical Partners (вихідний код)», упакованого компанією Canonical для файлів своїх партнерів, і одного з програмного забезпечення «Canonical Partners», упакованого компанією Canonical для файлів своїх партнерів, і натисніть «Закрити», щоб піти.
  4. Одночасно натисніть клавіші CTRL+ ALT+, Tщоб відкрити термінал і набрати sudo apt-get update.

Я дотримувався ваших пропозицій, але все-таки я отримую цю помилку.
hsinxh

Будь ласка, опублікуйте зображення своїх "Джерел програмного забезпечення" тут, щоб знати винуватця.
all4naija

Будь ласка, опублікуйте зображення свого "Іншого програмного забезпечення" тут.
all4naija

6

10.10 і раніше

Програми> Центр програмного забезпечення Ubuntu> Правка> Джерела програмного забезпечення> Інше програмне забезпечення

АБО

Система> Адміністрація> Synaptic Packet Manager> Налаштування> Репозиторії

Вікно програмного забезпечення джерел програмного забезпечення

Виберіть та видаліть повторювані записи.


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

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 - Скріншот:

введіть тут опис зображення

Автор

Мубарак Альрашіді (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?

  • Так, оскільки це робить резервну копію поточного списку source.list, перш ніж робити щось. Але я не несу відповідальності, якщо щось сталося. Повна відповідальність буде за вами.

Ліцензія

Загальна публічна ліцензія GNU


просто спробував, приємно і просто :-) приємно :-)
bmbaker

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

alt текст


Це не говорить про те, як це зробити.
RolandiXor

1

Ні, у /etc/apt/sources.listфайлі немає жодного командного рядка для пошуку та видалення дублюваних записів .

Це тому, що запропоновані командні рядки, які просто дублюють функцію набагато простішої вбудованої uniqкоманди, працюватимуть лише у файлі SORTED та видалять лише рядки ADJACENT. Крім того, з цих команд буде видалено лише рядки, що складаються з ідентичного рядка символів .

Повторювані записи, про які повідомляє, apt-get updateбудуть складатися з повторюваних записів функцій , таких як репозиторій, що входить як у його, так i386і у його amd64варіанти. Простий та ефективний спосіб їх видалити - зазначити, про які сховищах повідомляється як про дублікати шляхом оновлення apt-get та видалити їх через Центр програмного забезпечення . Відкрийте його та виберіть Правка -> Джерела програмного забезпечення -> Вкладка Інше програмне забезпечення . Просто шукайте дублюючі записи та зніміть їх. (Це також можливість видалити будь-які 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, достатньо
Даніель Олдер

1

Що ж, я вирішив проблему введення дублікатів самостійно, перейменувавши /etc/apt/sources.d(як root) на щось інше і запустивши 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 .

  • Запустити sudo -H nautilusв терміналі
  • Знайдіть /etc/apt/sources.list
  • Клацніть правою кнопкою миші та відкрийте файл за допомогою текстового редактора (якщо натиснути на нього, він відкриє програмні джерела GUI)
  • Просто скопіюйте та вставте в sources.listі збережіть.
  • Вийдіть з терміналу і все закінчено.

У Google, схоже, є проблеми, тому я б запропонував покинути це. Я зробив це на Ubuntu 12.10 (версія Studio із доданим робочим столом Ubuntu та Unity для іншого входу на робочий стіл).


1

Просто відредагуйте файл /etc/apt/sources.list(наприклад, використовуйте sudo -H gedit /etc/apt/sources.list) та видаліть повторюваний рядок або поставте а #на початку рядка.


1

Я намагаюся доповнити можливості, які пропонують інші користувачі, що використовують термінал, оскільки саме про це ви питали, головним чином:

увійдіть, якщо ви використовуєте текстову установку або натисніть Alt+ F2і введіть gnome-terminal, якщо ви використовуєте GUI

Потім введіть

sudo nano /etc/apt/sources.list

(Для кращого розуміння: у каталозі /etcви можете знайти (майже) всі файли конфігурації вашого комп’ютера та в aptкаталозі, який ви знайдете souces.listфайл, який містить усі сховища, які APT використовує для оновлення або встановлення та оновлення програмного забезпечення)

Відредагуйте файл, видаляючи чи коментуючи, #на початку рядка будь-які повторювані рядки.

Натисніть Ctrl+ Xдля виходу та натисніть, yщоб зберегти файл (або nвийти без збереження).

Потім оновіть, щоб побачити, чи виправили це:

sudo apt-get update

Веселіться!


Я також думаю, що текстовий редактор, що розвинувся, як vim, може автоматично знайти дублікати, але я не знаю, як це зробити цікавою будь-якою інформацією
Пітто

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! Як жокердіно, як зазначено, ця відповідь суттєво піде на користь, якби ви її відредагували, щоб додати якесь пояснення (або принаймні сказати користувачеві, що саме робити з цими рядками).
Елія Каган

Ця відповідь невірна, оскільки вона може видаляти дублікати записів, але не видаляє дублікати джерел . дивіться тут пояснення
Анвар

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потребує відсортованого введення.
муру

sort -uвиконує таку ж роботу =)
AB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.