我的/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
.