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


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.