Назад | Перейти на главную страницу

Насколько эффективна команда tac для больших файлов

В tacкоманда (catreverse) можно использовать для чтения файла в обратном направлении, как и cat читает с начала. Интересно, насколько это эффективно. Должен ли он читать весь файл с самого начала, а затем перевернуть некоторый внутренний буфер, когда он достигнет конца?

Я планировал использовать его для часто вызываемого сценария мониторинга, который должен проверять последние n строк файла размером в несколько сотен мегабайт. Однако я не хочу, чтобы это приводило к большой нагрузке ввода-вывода или к заполнению кеш-памяти бесполезной информацией при многократном чтении файла (примерно раз в минуту или около того).

Может ли кто-нибудь пролить свет на эффективность этой команды?

При правильном использовании tac сравнительно эффективен tail - чтение 8К блоков за раз, поиск сзади.

«Правильное использование» требует, помимо прочего, предоставления ему прямого и доступного для поиска дескриптора вашего файла:

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.