所以我安装了一个软件包
apt-get install mypackage
apt-get用依赖项安装软件包,并报告在我的磁盘上安装了10兆字节。
但我改变主意了,所以我走了
apt-get remove mypackage
apt-get宣布将释放166千字节。
我不想把我的磁盘乱扔剩菜,所以我试着
apt-get autoremove mypackage
现在apt-get想从我的磁盘中删除166兆字节。
您知道,我如何撤消上一次安装操作,或者只是卸载一个包及其所有依赖项?
或者,我是否还可以使用另一个包管理工具(即使在不同的发行版上),它可以将安装操作粗略地视为可以执行和撤消的原子操作?
发布于 2018-05-25 10:03:19
顺便问一下:
我发现,“撤消”安装操作最可靠的方法是查看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`警告:为了安全起见,只对最后一个安装命令执行此操作,并每次回滚一个命令。
发布于 2018-01-15 09:46:40
APT不以事务的形式管理包更改,因此不存在撤销包安装(或任何其他包操作)的内置操作。但是,它确实记录了它执行的所有操作,按最终用户请求分组:如果您查看/var/log/apt/history.log,您将发现mypackage安装,以及与它一起自动安装的所有其他包的列表。您可以使用它来手动撤消安装。
您也可以将aptitude用于一般的包管理:默认情况下,它实际上是autoremoves。不过,这现在对您没有帮助,因为它将希望删除与apt autoremove相同的166MiB包。
正如周卫军所指出的,yum和dnf确实将包更改管理为可以撤消的单元(在某些情况下)。dnf history将列出存储在历史记录中的事务,dnf history rollback或dnf history undo可用于回滚历史记录或撤消特定事务(如果可能)。我不确定yum或dnf是否可以在基于Debian的系统上正确地使用,而不是APT;如果您想使用这些工具来进行包管理,您可能需要切换到Fedora、RHEL或CentOS。
发布于 2022-06-10 21:07:56
我从斯蒂芬的回答中得到启发
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.’做?否则如何才能达到这一效果?
https://unix.stackexchange.com/questions/417198
复制相似问题