Ist es möglich, einen apt-get install-Befehl rückgängig zu machen?

67

Ich habe Carpadio auf meiner Xubuntu-Installation (einem Live-USB) installiert, die dann wie über 50 Pakete von der Ubuntu-Seite des Repository gezogen hat. Jetzt möchte ich das rückgängig machen. Trotz all meiner Jagd kann ich nichts Nützlicheres finden als den Befehl Wie kann ich den Befehl sudo apt get install rückgängig machen , der nur andeutet apt-get purge. Dies ist nicht sinnvoll, da nur 2 Packungen (Carpadio und Carpadio-Gnomepanel) entfernt werden.

/var/log/apt/history.logenthält eine Liste aller Pakete, die zusammen mit diesem Befehl installiert wurden. Also habe ich mich gefragt, ob es einen einfachen Weg gibt, alle zu entfernen ? Ansonsten kann ich mich einfach neu installieren, das war sowieso eine Neuinstallation, aber ich bin neugierig.

Ein kleines Beispiel des Verlaufsprotokolls (1 / 5-1 / 10 der gesamten Liste)

Befehlszeile: apt-get install cardapio-gnomepanel
Installieren Sie: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automatic), python-packagekit: amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper: amd64 (0.2.1.2-1ubuntu0.1, automatic) , Geoclue: amd64 (0.12.0-1ubuntu12, automatic), Einheit: amd64 (5.18.0-0ubuntu1, automatic), Indikatordrucker: amd64 (0.1.6-0ubuntu1, automatic), Libevolution: amd64 (3.2.3- 0ubuntu6, automatisch), libqt4-deklarativ: amd64 (4.8.1-0ubuntu4.3, automatisch), libmtp9: amd64 (1.1.3-1ubuntu0.1, automatisch), tracker-miner-fs: amd64 (0.14.0-2ubuntu1 , automatic), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, automatic), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805-0ubuntu7, automatic), gnome-media: amd64 (3.4.0- 0ubuntu3.1, automatic), Metacity: amd64 (2.34.1-1ubuntu11, automatic), Nautilus: amd64 (3.4.2-0ubuntu6, automatic), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, automatic), compiz- Plugins-Standard:amd64 (0.9.7.12-0ubuntu1, automatic), libunistring0: amd64 (0.9.3-5, automatic), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, automatic), ubuntu-docs: amd64 (12.04.6 , automatic), python-mako: amd64 (0.5.0-1, automatic),

Allen, die vorgeschlagen haben autoremove: Ich bin nicht sicher, warum, aber ich habe nur ein anderes Python-Paket (Python-Keybinder oder so) als "unnötig" erhalten, und das ist alles, was autoremove entfernen konnte.

Zwischen der Installation und Deinstallation wurden nur wesentliche Änderungen vorgenommen xubuntu-restricted-extras.

Karthik T
quelle
4
In diesem Fall ist es zwar etwas spät, aber wenn Sie das nächste Mal etwas installieren möchten, sollten Sie zuerst eine Simulation durchführen. Run sudo apt-get install -s packagewhere -sbezeichnet eine Simulation und packagewird durch den Namen der entsprechenden Software ersetzt.
@ vasa1 Ja, ich verprügele mich deswegen. apt-get fragt auch [Y / n], das hätte mein out sein sollen ..
Karthik T
Ich habe nur ein anderes Paket mit Python-Bezug (Python-Keybinder oder Summat) als "unnötig" erhalten. Haben Sie das cardapio-gnomepanelPaket tatsächlich entfernt ?
Gertvdijk
@gertvdijk ja, apt-get remove carpadiodas hat man auch mitgenommen .
Karthik T
1
@KarthikT Dann bin ich völlig verfahren, warum ich autoremovenicht für dich arbeite. Entweder haben Sie jetzt alle Pakete als manuell installiert markiert oder es liegt ein Missverständnis vor. Es ist ganz einfach: apt-get autoremoveEntfernt einfach alle automatisch installierten, markierten Pakete, ohne Grund, sie jetzt zu haben. Wenn es bei Ihnen nicht funktioniert, haben Sie wahrscheinlich etwas an Ihrem System geändert, über das Sie in Ihrer Frage nichts gesagt haben.
Gertvdijk

