Як я можу переглянути весь файл, а також дочекатися, коли до нього буде додано більше даних?


21

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

Довжина цього файлу завжди буде змінюватися, оскільки це .logфайл.

Як це зробити, якщо я не знаю довжину файлу?


2
ви вже знаєте, що хвіст близький до того, що ви хочете. ти читав сторінку чоловіка для цього?
njzk2

1
lessмає клавішу "F". Корисно, якщо вам потрібна взаємодія.
Thorbjørn Ravn Andersen

Відповіді:


33

tailдозволяє додати, -nщоб вказати кількість рядків для відображення з кінця, які можна використовувати спільно з -f. Якщо аргумент для -nпочатку починається з +цього, - це кількість рядків з початку ( 0і 1відображення всього файлу, що 2вказує на пропуск першого рядка, як зазначено в @Ben). Тож просто роби:

tail -f -n +0 filename

Якщо ваші журналові файли обертаються, ви можете додати --retry(або об'єднати -f and --retryїх, -Fяк запропонував @Hagen)

Також зауважте, що в графічному терміналі ви можете використовувати мишу та PageUp/ PageDownдля прокрутки назад в історію (якщо припустимо, що ваш буфер достатньо великий), ця інформація залишається там, навіть якщо ви використовуєте Ctrl+ Cдля виходу tail. Якщо ви користуєтеся lessцим набагато менш зручно, і AFAIK вам доведеться використовувати клавіатуру для прокрутки, і я не знаю засобів, щоб уберегтися lessвід дезініціалізації termcap, якщо ви забудете запустити його -X.


1
+1 Ваша відповідь з’явилася, як тільки я розмістив свою, і хоча моя працює, ваша краще.
Джулі Пелтьє,

1
Я отримав повідомлення, поки я ще писав, що ще одна відповідь є і що я повинен натиснути, щоб оновити. Ваша відповідь дозволить виконати роботу, але я не здивуюсь, що підрахунок від початку (вимушений з цим +) реалізується більш ефективно.
Антон

1
+1для навчання мене о +0. Ви можете -Fзамість того, -fщоб обертати
логіни

Я думаю, що тут немає переліку. tail -n +1показує початок файлу для мене і tail -n +2пропускає один рядок. Я думаю, що число - це номер рядка першого відображеного рядка.
Бен Мілвуд

1
@Anthon дякую! Це саме те, що мені потрібно!
лишай

37

Є кращий спосіб досягти цього:

less +F <file>

Він покаже вам весь файл, має повну потужність lessі буде чекати нового введення. Якщо ви хочете зупинити очікування на введення та прочитати певну частину, ви можете зупинити її ^Cта продовжити роботу F.

FКоманда завжди доступна less, якщо ви вирішили спостерігати за зміни, маючи відкритий в Файл less, б'ючи Fвключимо його. Завдяки hiergiltdiestfu та wildcard, що вказали на це.


2
Це дійсно набагато краще, ніж tail. Дякую за пораду; Я б ніколи не думав використовувати lessдля цього. Примітка для інших. Ви також можете просто запустити less <file>та ввести F.
Wildcard

3

Окрім відповіді / u / Anthon, ви можете зробити щось на кшталт:

{ cat filename; tail -0f filename; }

Цей -0варіант хвоста еквівалентний -n 0, тобто: dispaly 0 рядків. Але на -fекрані з'являться нові рядки.

Вам не потрібні брекети { }. Я використовував їх, тому що іноді хочеться якимось чином перенаправити файли архіваторів. Наприклад:

{ cat ; tail -0f -; } < /var/log/messages

Відмітив Бен Мілвуд: у вас може виникнути стан перегонів, коли файл зростає між кінцем catоперації та початком tailоперації. Але знову ж таки, це "академічна" проблема академічного рішення.


3
Якщо файл зростає між catзавершенням і tailзапуском, ви не побачите цих рядків. Навряд чи це буде велика справа, але причина віддати перевагу чистому tailрішенню.
Бен Мілвуд

Я думаю, що { cat; tail -n +0 -f; } < fileце виправить гонку, тому що хвіст надрукує будь-які нові дані, що з’являються між catвиходом tail'і запуском. Звичайно, це робить catзайвим. Перенаправлення відбувається лише один раз, а tailstdin - це дескриптор файлу, який catвже зачитувався в EOF, тому його поточне положення є де catзупинено. Ви можете протестувати, помістивши echo foo >> fileвсередину {}, щоб кожен раз створювати гонку.
Пітер Кордес

2

watch команда повинна це зробити для вас.

Ви також можете спробувати

less +FG 

У вас буде більше варіантів з lessкомандою для прокрутки по вашому файлу, як ви кажете, що це великий файл.


Менше також не слідкує за зростаючим файлом.
Шадур

7
@Shadur, так, саме для цього +Fваріант
glenn jackman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.