Is it possible to undo an apt-get install command?
Solution 1
Basically, you'll have to both apt-get remove
(or apt-get purge) the package and run apt-get autoremove
after that, to have it revert the installation of package-one
.
Let's look at the whole process:
sudo apt-get install package-one
installs 50 dependencies with it marked "automatic" as also can be seen from the log excerpt in your question-
sudo apt-get purge package-one
removes (purges) just one, but do run this!All following install actions (if you run any) will yield an informational message with the no longer needed packages:
The following packages were automatically installed and are no longer required: package-two package-three [...] Use 'apt-get autoremove' to remove them.
This list is basically just a list of all packages marked as "automatic" without a reverse dependency on them. In other words, there's no reason for them to be installed as far as the package management is concerned.
Note: No installation is needed! It's just to demonstrate that APT is smart to tell you about your unneeded packages!
sudo apt-get autoremove --purge
removes (purges) these
More information
-
Official documentation on
autoremove
from theapt-get(8)
manpage:autoremove
is used to remove packages that were automatically installed to satisfy dependencies for other packages and are now no longer needed. What is the correct way to completely remove an application?
Solution 2
When you want to remove a package and its dependencies that installed at the time, you should use:
sudo apt-get purge package
sudo apt-get --purge autoremove
but to undo apt
actions, you can use apt-undo
script. It is a simple script that can undo the apt
actions performed in Ubuntu. It is to be noted that this script can only work if you use it instead of apt-get
to install/upgrade/remove/purge/downgrade your packages.
To install apt-undo
in Ubuntu, run the following commands in the terminal:
sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo
usage:
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
To undo, the above aptitude
actions run following commands in the terminal:
apt-undo undo
Solution 3
Use the power of Unix. Take the log file line that you have, and construct a command that will undo what apt did. For example:
$ 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
So you can use this purge all packages you installed accidentally, given the appropriate line from your log file:
$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')
(I've used perl
instead of sed
because sed
uses a type of regular expression which doesn't support non-greedy matches, which was the easiest way of constructing what I needed)
Solution 4
To undo the last apt install you may also use this:
sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ")
This will catch the last apt install from the history and suggests to purge the corresponding packages. apt will display you a list of all packages in question which needs to be confirmed, so you keep control about what happens.
You can create a function called ”aptpurgelastinstall“ by executing this command:
echo -e "\n# undo the last apt installation with aptpurgelastinstall" >> ~/.bashrc && echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep -E ":amd64|:i386|:arm" | tr "\n" " ") ; }' >> ~/.bashrc && . ~/.bashrc
Now you simply need to type aptpurgelastinstall in a shell to undo the last installation.
If you want to specify how many previous installations should be purged (all in one step), then change the 1 in the code to $1.
Then you can type for instance aptpurgelastinstall 3 in the shell and the last three installations will be completely purged.
Solution 5
- Paste the long list of unwanted packages from the apt log (var/log/apt/history.log) into a
new_file.txt
- Execute
perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
- Copy the output of the last command to the clipboard or pipe it there in the first place.
- Execute
sudo apt-get remove
[paste the contents of the clipboard here]
Done.
Basically we need to format the list of packages from the apt log into something apt-get can understand. The parenthesis, words in between, and the commas need to go so that's where the perl comes in to play. Yes, there are better (more efficient) ways - but I've done this, its easy to understand, and it works.
Related videos on Youtube
Karthik T
I am a programmer getting started with game programming. I am experienced mostly with C++, with some Java and Perl experience. And Python, and Ruby and Ruby on Rails.
Updated on September 18, 2022Comments
-
Karthik T almost 2 years
I installed Carpadio on my Xubuntu install (a Live USB), which then pulled like over 50 packages from, I suppose, the Ubuntu side of the repository. Now I would like to undo this. However for all my hunting, I can't find anything more useful than How can I reverse sudo apt get install command, which just suggests
apt-get purge
. This is not useful since all it does is remove 2 packages (carpadio and carpadio-gnomepanel)./var/log/apt/history.log
has a list of all the packages that was installed along with that command. So I was wondering if there is any easy way to go about removing all of them? Else I can just reinstall, this was a fresh install anyway, but I am curious.A small sample of the history log (1/5-1/10 of the entire list)
Commandline: apt-get install cardapio-gnomepanel
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), geoclue:amd64 (0.12.0-1ubuntu12, automatic), unity:amd64 (5.18.0-0ubuntu1, automatic), indicator-printers:amd64 (0.1.6-0ubuntu1, automatic), libevolution:amd64 (3.2.3-0ubuntu6, automatic), libqt4-declarative:amd64 (4.8.1-0ubuntu4.3, automatic), libmtp9:amd64 (1.1.3-1ubuntu0.1, automatic), 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-default: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),To all those who have suggested
autoremove
: I am not sure why, but I got just 1 other python related package (python-keybinder or something) as "unnecessary" and that is all that autoremove was able to remove.Between the install and uninstall, only major change was installing
xubuntu-restricted-extras
.-
Admin over 11 yearsIt's a bit late to be of help in this case, but the next time you want to install something, consider doing a simulation first. Run
sudo apt-get install -s package
where-s
denotes a simulation andpackage
will be replaced by the appropriate software's name. -
Karthik T over 11 years@vasa1 Yes, am beating my self up about this. apt-get asks [Y/n] as well, that should have been my out..
-
gertvdijk over 11 yearsI got just 1 other python related package (python-keybinder or summat) as "unnecessary" Did you actually remove the
cardapio-gnomepanel
package? -
Karthik T over 11 years@gertvdijk yes,
apt-get remove carpadio
took that one along too. -
gertvdijk over 11 years@KarthikT Then I'm completely lost as to why
autoremove
isn't working for you. Either you somehow marked all packages as manually installed now or there's a plain misunderstanding. It's very simple:apt-get autoremove
just removes all automatically installed marked packages without a reason to have them now. If it doesn't work for you, I think you have changed something on your system you didn't tell about in your question. -
Karthik T over 11 years@gertvdijk and the "system" is a persistant live usb, I dunno if that makes a difference.
-
gertvdijk over 11 years@KarthikT Nope, both are unrelated to my knowledge, but good to include that in your question anyway.
-
Insperatus over 11 yearsMy question handled virtually an identical problem. The key to solving it was running a one liner on the relevant portion of the apt log and pasting the output after a familiar
sudo apt-get remove
-
-
Admin over 11 yearsIn this OP has pulled in Unity and all its friends. I doubt purging cardapio will remove Unity etc even after autoremove.
-
gertvdijk over 11 years@vasa1 Why? The packages are marked as 'automatically installed' (as can be seen in the question) and if no reason can be found for those to be installed on the system, they will be suggested for removal using
autoremove
. -
Admin over 11 yearsYes, I was wondering about the "automatic". If that serves to indicate autoremoval that's good. OP should have no problems then.
-
Karthik T over 11 years@gertvdijk good catch by @vasa1, pls see my edit.
autoremove
did not help. -
Admin over 11 years@gertvdijk, for "Subsequent install actions", would a
sudo apt-get update
be sufficient? -
Karthik T over 11 yearsThanks, but autoremove proved to be insufficient in this case. Please see my edit. Thank you for the FAQ link, very useful!
-
Karthik T over 11 yearsThanks, but autoremove proved to be insufficient in this case. Please see my edit.
-
Karthik T over 11 yearsThanks, I came across this, and it sounded like exactly what the doctor ordered, until I saw the caveat that I needed to use it to install, to be able to undo..
-
chaskes over 11 yearsSome of those packages may be needed by other things and not marked as able to be autoremoved. Did you look at the instructions at the link? How are those?
-
Admin over 11 years@gertvdijk, so autoremove is only triggered when there is something to install (or upgrade)? Because I get the autoremove prompt even after
sudo apt-get update && sudo apt-get upgrade
. Of course, install and upgrade maybe seen as the same thing. -
gertvdijk over 11 yearsNice catch. Very confusing syntax, though. And I really don't like to use alternatives to well-tested core APT application. Still +1!
-
Admin over 11 years@gertvdijk, So OP should actually install some small program in order to get an effective "autoremove"?
-
gertvdijk over 11 yearsNice script, but it should really be just sequence of commands people can remember to accomplish it.
-
Karthik T over 11 years@vasa1 subsequent actions were not needed. The act of remove itself prompted me with the message that the 1 package was unwanted.
-
gertvdijk over 11 years@KarthikT But that information is regarding the state before removing
package-one
. So, this information is not about the state you're about to put the system in. -
Karthik T over 11 yearsThe instructions on the link are rather orthogonal to the core issue, and as it is, I am leaning towards reinstalling my system. thanks anyway.
-
Karthik T over 11 yearsThanks, intimidating script, but I was afraid it would come down to this
-
Karthik T over 11 years@gertvdijk I am marking this as the answer for being the best written answer of the official method. I think I will just reinstall though. Thanks for your help!
-
gertvdijk over 11 years@KarthikT Feel free to unaccept it any time if you find a solution to the issue that does work in your case.
-
Insperatus over 11 yearsI used very similar code to solve my very similar problem. I did it in several steps just to be more sure about what was happening. First I copied relevant block of text from the
apt
log into a new file and then applied this to it:perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log
Then all I did was prepend that output withsudo apt-get remove
and I was good to go! -
Karthik T over 11 years+1 for personal experience and explanation, but as I have mentioned earlier, I have already reset my Live USB
-
Anson Savage over 7 yearsSuppose you wanted to undo an update. Could you replace "package-one" with "update" ? Thanks.