Antworten:

79

Grundsätzlich werden Sie beide haben apt-get remove(oder apt-get Spülung) , um das Paket und laufen apt-get autoremovedanach, haben sie die Installation von zufällt package-one.

Schauen wir uns den gesamten Prozess an:

  • sudo apt-get install package-one Installiert 50 Abhängigkeiten mit der Markierung "Automatisch", wie auch aus dem Protokollauszug in Ihrer Frage hervorgeht

  • sudo apt-get purge package-one entfernt (Säuberungen) nur ein, sondern tun dies laufen!

    Alle folgenden Installationsaktionen (sofern Sie eine ausführen) führen zu einer Informationsmeldung mit den nicht mehr benötigten Paketen:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    Diese Liste ist im Grunde genommen nur eine Liste aller Pakete, die als "automatisch" markiert sind, ohne dass eine umgekehrte Abhängigkeit von ihnen besteht. Mit anderen Worten, es gibt keinen Grund, sie für die Paketverwaltung zu installieren.

    Hinweis: Es ist keine Installation erforderlich! Es soll nur demonstrieren, dass APT klug ist, Ihnen von Ihren nicht benötigten Paketen zu erzählen!

  • sudo apt-get autoremove --purge entfernt diese

Mehr Informationen

  • Offizielle Dokumentation auf autoremoveder apt-get(8)Manpage:

    autoremove wird zum Entfernen von Paketen verwendet, die automatisch installiert wurden, um Abhängigkeiten für andere Pakete zu erfüllen, und jetzt nicht mehr benötigt werden.

  • Wie kann eine Anwendung richtig vollständig entfernt werden?

gertvdijk
quelle
2
In diesem OP hat Unity und all seine Freunde eingezogen. Ich bezweifle, dass das Löschen von Cardapio Unity usw. auch nach dem automatischen Entfernen entfernt.
@ vasa1 Warum? Die Pakete werden als "automatisch installiert" markiert (wie in der Frage zu sehen). Wenn kein Grund für die Installation auf dem System gefunden werden kann, werden sie zum Entfernen mit vorgeschlagen autoremove.
Gertvdijk
Ja, ich habe mich über die "Automatik" gewundert. Wenn dies dazu dient, eine automatische Entfernung anzuzeigen, ist dies gut. OP sollte dann keine Probleme haben.
@gertvdijk guten Fang von @ vasa1, siehe pls meine bearbeiten. autoremovehat nicht geholfen.
Karthik T
@gertvdijk, für "Nachfolgende Installationsaktionen" wäre ein sudo apt-get updateausreichen?
19

Wenn Sie ein Paket und die zu diesem Zeitpunkt installierten Abhängigkeiten entfernen möchten, sollten Sie Folgendes verwenden:

sudo apt-get purge package
sudo apt-get --purge autoremove

Aber um aptAktionen rückgängig zu machen , können Sie ein apt-undoSkript verwenden. Es ist ein einfaches Skript, das aptdie in Ubuntu ausgeführten Aktionen rückgängig machen kann . Es ist zu beachten, dass dieses Skript nur funktionieren kann, wenn Sie es verwenden, anstatt apt-getIhre Pakete zu installieren / upgraden / entfernen / bereinigen / downgraden.

apt-undoFühren Sie zur Installation in Ubuntu die folgenden Befehle im Terminal aus:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

Verwendungszweck:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

Zum Rückgängigmachen führen die obigen aptitudeAktionen die folgenden Befehle im Terminal aus:

apt-undo undo
Ramin
quelle
1
Danke, ich bin darauf gestoßen, und es klang genau so, wie es der Arzt befohlen hatte, bis ich den Vorbehalt sah, den ich zum Installieren und Rückgängigmachen benötigte.
Karthik T
1
Schöner Fang. Sehr verwirrende Syntax. Und ich mag es wirklich nicht, Alternativen zu gut getesteten APT-Kernanwendungen zu verwenden. Noch +1!
Gertvdijk
7

