tac 命令对大文件的效率如何

tac 命令对大文件的效率如何

命令tac( catreversed) 可用于反向读取文件,就像cat从头开始读取一样。我想知道,这有多高效。它是否必须从头开始读取整个文件,然后在到达末尾时反转一些内部缓冲区?

我计划将它用于一些经常调用的监控脚本,这些脚本需要检查一个大小为几百兆的文件的最后 n 行。但是,我不希望通过反复读取文件(大约每分钟一次)导致 I/O 负载过重或用无用信息填满缓存空间。

有人能解释一下该命令的效率吗?

答案1

如果使用正确,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 引擎进行实时分析,例如艾斯珀或者Apache Flink

相关内容