tac命令在大文件上的效率如何

可以使用tac命令(反转的cat )向后读取文件,就像cat从头开始读取文件一样。 我想知道,这是多高效。 它是否必须从头开始读取整个文件,然后在内存缓冲区达到最后时才反转?

我打算把它用于一些经常被称为监视脚本,它需要检查数百兆字节大小的文件的最后n行。 不过,我不希望这样做会导致沉重的I / O负载,或者通过反复读取文件(大约每分钟一次)读取其他无用的信息来填充caching空间。

任何人都可以看到这个命令的效率吗?

如果使用得当, tac可以相当有效地从tail追踪8K块。

“正确使用”要求,除其他外,要给你的文件一个直接的,可查找的句柄:

 tac yourfile # this works fine 

…要么…

 tac <yourfile # this also works fine 

 # DON'T DO THIS: # this forces tac to copy "yourfile" to a new temporary file, then uses its regular # algorithm on that file. cat yourfile | tac 

也就是说,与使用logstash或类似工具相比,我认为可以反复运行这种性质的工具,这是一种非常低效的扫描日志的方式,可以将其用于索引存储和/或生成事件以供CEP进行实时分析引擎如Esper或Apache Flink 。