Система Ubuntu порушена після випадкової видалення багатьох пакетів


20

Я випадково видалив усі пакунки, починаючи з назви jpeg:

sudo apt-get remove jpeg*

Це викрутило багато речей, вилучило Unity, Firefox, Flash player тощо.

Мені якимось чином вдалося відновити робочий стіл і єдність, але тоді багато речей все ще залишаються помийними. Наприклад, .rpmфайли і .tag.gzпросто не відкриються взагалі.

Те, що я хочу, - це спосіб виправити все, що не так. Щось, що є еквівалентом "ремонту установки" з диском Windows.

Будь-які поради, будь-хто?


1
Я б дуже рекомендував свіжу установку. Просто створіть резервну копію / home / (включаючи невидимі файли) та вставте її в нову установку.
Пол Войтащек

Відповіді:


35

Ви можете встановити ubuntu-desktopзавдання:

sudo apt-get install ubuntu-desktop^

Це дозволить встановити всі видалені пакети стандартного робочого столу Ubuntu. Він не відновить встановлені вами пакети, які не входять до стандартного робочого столу (тобто перевстановлять Unity та Firefox, але не Flash Player).

Щоб встановити ці пакети, ви можете подивитися /var/log/apt/history.logі точно подивитися, що ви видалили.

Примітка: установка ubuntu-desktop^ завдання - це не те саме, що встановити ubuntu-desktop пакет . Перший дасть APT деякі підказки для вирішення залежностей, пов'язаних з віртуальними пакетами, другий дасть APT свободу вибору пакетів (і в кінцевому підсумку встановить непотрібні речі, як-от ubiquity).

Чому виникла проблема? apt-get remove jpeg*буде НЕ видалити всі пакети , починаючи з jpeg. Замість цього він видалить усі пакунки, що містять jpeїх ім’я. Це тому, що apt-get працює з регулярним виразом, так що jpeg * означає: все, що містить jpe, а потім нуль або більше g .


1
Гарна ідея, я не думав про це. Мені буде цікаво подивитися, чи буде тут працювати!
Елія Каган

@EliahKagan: Я випробував у chroot. Пакети jpeg * впливають лише на деякі графічні програми, тому необхідні 'інгредієнти' (тобто NetworkManager для підключення до Інтернету, APT, емулятори терміналів тощо) все ще знаходяться в системі OP.
Андреа Корбелліні

@EliahKagan: звичайно, я зробив (неочевидне) припущення, що ОП нічого іншого не усунуло.
Андреа Корбелліні

2
Будь ласка, додайте попередження ніколи не використовувати taskselдля видалення завдання - дивіться неприємний tasksel-bug
guntbert

1
@Attilio: Я пояснив різницю у відповіді. Див. "Примітка: установка ubuntu-desktop ^ завдання не те саме, що встановлення пакета ubuntu-desktop ..."
Андреа Корбеліні

8

Найкращим способом вирішити цю проблему може бути перевстановлення Ubuntu. (Спершу слід створити резервну копію документів, навіть якщо ви плануєте перевстановити без переформатування.)

Якщо ви хочете спробувати виправити систему на місці, перегляньте файли журналів менеджера пакунків, щоб побачити, які пакунки були вилучені, та перевстановіть їх:

  • /var/log/dpkg.log (повна інформація, але важко читати)
  • /var/log/apt/history.log (скорочено повідомляє вам про кожен видалений або інший модифікований пакет - швидше за все, найкраща ставка)
  • /var/log/apt/term.log(якщо ви видалили пакунки з apt-getтерміналу, це повинно показувати те, що ви бачили тоді, включаючи списки, які пакунки збираються видалити - так це може бути найкращим способом)

Перевстановлення лише пакетів, імена яких починаються з jpegне буде працювати, оскільки багато (майже напевно більшість) видалених пакетів було видалено, оскільки вони покладалися на ці пакунки.

Надалі я рекомендую уважно перевірити наслідки видалення пакета. Якщо ви працюєте з командного рядка, вам буде завжди повідомлено. (Якщо ви не використовуєте -yпараметр, в такому випадку зазвичай немає. Я рекомендую не використовувати цей варіант, якщо ви не знаєте, що ви робите, особливо для видалення.)

Один із способів перевірити наслідки операції з управління пакетом, здійсненої за допомогою apt-get, не ризикуючи їх відбутися, - це запустити apt-get -sзамість цього sudo apt-get. Це просто імітує вказану дію та повідомляє про те, на які пакунки впливатиме результат і як.


1

Я працюю sudo apt-get purge wine*на Ubuntu 15.10, тому жоден графічний інтерфейс не підтримує термінал для входу в термінал.

Оскільки Eliah Kagan запропонував, я використовував інформацію, /var/log/apt/history.log запускаю нано на history.log і створив простий сценарій, який містився sudo apt-get installу всіх очищених пакунках, які я знайшов у рядку:

Purge: evolution:amd64 (3.16.5-1ubuntu3.1), libtotem-plparser18:amd64 (3.10.5-1) ...... etc

Але спершу мені довелося видалити текст між усіма: і, включаючи:,

на цьому кроці новий сценарій був би корисним, оскільки пакетів було сотні. після цього я запустив сценарій і видалив декілька Unable to locate packages(які я встановив вручну). запустити сценарій ще раз і ось це. Все працює добре ... на щастя


0

Встановіть пакет ubuntu-desktopВстановіть ubuntu-desktop

sudo apt-get update && sudo apt-get install ubuntu-desktop

Він встановить необхідні пакети для вашої системи.


для мене це не вдається, оскільки залежності ubuntu-desktop не встановлені.
кевінкаякс

0

Я випадково видалився, libssl1.0.0і моя машина була калікою. Щоб відновити, я зробив:

  1. Створіть резервні копії журналів того, що було видалено cp /var/log/apt/term.log ~/libssl.term.log
  2. Видаліть рядки, не пов’язані з дією libssl vi ~/libssl.term.log
  3. Якщо мереж відсутній (неможливо ping google.com), перезавантажте у режимі відновлення та увімкніть мережу
  4. Перевстановіть вилучені пакети cat ~/libssl.term.log | grep ^Removing | sed -e 's/^Removing //g;s/ (.*$//g;/diversion of/d;/dangling symlinks/d' | xargs sudo apt-get -y install

0

Ось невеликий скрипт python, куди ви можете записати (непридатний) рядок пакета з вашої масової деінсталяції, на якій він увімкнено /var/log/apt/history.log. Він виведе рядок, який ви можете скопіювати вставити в команду apt-get install, щоб легко встановити всі видалені пакети.

import re

apt_str = u"INSERT YOUR PACKAGE STRING HERE, BETWEEN THE QUOTES"

match =  re.findall(r'([\w\d\.-]+).+? \(.+?\)', apt_str)
print " ".join(match)

Коми? Ви маєте на увазі цитати?
wjandrea

@wjandrea Так, я маю на увазі цитати
joaoroque
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.