是否可以撤消apt-get install命令?
我在我的Xubuntu安装(一个Live USB)上安装了Carpadio,然后从我认为的存储库的Ubuntu端提取超过50个包。 现在我想撤消这个。 然而,对于我所有的狩猎,我找不到任何更有用的东西如何反转sudo apt get install命令 ,这只是建议apt-get purge
。 这没有用,因为它只需删除2个包(carpadio和carpadio-gnomepanel)。
/var/log/apt/history.log
包含随该命令一起安装的所有软件包的列表。 所以我想知道是否有任何简单的方法去除所有这些 ? 否则我可以重新安装,无论如何这是一个全新安装,但我很好奇。
历史日志的一小部分样本(整个列表的1 / 5-1 / 10)
命令行:apt-get install cardapio-gnomepanel
安装:libdbusmenu-qt2:amd64(0.9.2-0ubuntu1,自动),python-packagekit:amd64(0.7.2-4ubuntu3,自动),cups-pk-helper:amd64(0.2.1.2-1ubuntu0.1,自动) ,geoclue:amd64(0.12.0-1ubuntu12,自动),统一:amd64(5.18.0-0ubuntu1,自动),指示打印机:amd64(0.1.6-0ubuntu1,自动),libevolution:amd64(3.2.3- 0ubuntu6,自动),libqt4-declarative:amd64(4.8.1-0ubuntu4.3,自动),libmtp9:amd64(1.1.3-1ubuntu0.1,自动),tracker-miner-fs:amd64(0.14.0-2ubuntu1 ,自动),gir1.2-rb-3.0:amd64(2.96-0ubuntu4.2,自动),python-aptdaemon.pkcompat:amd64(0.43 + bzr805-0ubuntu7,自动),gnome-media:amd64(3.4.0- 0ubuntu3.1,自动),metacity:amd64(2.34.1-1ubuntu11,自动),nautilus:amd64(3.4.2-0ubuntu6,自动),libcompizconfig0:amd64(0.9.7.0~bzr428-0ubuntu6,自动),compiz- plugins-default:amd64(0.9.7.12-0ubuntu1,自动),libunistring0:amd64(0.9.3-5,自动),libebackend-1.2-1:amd64(3.2.3-0ubuntu7,自动),ubuntu-docs:amd64 (12.04.6,自动),python-mako:amd64(0.5.0-1,自动),
对于所有建议autoremove
:我不知道为什么,但我只有一个其他python相关的包(python-keybinder或其他东西)作为“不必要的”,这就是autoremove能够删除的全部内容。
在安装和卸载之间,只有重大更改是安装xubuntu-restricted-extras
。
基本上,你必须同时apt-get remove
(或apt-get purge)包, 然后运行apt-get autoremove
,让它恢复package-one
的安装。
让我们看看整个过程:
-
sudo apt-get install package-one
安装50个依赖项,标记为“automatic”,也可以从你问题的日志摘录中看到 -
sudo apt-get purge package-one
删除(清除)一个,但是运行它!以下所有安装操作(如果您运行任何操作)将生成包含不再需要的软件包的信息性消息:
The following packages were automatically installed and are no longer required: package-two package-three [...] Use 'apt-get autoremove' to remove them.
这个列表基本上只是标记为“自动”的所有包的列表,没有反向依赖它们。 换句话说,就包管理而言,没有理由安装它们。
注意:无需安装! 这只是为了certificateAPT很聪明地告诉你你不需要的包裹!
-
sudo apt-get autoremove --purge
删除(清除)这些
更多信息
-
有关自动
autoremove
官方文档,请autoremove
apt-get(8)
联机帮助页:autoremove
用于删除自动安装的包以满足其他包的依赖关系,现在不再需要。 -
完全删除应用程序的正确方法是什么?
如果要删除当时安装的包及其依赖项,则应使用:
sudo apt-get purge package sudo apt-get --purge autoremove
但要撤消apt
操作,可以使用apt-undo
脚本。 这是一个简单的脚本,可以撤消在Ubuntu中执行的apt
操作。 需要注意的是,只有在使用它而不是apt-get
来安装/升级/删除/清除/降级软件包时,此脚本才能工作。
要在Ubuntu中安装apt-undo
,请在终端中运行以下命令:
sudo add-apt-repository ppa:lkjoel/apt-undo sudo apt-get update sudo apt-get install apt-undo
用法:
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
要撤消,上述aptitude
操作将在终端中执行以下命令:
apt-undo undo
使用Unix的强大function。 获取您拥有的日志文件行,并构造一个命令,以撤消apt所执行的操作。 例如:
$ 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
因此,如果日志文件中包含相应的行,则可以使用此清除意外安装的所有软件包:
$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')
(我使用了perl
而不是sed
因为sed
使用了一种不支持非贪婪匹配的正则表达式,这是构建我需要的最简单的方法)
删除一个软件包后,您可以通过添加–purge,for, apt-get remove --purge
彻底删除它,它应该会显示一条消息,即它所apt-get remove --purge
的库软件包是自动安装的,而不是更长的必要时间,此时你可以运行apt-get autoremove
来删除它们。
请使用sudo apt-get purge packagename
sudo apt-get autoremove.
除非它是元数据包,否则应该处理它。
另请参阅如何手动删除所有 Cardapio文件的常见问题解答? 。
- 将apt日志中不需要的包的长列表粘贴到
new_file.txt
- 执行
perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
- 将最后一个命令的输出复制到剪贴板或首先将其传送到剪贴板。
- 执行
sudo apt-get remove
[粘贴剪贴板的内容]
完成。
基本上我们需要将apt日志中的包列表格式化为apt-get可以理解的东西。 括号,中间的单词和逗号需要去,这就是perl进入的地方。 是的,有更好(更有效)的方式 – 但我已经做到了,它易于理解,而且有效。
如果您刚刚添加了ppa并想要还原,则需要执行下面描述的步骤。 当您安装了其他不想卸载的软件包时,了解这可能会失败。 我确信这可以用脚本完成。 我个人认为这应该是apt的一部分,并且应该更好地管理由于依赖性而安装哪些软件包,并且这些软件包是根据用户的请求安装的。
1)从/etc/apt/sources.list中删除ppa记住你添加ppa的时间。 如果你很幸运,你不需要精确。
2)从安装PPA的那一刻起列出要重新安装的内容:cat /var/log/dpkg.log | grep’升级’
3)从安装PPA的那一刻起列出要删除的内容:cat /var/log/dpkg.log | grep’install’
4)从步骤3中删除所有包:sudo apt-get remove {步骤3中的包列表}
5)重新安装步骤2中的所有软件包:sudo apt-get install –reinstall {步骤2中的软件包列表}
6)如果出现问题并且您无法想到解决方案,请放回PPA并重新安装两个列表中的所有包。
我知道这是一个很老的问题,但我来到这里寻求帮助,也许我可以帮助别人。 在安装了unity8-desktop-session-mir
后,我的情况类似于@Karthik-T的情况。 我知道这是一个很大的问题。 它随身携带了233包。
使用autoremove
我只删除其中的34个。 关键是在unity8-desktop-session-mir
安装期间,它删除了两个软件包( python3-aptdaemon.pkcompat
和evolution-data-server-online-accounts
)。 在Install
部分后面的/var/log/apt/history.log
说明了这一点。
要完全撤消Unity 8安装,我发布了以下内容:
-
sudo apt-get purge unity8-desktop-session-mir
-
sudo apt-get --purge autoremove
-
sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts
(删除了8个与Unity 8相关的软件包) -
sudo apt-get --purge autoremove
这不会删除您之前安装的所有内容,但在某些情况下已经足够了。
PS:也许第二步的autoremove
是没有必要的,正如我在第四步再次发出的那样。
从技术上讲,“删除”或“自动移动”操作不会“撤消”,尽管它们可以在大多数时间内完成这项工作。
默认情况下,apt-get会将包留下,除非你指定-o APT::Suggests-Important=0 -o APT::Recommends-Important=0
查看apt history.log
并卸载所有已安装的软件包更加可靠。 我创建了一个基于节点的小脚本来简化过程:
https://github.com/rolfen/apt-history
此外,这是另一种更加手动的“回滚”更改方法: