Откройте текстовый файл и дайте ему самому обновить


20

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

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

Я только что попробовал:

$ tail error.log

Но только понял, что он просто показывает вам строки в файле журнала.

Я использую RHEL 5.10


4
Использованиеtail -f error.log
garethTheRed

Ах, tailкак правильно его использовать? Вау, я действительно не думал, что смогу это использовать. Я ожидал гораздо более длинного выражения.
Kevdog777

1
К вашему сведению, в то время как хвост является инструментом для работы, буквально open a text file and let it update itselfможно достичь watch cat filename.
Ктулху

1
@ Ктулху, ты имеешь в виду watch cat filenameили похожий. watch filenameбудет пытаться выполнить filename.
Тердон

@terdon Да, действительно.
Ктулху

Ответы:


29

Вы ищете tail -f error.log(от man tail):

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

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


И это не израсходует много ресурсов?
Kevdog777

1
@ Kevdog777 на самом деле нет. Предположительно, он просто открывает файл каждые несколько секунд, чтобы обновить его. Это классический способ делать то, что вы хотите, хотя.
Тердон

1
@terdon, он только открывается (может открываться) -F. С -fним просто читает каждую секунду. Это как while cat; do sleep 1; done < file. Посмотрите inotailна Linux для более реактивного хвоста (используется, inotifyчтобы знать, когда файл изменяется).
Стефан Шазелас

@ StéphaneChazelas: я уверен, что это намного эффективнее. Могу поспорить, что он использует select или poll, чтобы увидеть, доступен ли для чтения fd, а затем спит, пока на fd не появятся данные. Хотя я могу быть совершенно не прав.
Мартин Йорк

1
@LokiAstari, вы не можете добиться гораздо большей эффективности, чем readсистемный вызов каждую секунду. «Чтение» selectили pollв обычном файле всегда возвращает true, поскольку read()в обычном файле никогда не блокируется, поэтому не будет работать. Сказав это, GNU tailтеперь использует inotifyв Linux, поэтому inotailбольше не нужен.
Стефан Шазелас

20

Используйте «меньше» вместо «хвост» для прокрутки и поиска

Вы можете использовать tail -f error.logили, лучше: tail -F error.log.

Но если вы хотите прокрутить файл назад, это не очень полезно.

С

less +F error.log

Вы получаете функцию tail -f,
но можете прервать чтение нового ввода с помощью Ctrl+ C.

Затем вы находитесь в обычном lessрежиме,
где вы можете прокрутить назад, чтобы увидеть, что вы, возможно, пропустили с помощью Up/ Down
Также вы можете читать длинные строки файла журнала без переноса, используя Left/Right

Искать и показывать только совпадающие строки

Вы также можете искать регулярные выражения с /, ?назад nи Nдля следующего / предыдущего.

Для файлов журналов очень интересно то, что вы можете скрыть все несоответствующие строки для поиска &, отфильтровывая только совпадения.

Ключи в командной строке

С Fвнутренней стороны less, вы по- прежнему в tail -f-like режим.
В +командной строке less +Fозначает «нажать эти клавиши сразу после запуска меньше».

Таким образом, мы использовали нажатие клавиш Fпри запуске, которое описывается как:

F  Scroll  forward,  and  keep trying to read when the end of file is
   reached.  Normally this command would be used when already at  the
   end  of the file.  It is a way to monitor the tail of a file which
   is growing while it is being viewed.  (The behavior is similar  to
   the "tail -f" command.)

Смотрите также, multitailесли вам нужно посмотреть более одного файла журнала.


Спасибо, но tail -f error.logидеально подходит для того, что мне нужно. Файл журнала обновляется только каждый час, поэтому для меня этого достаточно :-)
Kevdog777

1
Обязательно запомните это в следующий раз;)
Volker Siegel

mostтакже есть tail -fрежим с F.
Стефан Шазелас

@ StéphaneChazelas верно, спасибо! Хммм ... я помню, кто-то поблагодарил меня за упоминание mostнекоторое время назад ... и я забыл это.
Фолькер Сигел

@ StéphaneChazelas Но тогда, mostкажется, нет функции меньшего фильтра &для отображения только совпадающих строк? Обычно полезная функция в лог-файлах.
Фолькер Сигел

5

Используйте -fопцию с tail:

-f, --follow [= {name | descriptor}] выводить добавленные данные по мере роста файла; -f, --follow и --follow = дескриптор эквивалентны

Или используйте Fкоманду внутри less:

   F      Scroll forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already at the end of the file.  It is a way to mon‐
          itor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f" command.)

Что нового в этом ответе?
Bluefoggy

1
Я не понимаю, о чем вы спрашиваете. Это был второй ответ на этот вопрос и первый, который упомянул less.
Аркадиуш Драбчик
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.