我的系统经常会用完磁盘空间。我要编写一个脚本来清理越来越大的目录。通常这些是日志目录。考虑到机器的性质,我不需要保留日志。
我想编写一个脚本来显示所有大小正在增加的目录,这样我就可以确保这个列表变为 0。
我正在想这样的事情
1. du /
2. wait 24 hrs
3. du /
4. find all instances where the file size increased
看起来很简单,但我的问题是 du 适用于文件和目录,而不能只适用于目录。我该如何克服这个问题?
答案1
你可以使用 find 来查看 24 小时内修改了什么,
find / -type d name \* -mtime 1 -print
应该列出过去 24 小时内发生变化的所有目录,但请记住,实际上发生变化的是文件而不是目录。
另一种方法是
du -s * | sort > currentsize
这是按目录和起始位置的文件进行总结的,但是,你可以每天存储它,将该文件移动到 oldsize,然后再次运行该命令
然后
差异 当前大小 旧大小
您可以看到发生了什么变化。
您可以使用 awk 来判断一个是更大还是更小。
所有系统日志也都会发生变化。
但是我最初提到的 find 显示了过去 24 小时内更改的文件。你也可以根据此信息使用某些东西。
答案2
如果您的问题与日志文件有关,我可以建议您使用logrotate
吗?
它能够定期将日志文件清零、归档和/或删除旧日志等。甚至可以在执行操作之前停止相关守护进程(如果所述守护进程保持日志文件打开,则可能需要这样做)。
答案3
虽然效率不高,但是你可以做这样的事情:
find / -type d -print0 | xargs -0 du -s
答案4
如前所述,用于logrotate
管理日志文件轮换和清理。它可以压缩旧日志,并在 X 代之后删除最旧的日志。
我通常使用命令遍历最大的目录来搜索空间du -s * | sort -n
。这使我能够快速找到清理会产生重大影响的目录和文件。
如果您使用munin
它来监控磁盘使用情况,您可以将其配置为在使用率高时通知。80%和90%是警告和关键消息的良好起点。
定期运行 find 来查找大于某个阈值的文件。如果您有大量较大的文件,这将无济于事,但可以检测到文件增长过大的情况。