如果 /tmp 中的已用磁盘空间超过 50%,我想删除与'a.*'匹配的所有文件


一旦

我的/tmp 的容量超过 50%,我需要删除所有以"a."开头的文件,并且此命令应始终在后台运行。我是Unix的新手,所以有人可以帮助我。

我会尽力帮忙,但不给你答案。这样你就可以学到一些其他的东西!

首先,您可能希望将一堆命令保存为脚本,并使用类似 cron 的东西运行它。您可以像while true ; do rm a.* ; sleep 60 ; done一样,但它在重新启动后不会重新启动。克龙工作会。
该行代码每分钟运行一次并删除 a.*。如果需要,每秒将 60 更改为 1。为了使其更有用,请查看您最喜欢的磁盘空间命令,使用 cut 和 grep 之类的东西来获取某些字段并删除标题行(如果没有基本空间命令的选项来输出 %space(
例如

[max@fedora ~]$ df /tmp
Filesystem     1K-blocks   Used Available Use% Mounted on
/dev/sda6        4866748 202812   4419868   5% /tmp
[max@fedora ~]$ df /tmp | grep tmp| cut -c43-45
  5

然后你只需要看看一些if语句语法,你就离开了。将写入的命令保存到名为"space_clear.sh"的文件中,然后将space_clear.sh添加到 cron 以每分钟运行一次,然后您就离开了。
重要提示:当您进行测试时,请执行ls a.*而不是rm a.*,然后如果您弄错了,它只是向您显示它会删除的文件,而不是删除它们!记住,把事情弄错就是学习。
(如果你仍然卡住了,请阅读if,then和fi你喜欢的shell(bash/ksh csh/bourne(。坚持使用 df 命令,在带有比较运算符的反引号中加上额外内容,并将 50 作为"if"的一部分。

您可以做很多事情,而无需昂贵的分支和管道来解析和匹配命令输出。我的建议是使用命令脚本,例如

#!/bin/sh
PATH=/bin:/usr/bin:/sbin:/usr/sbin   # Cron does not export any PATH.
case `df /tmp` in
    (* [5-9]?% *) rm -f /tmp/a.*
esac

这与使用的百分比由 df 输出的列无关。请注意,这适用于 50% 到 99% 的 Use% 值,但不适用于 100% 及以上(由于为超级用户保留了空间,可能会发生这种情况(。这是作为练习:-(

现在,对于定期运行它,您可以设置VISUAL=vi和/或EDITOR=vi,然后crontab -e将弹出您指定的编辑器。插入一行,例如

* * * * * /full/path/to/above/script

保存并退出。这将每分钟运行一次脚本。每十分钟一次

0,10,20,30,40,50 * * * * /full/path/to/above/script

确保脚本是可执行的,chmod +x /full/path/to/above/script .

最新更新