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

Linux: Как проверить, сколько строк было добавлено в файл за последнюю секунду?

Как я могу проверить с помощью Linux / Bash, сколько строк было добавлено в выбранный файл журнала, например, за последние 10 секунд?

Это одноразовое использование, а не для работы в фоновом режиме. Файл не содержит информации о времени.
Мне также не нужно это произвольное -> я могу выбрать момент, когда я хотел бы отслеживать количество добавленных строк, и сделать это в течение некоторого времени.

Спасибо!

Это одноразовое использование, а не для работы в фоновом режиме. Файл не содержит информации о времени.

Тогда это намного сложнее, ни одна утилита не делает это из коробки, потому что если бы это было так, это означало бы, что она знала о содержимом файлов 10 секунд назад. Но нет ничего волшебного в «10 секундах», которое означало бы, что данные записи хранятся / буферизируются так долго (если только не ведется вторичный журнал о какие это пишет в файл журнала и когда).

Лучше всего:

  • Выполните команду, которую дал Лейкс, или ее эквивалент, например tail -s 10 -f FILE поэтому он выводит содержимое файла блоками по 10 секунд.
  • Отметьте сам файл журнала: echo '-- MARKER --' >> FILE и проверяйте, чего хотите.

Но в любом случае вам нужно будет развернуть собственное решение.

Вы можете настроить задание, которое будет регистрировать время и количество строк в файле. Альтернативный способ - вставить метку времени в файл журнала и проверить количество строк между метками времени.

Вы не можете сделать это, если не знаете, что вам нужно будет сделать это заранее (что позволит вам скопировать файл или сделать снимок файловой системы в нужное время). Даже версионные файловые системы (которые встречаются редко) не регистрируют каждый символ или строку, которые меняются. так как меняется. Лучшее, на что вы когда-либо могли надеяться, - это сказать: «Последним изменением были эти данные, и оно произошло между временем X и временем Y».

На основе ответа Zoredache: похоже, что тайм-аут также убивает канал, но вы все равно можете перенаправить вывод в какой-то временный файл, а затем подсчитать строки в нем.

timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l

или с часами

watch -n3 "bash -c 'timeout 2 tail -f logfile >/tmp/outp ; cat /tmp/outp | wc -l'"
rm /tmp/outp