我需要删除所有以“a”开头的文件。一旦我的 /tmp 容量超过 50% 并且此命令应始终在后台运行。我是 Unix 新手,所以有人可以帮助我。
2 回答
我会尽力帮助而不给你答案。这样你就可以学习一些其他的东西了!
首先,您可能希望将一堆命令保存为脚本并使用 cron 之类的东西运行它。你可以这样做,while true ; do rm a.* ; sleep 60 ; done
但它不会在重新启动后重新启动。Cron 工作会。
那行代码每分钟运行一次并删除 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 作为“的一部分”如果”。)
您可以做很多事情,而无需昂贵的分叉和管道来解析和匹配命令输出。我的建议是使用类似的命令脚本
#!/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
.