![如何截断所有日志文件?](https://linux22.com/image/832787/%E5%A6%82%E4%BD%95%E6%88%AA%E6%96%AD%E6%89%80%E6%9C%89%E6%97%A5%E5%BF%97%E6%96%87%E4%BB%B6%EF%BC%9F.png)
有人能给我一个解决方案来截断/var/log/
目录中的所有日志文件吗?
只是为了了解一个知识的问题,这是一个好主意吗?
#!/bin/bash
LOGDIR="/var/log"
for logfile in $(ls $LOGDIR/*log)
do
truncate -s 0 $logfile
done
答案1
尝试这个:
truncate -s 0 /var/log/*log
编辑:
如果你想多次执行此操作,你应该使用它logrotate
来处理你的日志。通常它安装在 ubuntu 中。查看man logrotate
(或者如果你没有安装它,请查看在线手册页或使用以下方式安装sudo apt-get install logrotate
)
来自手册页:
logrotate 旨在简化生成大量日志文件的系统的管理。它允许自动轮换、压缩、删除和邮寄日志文件。每个日志文件可以按日、周、月或当其变得太大时进行处理。
答案2
如果你想清除全部您的日志文件,而不仅仅是第一级日志文件夹中的文件,您可以使用:
shopt -s globstar # if needed
truncate -s 0 /var/log/*.log # first-level logs
truncate -s 0 /var/log/**/*.log # nested folders, like /var/log/nginx/access.log
请注意,如果您已经在logrotate
运行,您还需要清除轮换的.gz
日志:
find /var/log -type f -name '*.[0-99].gz' -exec rm {} +
例如,一个有效的用途可以是构建一个用于分发的 VM 设备容器。
你应该不是需要将其作为日常维护的一部分来执行:正如 DEN 非常正确建议的那样,使用logrotate
它。
答案3
作为后续行动@DEN回答
这将找到所有日志文件/var/log
并将其截断为 0 字节。
find /var/log -type f -iname '*.log' -print0 | xargs -0 truncate -s0
答案4
使用 logrotate 功能轮换 /var/logs 中的日志是一种很好的做法,但并非我们想轮换就轮换。系统日志将打印出来,它们将方便调试任何故障。
如果要求不使用 logrotate,则可以探索其他选项。虽然 truncate 是少数 unix 系统中的简单选项,但此命令并非随时可用,需要安装。如果不允许安装新命令,则可以使用以下循环。
for logfile $(ls /path/*.log)
do
cat /dev/null > $logfile
done