Перестаньте использовать -f (часто)

Перевод статьи Stop using tail -f (mostly) с любезного согласия Brian Storti

Я заметил, что многие используют tail -f для мониторинга изменяемых файлов, в основном в лог-файлах. Если вы - один из таких пользователей, позвольте мне посоветовать лучшую альтернативу: less +F

На самом деле, документация по less объясняет, что для чего нужен флаг +F:

Перезод вперед, попытка чтения при достижения конца файла. Обычно эта команда используется в конце заданного файла. Это способ следить за "хвостом" файла, который растет во время просмотра. (Поведение аналогично команде "tail -f").

Документация указывает, что эта команда похожа на tail -f , но почему я думаю, что эта более оптимальна?

Проще говоря, это позволяет переключаться между навигацией и режимом просмотра. Всем знакомо: вы смотрите файл с tail -f , а затем вам нужно что-то найти в этом файле, или просто перейти вверх / вниз. Теперь вам нужно выйти из less (или открыть новую оболочку), и выполнить ack для этого файла или открыть его в Vim, и затем найти то, что вы ищете. После этого вы запускаете less снова, чтобы продолжить просмотр документа. Соответственно, нет необходимости делать это при использовании less.

Допустим, вы хотите посмотреть файл production.log:

$ less +F production.log

Important
log
information
here

Waiting for data... (interrupt to abort)

По сути, это почти то же поведение, которое вы получаете при использовании команды tail .

Теперь, скажем, появляется что-то интересное, и вы хотите найти все вхождения "Foo". Вы можете нажать Ctrl-C , чтобы перейти к "нормальному" режиму less (как если бы вы открыли файл без флага + F), затем у вас есть все нормальные возможности less, которые следовало ожидать, в том числе, поиск с /foo.

После того, как вы закончите, нажмите F, чтобы вернуться в режим просмотра. Как видите, все это делается просто.

Когда не стоит использовать less

Если вам нужно просмотреть несколько файлов одновременно, tail -f может фактически дать вам лучший результат. Будет отображено что-то вроде этого:

$ tail -f *.txt

== > file1.txt < == 
содержание первого файла

== > file2.txt < == 
содержание второго файла

== > file3.txt < == 
содержание третьего файла

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

С less было бы так:

$ less +F *.txt

содержание первого файла

Показывается содержание только одного файла за раз. Если вы хотите наблюдать, что происходит во втором файле, вы должны сначала нажать Ctrl-C , чтобы перейти к нормальному режиму, а затем ввести :n , чтобы перейти к следующему буферу, а затем F снова, чтобы вернуться в режим просмотра.

В зависимости от ваших потребностей, по-прежнему может понадобиться использовать less для нескольких файлов, но большую часть времени я работаю именно с tail. Главное, что нужно знать рабочие инструменты и при этом использовать правильный набор команд.