使用 apt-get 删除软件包和已安装的依赖项

使用 apt-get 删除软件包和已安装的依赖项

所以我安装了一个包

apt-get install mypackage

apt-get 安装带有依赖项的软件包,并报告我的磁盘上安装了 10 MB。

但我改变主意,所以我走了

apt-get remove mypackage

apt-get 宣布将释放 166 KB。

我不想把剩菜扔到磁盘上,所以我尝试

apt-get autoremove mypackage

现在 apt-get 想要从我的磁盘中删除 166 MB。

您知道,我如何撤消上次安装操作,或者仅卸载单个软件包并全部它的依赖关系?

或者,是否有另一个我可以使用的包管理工具(即使在不同的发行版上),它会将安装操作粗略地视为可以完成和撤消的原子操作?

答案1

APT 不将包更改作为事务进行管理,因此没有内置操作来撤消包安装(或任何其他包操作)。但是,它确实记录了它执行的所有操作,并按最终用户请求进行分组:如果您查看/var/log/apt/history.log,您将找到mypackage安装,以及与其一起自动安装的所有其他软件包的列表。您可以使用它来手动撤消安装。

您也可以使用aptitude它来进行常规包管理:autoremove默认情况下它实际上是有效的。不过,这现在对您没有帮助,因为它会想要删除与apt autoremove.

正如所指出的周伟军yum并将dnf包更改作为可以撤消的单元进行管理(在某些情况下)。dnf history将列出历史记录中存储的事务,并且dnf history rollbackdnf history undo可用于回滚历史记录或撤消特定事务(如果可能)。我不确定yum或者dnf可以在基于 Debian 的系统上正确使用 APT 来代替;如果您想使用这些工具进行所有包管理,您可能需要切换到 Fedora、RHEL 或 CentOS。

答案2

顺便一提:

我发现“撤消”安装操作的最可靠方法是查看 apt 日志并卸载由此操作安装的所有软件包。

因此我创建了一个解决我的问题。它有助于解析 apt 日志和恢复操作。

这就是我将如何使用它:

列出最新apt操作:

apt-history 
96 /usr/bin/unattended-upgrade
97 apt-get install adb
98 apt-get dist-upgrade
99 /usr/bin/unattended-upgrade
100 apt-get install qemu-system

显示操作#100(最后一个)安装的所有软件包的详细信息

sudo apt-history 100 Install
seabios:amd64 (1.10.2-1, automatic), ipxe-qemu:amd64 (1.0.0+git-20161027.b991c67-1, automatic), qemu-system-mips:amd64 (1:2.8+dfsg-6+deb9u3, automatic), openbios-sparc:amd64 (1.1.git20161120-2, automatic), qemu-system-misc:amd64 (1:2.8+dfsg-6+deb9u3, automatic), qemu-system-ppc:amd64 (1:2.8+dfsg-6+deb9u3, automatic), libvdeplug2:amd64 (2.3.2+r586-2.1, automatic), qemu-system-x86:amd64 (1:2.8+dfsg-6+deb9u3, automatic), openhackware:amd64 (0.4.1+git-20140423.c559da7c-4, automatic), libspice-server1:amd64 (0.12.8-2.1+deb9u1, automatic), libxenstore3.0:amd64 (4.8.3+xsa262+shim4.10.0+comet3-1+deb9u6, automatic), qemu-utils:amd64 (1:2.8+dfsg-6+deb9u3, automatic), qemu-efi:amd64 (0~20161202.7bbe0b3e-1, automatic), qemu-system-sparc:amd64 (1:2.8+dfsg-6+deb9u3, automatic), libxen-4.8:amd64 (4.8.3+xsa262+shim4.10.0+comet3-1+deb9u6, automatic), libfdt1:amd64 (1.4.2-1, automatic), qemu-slof:amd64 (20161019+dfsg-1, automatic), qemu-system-arm:amd64 (1:2.8+dfsg-6+deb9u3, automatic), qemu-system-common:amd64 (1:2.8+dfsg-6+deb9u3, automatic), openbios-ppc:amd64 (1.1.git20161120-2, automatic), qemu-system:amd64 (1:2.8+dfsg-6+deb9u3)

卸载这些包及其配置。

sudo apt-get remove --purge `apt-history 100 Install --as-apt-arguments`

警告:为了安全起见,仅对最后一个安装命令执行此操作,并一次回滚一个命令。

答案3

受到斯蒂芬的回答的启发,我使用了

UNINSTALL_THIS=cockpit
cat /var/log/apt/history.log | grep -Po "Install: \K.*$UNINSTALL_THIS.*" | sed -E 's/:[^\)]*\),*//g'

cockpit打印要删除以供使用的可复制粘贴的软件包列表sudo apt remove <paste>

有关 grep 命令的说明,请参阅:grep -Po '...\K...' 的作用是什么?还有什么办法可以达到这样的效果呢?

相关内容