首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apt-get删除包和安装的依赖项。

使用apt-get删除包和安装的依赖项。
EN

Unix & Linux用户
提问于 2018-01-15 09:10:28
回答 3查看 30.5K关注 0票数 8

所以我安装了一个软件包

apt-get install mypackage

apt-get用依赖项安装软件包,并报告在我的磁盘上安装了10兆字节。

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

apt-get remove mypackage

apt-get宣布将释放166千字节。

我不想把我的磁盘乱扔剩菜,所以我试着

apt-get autoremove mypackage

现在apt-get想从我的磁盘中删除166兆字节。

您知道,我如何撤消上一次安装操作,或者只是卸载一个包及其所有依赖项?

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

EN

回答 3

Unix & Linux用户

回答已采纳

发布于 2018-05-25 10:03:19

顺便问一下:

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

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

我就是这样用它的:

列出最新的apt操作:

代码语言:javascript
复制
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 (最后一个)安装的所有包的详细信息。

代码语言:javascript
复制
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)

卸载这些软件包及其配置。

代码语言:javascript
复制
sudo apt-get remove --purge `apt-history 100 Install --as-apt-arguments`

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

票数 2
EN

Unix & Linux用户

发布于 2018-01-15 09:46:40

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

您也可以将aptitude用于一般的包管理:默认情况下,它实际上是autoremoves。不过,这现在对您没有帮助,因为它将希望删除与apt autoremove相同的166MiB包。

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

票数 7
EN

Unix & Linux用户

发布于 2022-06-10 21:07:56

我从斯蒂芬的回答中得到启发

代码语言:javascript
复制
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.’做?否则如何才能达到这一效果?

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/417198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档