如何配置apt-get在每次安装后自动清理

在其他发行版中,是否有办法在apt-get install之后自动执行apt-get clean


感谢 @Braiam,我在Ubuntu中找到了一个错误,并将其报告。 在Debian中,Braiam的解决方案有效。 - Tiago Carrondo
相关:如何释放磁盘空间? - rubo77
1@TiagoCarrondo你可以分享一下bug链接吗? - Ken Sharp
在Xenial上,我所有的机器都会自动清理。我不知道这是如何配置的,但它确实起作用。 - Ken Sharp
5个回答

你只需要将其添加到适当的配置文件中即可。只需运行:
sudo sh -c "echo 'DSELECT::Clean "always";' >> /etc/apt/apt.conf.d/99AutomaticClean"

每次执行upgrade命令时,都会触发自动清理。

让我们从man页面解释一下这个条目:

Clean

缓存清理模式;该值可以是always、prompt、auto、pre-auto和never中的一个。always和prompt将在升级后从缓存中删除所有软件包,prompt(默认设置)有条件地执行此操作。auto仅删除那些不再可下载的软件包(例如被新版本替换的软件包)。pre-auto在下载新软件包之前执行此操作。

更多信息:

https://groups.google.com/d/msg/linux.debian.user/aK2jvfL_tuw/rUd6i6bd4YQJ


我猜末尾需要一个分号;!因此应该是sudo sh -c "echo 'APT::Get::Clean=always;' >> /etc/apt/apt.conf.d/99AutomaticClean" - Indian
@Braiam 我试过了,不起作用。我甚至尝试了像其他文件中一样使用 APT::Get::Clean "always",但没有运气。有什么线索吗? - Tiago Carrondo
@Braiam 没有运气 - Tiago Carrondo
@TiagoCarrondo 现在怎么样?这条Usenet消息说这是获胜者。 - Braiam
我已经在你的第一篇帖子之后尝试过了。我要改变文件位置...等一下。 - Tiago Carrondo
让我们在聊天中继续这个讨论 - Tiago Carrondo
还是不行,有一个bug。 - Tiago Carrondo
如何报告一个错误? :( - Braiam

在这里实现所需效果的最直接方法(据我所知)是使用“keep-downloaded-packages”选项:
1. 创建一个新的apt配置文件,例如:

/etc/apt/apt.conf.d/99custom-conf

将以下内容添加到文件中。
# Remove downloaded .deb files after installation by apt-get
APT::Keep-Downloaded-Packages "false";

以'99'开头的文件名意味着该配置文件是最后读取的(并将覆盖任何其他配置)。然后通过将'keep-downloaded-packages'选项的BOOL值设置为false,apt-get将自动从/var/cache/apt/archives/目录中立即删除软件包的.deb文件,安装完成后(就像'apt clean'一样)。

请注意,apt本身对于相同的选项使用单独的二进制指令,并且根据this apt NEWS条目,自2016年11月以来(至少Debian 9(Stretch)),默认设置为"false"。如果(出于任何原因)您的系统不是这种情况,您可以将以下内容追加到您的配置文件中。

# Remove downloaded .deb files after installation by apt
Binary::apt::APT::keep-downloaded-packages "false";

注意:我无法对其他桌面环境进行评论,但是KDE Plasma的Discover软件中心不受这两个选项的影响,因此通过Discover进行的任何软件包安装或升级都会保留缓存的.deb文件,您需要运行apt clean来删除这些文件。
要查看所有apt配置指令/选项的方便索引,请打开“/usr/share/doc/apt/examples/configure-index.gz”或者“configure-index(在较新版本中)”。

写一个shell脚本!
sudo nano /usr/bin/aptinstaller 

在这个文件类型中:
#!/bin/bash
sudo apt-get install $1
sudo apt-get -y autoclean
sudo apt-get -y autoremove  

保存并退出 nano,然后输入:

sudo chmod +x /usr/bin/aptinstaller 

现在每次你要输入

sudo aptinstaller <package-name> 

它会安装然后清理。

我更喜欢一个选项,但计划B听起来也不错。谢谢。 - Tiago Carrondo
2/usr/local/bin/看起来更正确。 - Ken Sharp

我的临时解决办法虽然不是一个真正的解决方案,但是我将存档目录设置为/tmp。安装后它不会自动清理,但在重启后会被清理。
我创建了/etc/apt/apt.conf.d/99clean并添加了以下内容:
Dir::Cache::archives /tmp;

或者您可以使用tmpfs挂载/var/cache/apt/archives ,尽管这显然会使用内存,我不建议选择这个选项。

例如,在/etc/fstab中:

tmpfs /var/cache/apt/archives tmpfs size=128m,mode=755 0 0

一个黑客似乎在向例如/etc/apt/apt.conf.d/clean通过)添加以下内容:
DPkg::Post-Invoke {"/bin/rm -f /var/cache/apt/archives/*.deb || true";};

这将在apt调用dpkg后自动清除缓存。
尽管如此,这不会在apt-get update之后清除缓存,可以使用hook APT::Update::Post-Invoke来实现。
最好的方法似乎仍然是手动调用apt-get clean / aptitude clean。