Использование tail -F для просмотра изменений файла в режиме реального времени
У меня есть скрипт, который собирает размер файла, который постоянно подается. Я передаю его размер в файл журнала (echo 'filesize is $size' > log.txt), поэтому у меня есть только последняя информация о размере. Итак, только одна строка.
Теперь, в другом терминале, я хотел привязать этот лог-файл, чтобы увидеть, как его размер увеличивается в реальном времени. Оказывается, tail -f path/to/file дает мне вывод, который я хочу, но он продолжает переходить к следующей строке (как и следовало ожидать, я предполагаю).
Итак, результат выглядит примерно так:
$ tail -F log.txt 2>/dev/null
filesize is 1.658 GB
filesize is 1.659 GB
filesize is 1.659 GB
filesize is 1.660 GB
Я хотел что-то более похожее на команду "меньше", в которой у вас нет курсора назад. Возможно, лучшим примером будет "mtr", который постоянно обновляет информацию на экране, не переходя на следующую строку (в отличие от traceroute).
Спасибо,
4 ответа
while [ 1 ]; do sleep 1; clear; tail log.txt; done
Это не имеет недостатка передачи команды и аргументов watch
(иногда вам нужно прыгать дополнительные петли, чтобы сделать это правильно), и это очищает терминал.
Вы можете watch
команда для отслеживания изменений файла / разницы (-d
) каждый n
секунд
watch -n 5 -d cat log.txt
Самое красивое решение для получения информации о файле в реальном времени - использовать inotify
Который является функцией ядра Linux, чтобы получать уведомления при изменении конкретного файла. Вы можете написать свою собственную программу на c, которая использует эту функциональность, или просто создать скрипт с помощью команды inotify-wait или inotify-watch. Вы вероятно должны установить это все же. Но оба хорошо документированы. Новые версии tail также используют эту функциональность ядра Linux
РЕДАКТИРОВАТЬ: имейте в виду, что это только помогает вам контролировать файловые события. То, что вы делаете, когда происходит такое событие, не моя чашка чая.
PS. Рассматривали ли вы, что процесс, который записывает файл, МОЖЕТ сбрасывать свой буфер записи только при наличии разрыва строки