我有一个 github 操作,其中有一个释放空间的步骤,它有一个 apt purge 命令,后面跟着数百个包。但如果一个包不可用,整个过程就会失败
如果您一次性清除或删除大量软件包,如何强制清除现有已安装的软件包?
例子:
sudo apt purge pack1 pack2 pack3 -y
如果 pack1 和 pack2 存在,但 pack3 不存在,则过程失败
E: Unable to locate package 'pack3'
并且 pack1 和 pack2 未被清除。
即使剩下的一个不存在,如何强制删除 pack1 和 pack2?
答案1
说到点子上
不用说:
无论出于什么原因,一次清除数百个已安装的软件包都是一个坏主意。
使用 APT 的选项
-y
自动回答是,这是一个更糟糕的想法。
您可能知道这一点,但我必须注意这一点......关于您的问题:
据我所知,APT 无法做到这一点...APT 所做的不仅仅是尝试安装、删除、清除等基本操作...它还解决依赖关系、避免和警告冲突、替换一些被删除的包...等等...因此,它必须先根据其缓存的可用包数据库解析/检查所有传递的包,然后才能开始对它们执行任何用户指定的操作。
因此,在这种情况下,最好的办法是将这些包一次一个地传递给 APT,方法xargs
如下:
echo "pack1 pack2 pack3" | xargs -n 1 apt purge
或者使用类似 shell 循环:
for p in "pack1" "pack2" "pack3"
do
apt purge "$p"
done
或类似的解决方案。
另一方面,如果使用 APT 对你来说不是必须的,那么dpkg
应该在不退出此类软件包的情况下完成工作”Unable to locate packages
“并且可以像这样使用:
dpkg --purge pack1 pack2 pack3
围绕要点
示范:
$ apt -s purge -y vlc golang
NOTE: This is only a simulation!
apt needs root privileges for real execution.
Keep also in mind that locking is deactivated,
so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package 'golang' is not installed, so not removed
The following packages will be REMOVED:
vlc*
0 to upgrade, 0 to newly install, 1 to remove and 5 not to upgrade.
Purg vlc [3.0.16-1build7]
请注意执行操作之前的三个步骤purge
:
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
这些都是不言自明的,尽管包golang
没有安装:
Package 'golang' is not installed, ...
但是,APT 可以在其缓存的包列表中找到它,从而可以对其做出决定:
... so not removed
和:
The following packages will be REMOVED:
vlc*
...
这是正常的,APT 将继续删除已安装的软件包
但是如果 APT 无法在其缓存的包列表中找到某个包:
$ apt -s purge -y vlc non-locatable-package
NOTE: This is only a simulation!
apt needs root privileges for real execution.
Keep also in mind that locking is deactivated,
so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package non-locatable-package
APT 无法做出决定,因此在打印错误后退出:
E: Unable to locate package non-locatable-package
重要的提醒:
如上所示,APT 检查通过操作获得的缓存软件包列表update
,因此,最新的软件包列表对于 APT 的正确功能至关重要,使用过时的软件包列表执行purge
或remove
操作install
可能会导致意外结果,删除不需要的软件包...例如apt-get install 意外删除了 Firefox...因此,请通过运行以下命令确保软件包列表是最新的:
sudo apt update
第一的。