Nutzen Sie die Kraft von Unix. Nehmen Sie die Protokolldatei-Zeile, die Sie haben, und erstellen Sie einen Befehl, der das, was Apt getan hat, rückgängig macht. Zum Beispiel:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

Auf diese Weise können Sie alle versehentlich installierten Pakete löschen, wenn Sie die entsprechende Zeile in Ihrer Protokolldatei eingeben:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(Ich habe perlanstelle von " sedweil" sedeinen regulären Ausdruck verwendet, der keine nicht gierigen Übereinstimmungen unterstützt. Dies war der einfachste Weg, das zu konstruieren, was ich brauchte.)

Robie Basak
quelle
1
Nettes Skript, aber es sollte eigentlich nur eine Folge von Befehlen sein, an die sich die Leute erinnern können, um es auszuführen.
Gertvdijk
Danke, einschüchterndes Drehbuch, aber ich hatte Angst, dass es darauf
Karthik T
1
Ich habe sehr ähnlichen Code verwendet, um mein sehr ähnliches Problem zu lösen . Ich habe es in mehreren Schritten gemacht, um sicherer zu sein, was passierte. Zuerst habe ich relevante Textblöcke aus dem aptProtokoll in eine neue Datei kopiert und diese dann darauf angewendet: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log Dann habe ich der Ausgabe nur noch vorangestellt sudo apt-get removeund es ging los!
Insperatus
1

Nachdem Sie entfernen Sie das Paket, und man kann es durch Zugabe von --purge gründlich entfernen, denn, apt-get remove --purge <package>sollte es Ihnen, geben Sie eine Nachricht , die die Bibliothekspakete es in automatisch installiert wurden gezogen und nicht mehr notwendig, bei denen Sie ausführen können , verweisen apt-get autoremoveauf entferne sie.

Ken Kinder
quelle
Vielen Dank, aber die automatische Entfernung hat sich in diesem Fall als unzureichend erwiesen. Bitte sehen Sie meine Bearbeitung.
Karthik T
1

Folgen Sie der sudo apt-get purge packagenamemit

sudo apt-get autoremove. 

Sofern es sich nicht um ein Metapaket handelt, sollte sich das darum kümmern.

Siehe auch die FAQ unter Wie entferne ich alle Cardapio-Dateien manuell ? .

chaskes
quelle
Vielen Dank, aber die automatische Entfernung hat sich in diesem Fall als unzureichend erwiesen. Bitte sehen Sie meine Bearbeitung. Vielen Dank für den FAQ-Link, sehr nützlich!
Karthik T
1
Einige dieser Pakete werden möglicherweise von anderen Dingen benötigt und können nicht automatisch entfernt werden. Hast du dir die Anleitung unter dem Link angesehen? Wie sind die
Chaskes
Die Anweisungen auf dem Link sind recht orthogonal zum Kernproblem, und so wie es ist, neige ich dazu, mein System neu zu installieren. Danke trotzdem.
Karthik T
1
  1. Fügen Sie die lange Liste unerwünschter Pakete aus dem apt-Protokoll in ein new_file.txt
  2. Ausführen perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. Kopieren Sie die Ausgabe des letzten Befehls in die Zwischenablage oder leiten Sie sie erst dort weiter .
  4. Ausführen sudo apt-get remove[hier den Inhalt der Zwischenablage einfügen]

Getan.

Grundsätzlich müssen wir die Liste der Pakete aus dem apt-Protokoll in etwas formatieren, das apt-get verstehen kann. Die Klammern, die Wörter dazwischen und die Kommas müssen entfernt werden, damit das Perl zum Spielen hereinkommt. Ja, es gibt bessere (effizientere) Wege - aber ich habe dies getan, es ist leicht zu verstehen und es funktioniert.

Insperatus
quelle
+1 für persönliche Erfahrung und Erklärung, aber wie ich bereits erwähnt habe, habe ich meinen Live USB
Karthik T
1

Um die letzte apt-Installation rückgängig zu machen, können Sie auch Folgendes verwenden:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

Dadurch wird die letzte passende Installation aus dem Verlauf abgerufen und alle hier installierten Pakete gelöscht.

