Система 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
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, поэтому нет графического интерфейса при загрузке только с терминала.

Как предположил Элиа Каган, я использовал информацию из /var/log/apt/history.log журнала nano для 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(которые я установил вручную). запустите скрипт снова и все. Все работает нормально ... к счастью

kominato
источник
0

Установите пакет ubuntu-desktopУстановите Ubuntu-рабочий стол

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)
joaoroque
источник
Запятые? Вы имеете в виду цитаты?
Вандреа
@wjandrea Да, я имею в виду цитаты
Joaoroque