В tac
команда (cat
reverse) можно использовать для чтения файла в обратном направлении, как и 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.