Sie können eine Funktion namens aptpurgelastinstall erstellen, um sie immer zur Hand zu haben (fügt den Code zu ~ / .bashrc hinzu):

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

Jetzt müssen Sie nur noch aptpurgelastinstall in die Shell eingeben, um die letzte Installation zu wiederholen.

user981297
quelle
Als Reaktion auf den Kommentar der vorgeschlagenen Bearbeitung : "Verbesserte meinen eigenen Beitrag (bevor ich registriert wurde)." Sie können die Zusammenführung Ihrer Konten beantragen , siehe askubuntu.com/help/merging-accounts .
Melebius
0

Wenn Sie gerade ein ppa hinzugefügt haben und es wiederherstellen möchten, müssen Sie die unten beschriebenen Schritte ausführen. Verstehen Sie, dass dies fehlschlagen kann, wenn Sie andere Pakete installiert haben, die Sie nicht deinstallieren möchten. Ich bin sicher, dass dies mit einem Skript möglich ist. Persönlich denke ich, dass dies ein Teil von apt sein sollte und es eine bessere Verwaltung geben sollte, welche Pakete aufgrund von Abhängigkeiten installiert werden und welche auf Anfrage des Benutzers installiert werden.

1) Entfernen Sie das ppa aus /etc/apt/sources.list. Denken Sie daran, wann Sie das ppa hinzugefügt haben. Wenn Sie Glück haben, müssen Sie nicht präzise sein.

2) Machen Sie eine Liste, was nach der Installation der PPA neu installiert werden soll: cat /var/log/dpkg.log | grep 'upgrade'

3) Erstellen Sie eine Liste mit den zu entfernenden Elementen, sobald Sie die PPA installiert haben: cat /var/log/dpkg.log | grep 'install'

4) entferne alle Pakete aus Schritt 3: sudo apt-get remove {Liste der Pakete aus Schritt 3}

5) Installieren Sie alle Pakete von Schritt 2 neu: sudo apt-get install --reinstall {Liste der Pakete von Schritt 2}

6) Wenn etwas schief gelaufen ist und Sie sich keine Lösung vorstellen können, setzen Sie die PPA zurück und installieren Sie alle Pakete aus den beiden Listen neu.

VincentSC
quelle
0

Ich weiß, es ist eine ziemlich alte Frage, aber ich bin hierher gekommen, um Hilfe zu suchen und vielleicht kann ich jemandem helfen. Ich hatte nach der Installation eine ähnliche Situation wie bei @ Karthik-T unity8-desktop-session-mir. Ich weiß, dass es eine große Sache ist. Es zog 233 Päckchen mit sich.

Mit autoremovebekomme ich nur 34 von ihnen entfernt. Der Punkt ist, dass während der unity8-desktop-session-mirInstallation zwei Pakete ( python3-aptdaemon.pkcompatund evolution-data-server-online-accounts) entfernt wurden. Es steht in /var/log/apt/history.lognach dem InstallAbschnitt.

Um die Installation von Unity 8 vollständig rückgängig zu machen, habe ich Folgendes ausgegeben:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (Es wurden 8 Pakete für Unity 8 entfernt.)
  4. sudo apt-get --purge autoremove

Dadurch wird nicht alles entfernt, was Sie zuvor installiert haben, aber in einigen Fällen ist es gut genug.

PS: Vielleicht ist das autoremovebei Schritt zwei nicht nötig, da ich bei Schritt vier nochmal ausgegeben habe.


quelle
0

Technisch gesehen sind "Entfernen" - oder "Autoremove" -Operationen nicht "rückgängig", obwohl sie die meiste Zeit gut genug ausgeführt werden können.

Standardmäßig hinterlässt apt-get Pakete, sofern Sie dies nicht angeben -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

Es ist zuverlässiger, einen Blick auf das Apt zu werfen history.logund alle installierten Pakete zu deinstallieren. Ich habe ein kleines, knotenbasiertes Skript erstellt, um den Vorgang zu vereinfachen:

https://github.com/rolfen/apt-history

Außerdem gibt es hier einen weiteren, manuelleren Ansatz zum Zurücksetzen von Änderungen:

https://unix.stackexchange.com/a/236711

Rolf
quelle