Відкрийте текстовий файл і дайте йому оновитись


20

Як я можу відкрити текстовий файл і дозволити йому оновитись? Подібно до способу topроботи.

Я хочу відкрити файл журналу і спостерігати за його оновленням на ходу.

Я щойно спробував:

$ tail error.log

Але щойно зрозумів, що він просто показує вам рядки у файлі журналу.

Я використовую RHEL 5.10


4
Використанняtail -f error.log
garethTheRed

Так, tailце правильний спосіб його використання? Нічого собі, я дійсно не думав, що зможу цим скористатися. Я очікував значно більш тривалого вираження.
Kevdog777

1
FYI, хоча хвіст є інструментом для роботи, буквально open a text file and let it update itselfможе бути досягнуто watch cat filename.
Cthulhu

1
@Cthulhu ви маєте на увазі watch cat filenameабо подібне. watch filenameспробують стратити filename.
terdon

@terdon Так.
Cthulhu

Відповіді:


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 насправді ні. Імовірно, він просто повторно відкриває файл кожні кілька секунд, щоб оновити його. Це класичний спосіб робити те, що ви хочете, хоча.
terdon

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

@ StéphaneChazelas: Я впевнений, що це набагато ефективніше, ніж це. Я б став би, використовуючи select або опитування, щоб дізнатись, чи fd читабельний, а потім спати, поки не знайдуться дані про fd. Хоча я можу абсолютно помилятися.
Мартін Йорк

1
@LokiAstari, ви не можете отримати набагато ефективніше, ніж readсистемний дзвінок щосекунди. "Прочитаний" selectабо pollу звичайному файлі завжди повертає істину, оскільки read()ніколи не блокується у звичайному файлі, тому не буде працювати. Сказавши це, GNU tailзараз використовує inotifyLinux, тому inotailбільше не потрібен.
Stéphane Chazelas

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якийсь час назад, і я це забув.
Volker Siegel

@ StéphaneChazelas Але, mostздається , чи не має менша функція фільтра &показувати лише відповідні рядки? Зазвичай корисна функція в файлах журналів.
Volker Siegel

5

Використовуйте -fваріант із tail:

-f, --follow [= {ім'я | дескриптор}] виводить додані дані у міру зростання файлу; -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.