Wie kann ich viele entfernte Pakete gleichzeitig neu installieren?

8

Ich habe den sudo apt-get remove pythonBefehl verwendet und versehentlich eine Reihe von Paketen entfernt, die erforderlich waren. Ich habe mich über die Befehlszeile angemeldet und Ubuntu-Desktop erneut installiert, aber es fehlen noch andere Pakete, und ich suche nach einer Möglichkeit, diese entfernten Pakete einfach neu zu installieren. Da es das Protokoll im Software-Center gibt, wollte ich fragen, wie es am einfachsten ist, Änderungen rückgängig zu machen oder die Liste der entfernten Pakete aus dem Software-Center zu extrahieren ...

Hinweis: Ich habe sudo apt-get install .... .... ... ...ungefähr zwei Dutzend dieser entfernten Programme in dieser Liste eingegeben , aber als ich die Eingabetaste gedrückt habe, wurde keines davon installiert, da einige Paketnamen nicht gefunden wurden.

Die Programme wurden zum gleichen Zeitpunkt entfernt.

Logan
quelle
1
Schauen Sie /var/log/apt/history.log
rein

Antworten:

16

Lassen Sie mich zunächst sagen, dass das Entfernen pythondazu führen kann, dass viele grundlegende Befehle nicht mehr funktionieren. Ich weiß also nicht, ob das Folgende funktionieren wird.

Zweitens package names couldn't be foundgehe ich davon aus, dass der Fehler , den Sie haben, von einem falsch geschriebenen Namen in der Befehlszeile oder von einem lokal installierten und nicht in Repositorys verfügbaren Paket herrührt.

Um dann ein Protokoll der entfernten Pakete relativ zum zuletzt dpkgverfügbaren Protokoll zu erhalten (ich glaube nicht, dass Sie ältere Protokolle berücksichtigen müssen):

awk '$3 == "remove" { print $1, $2, $4 }' /var/log/dpkg.log | tee list

Bearbeiten Sie dann die listim aktuellen Verzeichnis erstellte Datei und lassen Sie nur Zeilen relativ zu Paketen, die Sie neu installieren möchten, basierend auf dem Zeitstempel der Zeile. Angenommen, Sie speichern die geänderte Datei in list-mod.

Verwenden Sie den folgenden Befehl, um diese Pakete neu zu installieren:

sudo apt-get --simulate install $(awk '{ print $3 }' list-mod)

Ich habe die --simulateOption eingefügt, um zu sehen, was der Befehl tun würde. Wenn alles in Ordnung ist, führen Sie den Befehl erneut aus, wobei diese Option entfernt wurde.

Wenn der Befehl besagt, dass einige Pakete nicht gefunden werden können, entfernen Sie sie einfach aus list-modund versuchen Sie es erneut.

Enzotib
quelle
danke, ich konnte die benötigten pakete neu installieren! Eine Frage: Es wurden mehr als 200 Pakete im Software Center-Protokoll entfernt, aber die Listendatei hatte ungefähr 150. Bedeutet dies, dass dpkg.log keine automatischen Installationen / abhängigen Pakete enthält?
Logan
1
Das Protokolldatei enthält alle installiert, aktualisiert, entfernt oder Paket gespült und mit jeder Anwendung aus dpkgzu apt-get, aptitude, Synaptische, Software Center, gdebietc. Sie einen Blick auf ältere geben können dpkg.logDateien finden ls -lrt /var/log/dpkg.log*.
Enzotib
1
@enzotib Ich habe ein Skript zum Löschen alter Linux-Header ausgeführt und denke, dass der reguläre Ausdruck mit vielen Paketen übereinstimmt, die ich nicht löschen wollte (sehr wichtige !!). Ihre Antwort hat mich vor einer bestimmten Katastrophe bewahrt.
Shivisuper
1
@enzotib Du hast mich gerade vor der Neuinstallation meines Betriebssystems bewahrt, nachdem ich ein schlechtes Skript ausgeführt habe. Vielen Dank!
brndn2k
Es heißt 0 aktualisiert, 0 installiert, 0 zu entfernen und 50 nicht aktualisiert
James Casia
2

Also mache ich zufällig einen ähnlichen Fehler: sudo apt-get purge python3.6*statt sudo apt-get purge python3.6.*.

Ich konnte es mit den folgenden Schritten ziemlich schnell beheben:

  1. Öffnete das Protokoll vim /var/log/history.log.
  2. Ich habe mit dem Befehl vim nach meinem schlechten Befehl gesucht /python3.6\*.
  3. Es gab eine Zeile Purge: unity-control-center-signon:amd64 (0.1.7~+14.04.20140211.2-0ubuntu4), ...mit einer langen Liste gelöschter Pakete (im Falle des Entfernens beginnt sie damit Remove:), die ich in eine andere Datei kopierte, ohne dass das Purge:Teil damit arbeiten konnte.
  4. In dieser Datei habe ich den Befehl vim: ausgeführt %s/:[^,]*,//g, der den Versionsteil entfernt und mir eine Liste von Paketen hinterlassen hat unity-control-center-signon lxc ....
  5. Schließlich habe ich eine Zeile aus dem vorherigen Schritt kopiert und ausgeführt: sudo apt-get install unity-control-center-signon lxc ...und so wurde es behoben.
Nikita
quelle
für mich war es/var/log/apt/history.log
Taylor