System Ubuntu jest uszkodzony po przypadkowym odinstalowaniu wielu pakietów

20

Przypadkowo usunąłem wszystkie pakiety zaczynające się na jpeg:

sudo apt-get remove jpeg*

Spieprzyło to wiele rzeczy, usunęło Unity, Firefox, Flash Player itp.

Jakoś udało mi się odzyskać pulpit i jedność, ale wiele rzeczy wciąż jest wadliwych. Na przykład .rpmpliki i .tag.gzpo prostu w ogóle się nie otwierają.

To, czego chcę, to sposób na naprawienie wszystkiego, co jest nie tak. Coś, co jest odpowiednikiem „instalacji naprawczej” z dyskiem Windows.

Wszelkie wskazówki, ktoś?

Programowanie Noob
źródło
1
Naprawdę polecam świeżą instalację. Po prostu wykonaj kopię zapasową / home / (w tym niewidocznych plików) i włóż ją do nowej instalacji.
Paul Woitaschek

Odpowiedzi:

35

Możesz zainstalować ubuntu-desktopzadanie:

sudo apt-get install ubuntu-desktop^

Spowoduje to zainstalowanie wszystkich usuniętych pakietów standardowego pulpitu Ubuntu. Nie przywróci zainstalowanych pakietów, które nie są częścią standardowego pulpitu (tj. Przeinstaluje Unity i Firefox, ale nie Flash Player).

Aby zainstalować te pakiety, możesz zajrzeć /var/log/apt/history.logi zobaczyć dokładnie to, co zostało usunięte.

Uwaga: instalacja ubuntu-desktop^ zadania nie jest tym samym, co instalacja ubuntu-desktop pakietu . Pierwszy da APT kilka wskazówek, jak rozwiązać zależności między pakietami wirtualnymi, drugi da APT swobodę wyboru pakietów (i zakończy się instalowaniem bezużytecznych rzeczy, takich jak ubiquity).

Dlaczego wystąpił problem? apt-get remove jpeg*będzie nie usunąć wszystkie pakiety zaczynając jpeg. Zamiast tego usunie wszystkie pakiety zawierające jpeich nazwy. Dzieje się tak, ponieważ apt-get działa z wyrażeniami regularnymi, więc jpeg * oznacza: wszystko zawierające jpe, po którym następuje zero lub więcej g .

Andrea Corbellini
źródło
1
Dobry pomysł, nie myślałem o tym. Będę zainteresowany, czy to tutaj zadziała!
Eliah Kagan
@EliahKagan: Testowałem w chroot. Pakiety jpeg * wpływają tylko na niektóre aplikacje graficzne, więc niezbędne „składniki” (tj. NetworkManager do połączeń internetowych, APT, emulatory terminali i tak dalej) są nadal w systemie OP.
Andrea Corbellini,
@EliahKagan: oczywiście przyjęłem (nieoczywiste) założenie, że OP nie usunął nic innego.
Andrea Corbellini,
2
Dołącz ostrzeżenie, aby nigdy nie używać taskseldo usuwania zadania - patrz nieprzyjemny błąd w
zadaniu
1
@Attilio: Wyjaśniłem różnicę w odpowiedzi. Zobacz „Uwaga: instalacja zadania ubuntu-desktop ^ nie jest tym samym, co instalacja pakietu ubuntu-desktop ...”
Andrea Corbellini
8

Najlepszym sposobem na rozwiązanie tego problemu może być ponowna instalacja systemu Ubuntu. (Najpierw wykonaj kopię zapasową dokumentów, nawet jeśli planujesz ponowną instalację bez ponownego formatowania).

Jeśli chcesz spróbować naprawić system na miejscu, spójrz na pliki dziennika menedżera pakietów, aby zobaczyć, które pakiety zostały usunięte, i zainstaluj je ponownie:

  • /var/log/dpkg.log (pełne informacje, ale trudne do odczytania)
  • /var/log/apt/history.log (w skrócie oznacza, że ​​każdy pakiet został usunięty lub w inny sposób zmodyfikowany - prawdopodobnie najlepszy zakład)
  • /var/log/apt/term.log(jeśli usunąłeś pakiety apt-getw terminalu, powinno to pokazać to, co wtedy zobaczyłeś, w tym listy pakietów, które chcesz usunąć - więc może to być najlepszy sposób)

Ponowna instalacja tylko pakietów, których nazwy zaczynają się od jpeg, nie zadziała, ponieważ wiele (prawie na pewno większość) usuniętych pakietów zostało usuniętych, ponieważ polegały na tych pakietach.

W przyszłości zalecam uważne sprawdzenie konsekwencji odinstalowania pakietu. Jeśli pracujesz z wiersza polecenia, zawsze będziesz powiadamiany. (O ile nie skorzystasz z tej -yopcji, w takim przypadku zazwyczaj nie. Odradzam korzystanie z tej opcji, chyba że wiesz, co robisz, zwłaszcza w przypadku usuwania).

Jednym ze sposobów sprawdzenia konsekwencji operacji zarządzania pakietami przeprowadzonej z użyciem apt-get, bez ryzyka ich apt-get -swystąpienia , jest uruchomienie zamiast sudo apt-get. To tylko symuluje określone działanie i informuje, na jakie pakiety wpłynie to w rezultacie i jak.

Eliah Kagan
źródło
1

Pracuję sudo apt-get purge wine*na Ubuntu 15.10, więc nie ma interfejsu graficznego przy opcji logowania tylko do terminala rozruchowego.

Jak zasugerował Eliah Kagan, użyłem informacji z /var/log/apt/history.log uruchomienia nano na history.log i stworzyłem prosty skrypt, który zawierał sudo apt-get installwszystkie wyczyszczone pakiety, które znalazłem w linii:

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

Ale najpierw musiałem ręcznie usunąć tekst między wszystkimi: a także:,

na tym etapie nowy skrypt byłby pomocny, ponieważ paczki były setkami. po tym uruchamiam skrypt i usunąłem kilka Unable to locate packages(które ręcznie zainstalowałem). uruchom skrypt ponownie i to wszystko. Wszystko działa dobrze ... na szczęście

kominato
źródło
0

Zainstaluj pakiet ubuntu-desktopZainstaluj ubuntu-desktop

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

Zainstaluje niezbędne pakiety dla twojego systemu.

Tachyony
źródło
to mi się nie udaje, ponieważ zależności od Ubuntu-Desktop nie są zainstalowane.
kevinkayaks
0

Przypadkowo usunąłem libssl1.0.0i moja maszyna została uszkodzona. Aby przywrócić, zrobiłem:

  1. Wykonaj kopię zapasową dzienników tego, co zostało usunięte cp /var/log/apt/term.log ~/libssl.term.log
  2. Usuń wiersze niezwiązane z akcją libssl vi ~/libssl.term.log
  3. Jeśli brakuje sieci (nie można ping google.com), uruchom ponownie komputer w trybie odzyskiwania i włącz sieć
  4. Ponownie zainstaluj usunięte pakiety 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
Eric Landry
źródło
0

Oto mały skrypt Pythona, w którym możesz napisać (nieużywalny) ciąg pakietu z uruchomionej deinstalacji masowej /var/log/apt/history.log. Wyświetli ciąg, który możesz skopiować wklej do polecenia apt-get install, aby łatwo zainstalować wszystkie usunięte pakiety.

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
źródło
Przecinki? Masz na myśli cytaty?
wjandrea,
@wjandrea Tak Mam na myśli cytaty
joaoroque,