是否有更好的方法来清理日志文件?我通常会删除旧的日志文件并创建一个新的日志文件,而我正在寻找一个较短的type / bash / command程序。如何使用别名?

#1 楼

> logfile




cat /dev/null > logfile




true | tee logfile


(可以随意替换) false或任何其他不产生输出的命令,例如:bash中所做的),如果您想更雄辩,将全部清空logfile(实际上它们会将其截断为零大小)。

如果您想知道它需要多长时间,可以使用

dd if=/dev/null of=logfile


(顺便说一下,它与dd if=/dev/null > logfile相同)

您还可以使用

truncate --size 0 logfile


(或truncate -s 0 logfile)来明确显示,或者,如果不想的话,使用

rm logfile


(在这种情况下,您依赖的通常行为是应用程序通常会在尚不存在的情况下重新创建日志文件)。

但是,由于日志文件通常很有用,因此您可能要压缩并保存副本。尽管您可以使用自己的脚本来执行此操作,但是至少尝试使用现有的工作解决方案(在这种情况下为logrotate)是个好主意,该解决方案可以做到这一点并且可以合理配置。

需要对多个文件执行此操作,安全的方法是

truncate -s 0 file1 file2 ...




> file1 > file2 ...


某些外壳( zsh)还允许一个人指定多个重定向目标。

这有效(至少在bash中有效),因为它创建了所需的所有重定向,尽管只有最后一个可以捕获任何输入(或在这种情况下没有) 。在任何情况下,带有多个文件的tee示例都应该工作(假设您的tee确实知道如何处理多个输出文件)

当然,良好的旧Shell循环也可以工作:

 for f in file1 file2 ... ; do
    # pick your favourite emptying method
done
 


,尽管由于每个文件分别运行该命令会很慢。使用find可能会有所帮助:

find <criteria matching required files> \
    -exec <command capable of zeroing several files> {} \+




find <criteria matching required files> -delete


评论


切碎怎么办?可以将我的日志文件归零吗?

– Gigamegs
2013年9月25日20:37在

您到底想实现什么?切碎将破坏数据,因此即使使用取证工具(即从旋转的硬盘HDD)也将很难恢复它们,但是会花费一些时间(它将多次覆盖文件使用的块)。 >日志文件只会截断它(很快)。

–彼得
2013年9月25日20:45在

@Phpdna logrotate具有切细选项。使用logrotate。

– Sammitch
2013年9月25日在22:04

我没有多少空间了。这是新东西吗?

– Gigamegs
13年9月25日在22:09

实际上也会截断该文件的@LukeGriffiths,因为它将在使用O_TRUNC标志生成命令之前由外壳程序将其打开。有关更多详细信息,请参见unix.stackexchange.com/questions/159513/…。

–彼得
17-10-15在22:58