Quão eficiente é o comando tac em arquivos grandes

4

O comando tac ( cat invertido) pode ser usado para ler um arquivo para trás, assim como cat o lê do começo ao fim. Eu me pergunto, quão eficiente isso é. Ele precisa ler todo o arquivo desde o início e, em seguida, reverte alguns buffers internos quando chega ao fim?

Eu estava planejando usá-lo para um script de monitoramento chamado freqüentemente, que precisa inspecionar as últimas n linhas de um arquivo de várias centenas de megabytes de tamanho. No entanto, não quero que isso cause carga pesada de E / S ou preencha o espaço do cache com informações inúteis, lendo o arquivo várias vezes (aproximadamente uma vez por minuto)

.

Alguém pode lançar alguma luz sobre a eficiência desse comando?

    
por Daniel Schneller 28.01.2015 / 14:26

1 resposta

4

Quando usado corretamente, tac é comparativamente eficiente para tail - lendo 8K blocos de cada vez, buscando na parte de trás.

"Uso correto" exige, entre outras coisas, que ele seja um identificador direto e pesquisável do seu arquivo:

tac yourfile   # this works fine

... ou ...

tac <yourfile  # this also works fine

NÃO

# 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

Dito isso, eu consideraria a execução repetitiva de uma ferramenta dessa natureza uma maneira muito ineficiente de verificar logs, em comparação ao uso de logstash ou uma ferramenta semelhante que pode ser alimentada em um armazenamento indexado e / ou gerar eventos para reais. análise de tempo por um mecanismo CEP, como Esper ou Apache Flink .

    
por 04.10.2016 / 19:23