2

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

4

2 回答 2

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 作为“的一部分”如果”。)

于 2012-05-02T11:24:48.513 回答
0

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

#!/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.

于 2012-05-02T13:10:23.187 回答