Я хочу прочитать весь файл и заставить его ждать ввода, точно так же, как и tail -f
с отображением всего файла.
Длина этого файла всегда будет меняться, потому что это .log
файл.
Как я могу это сделать, если я не знаю длину файла?
command-line
tail
malworm
источник
источник
less
имеет клавишу «F». Полезно, если вам нужно взаимодействие.Ответы:
tail
позволяет добавить,-n
чтобы указать количество строк для отображения с конца, который может использоваться вместе с-f
. Если аргумент для-n
начинается с+
этого, это количество строк с начала (0
и1
отображение всего файла с2
указанием пропустить первую строку, как указано @Ben). Так что просто сделайте:Если ваши файлы журналов повернуты, вы можете добавить
--retry
(или объединить-f and --retry
в-F
соответствии с предложением @Hagen)Также обратите внимание, что в графическом терминале вы можете использовать мышь и PageUp/ PageDownдля прокрутки назад в историю (при условии, что ваш буфер достаточно большой), эта информация остается там, даже если вы используете Ctrl+ Cдля выхода
tail
. Если вы используетеless
это гораздо менее удобно, и AFAIK, вы должны использовать клавиатуру для прокрутки, и я не знаю средств, чтобы неless
деинициализировать termcap, если вы забудете начать с него-X
.источник
+
) реализован более эффективно.+1
для обучения меня о+0
. Вы можете хотеть-F
вместо того,-f
чтобы вращать файлы журналаtail -n +1
показывает начало файла для меня иtail -n +2
пропускает одну строку. Я думаю, что номер является номером строки первой отображаемой строки.Есть способ лучше достичь этого:
Он покажет вам весь файл, имеет полную мощность
less
и будет ждать нового ввода. Если вы хотите прекратить ожидание ввода и прочитать определенную часть, вы можете остановить ее^C
и продолжить с помощьюF
.Команда
F
всегда доступнаless
, если вы решите следить за изменениями, когда файл открытless
, нажатиеF
включит его. Спасибо hiergiltdiestfu и wildcard за то, что указал на это.источник
tail
. Спасибо за совет; Я никогда бы не подумал использоватьless
для этого. Примечание для других: вы также можете просто запустить,less <file>
а затем набратьF
.В дополнение к ответу / u / Anthon вы можете сделать что-то вроде:
Эта
-0
опция для tail эквивалентна-n 0
значению: 0 строк. Но-f
будет отображаться новые строки.Вам не нужны брекеты
{ }
. Я использовал их, потому что иногда вы хотите каким-то образом перенаправить файловые дескрипторы. Например:Отмечено Беном Милвудом: у вас может быть состояние гонки, когда файл увеличивается между концом
cat
операции и началомtail
операции. Но опять же, это «академическая» проблема для академического решения.источник
cat
окончанием иtail
началом, вы не увидите эти строки. Вряд ли это будет грандиозно, но повод отдать предпочтение чистомуtail
решению.{ cat; tail -n +0 -f; } < file
это исправит гонку, потому что tail будет печатать любые новые данные, которые появляются междуcat
выходом иtail
запуском. Конечно, это делаетcat
излишним. Перенаправление происходит только один раз, иtail
stdin - это дескриптор файла, которыйcat
уже считан в EOF, поэтому его текущая позиция находится там, гдеcat
остановлена. Вы можете проверить это, вставивecho foo >> file
внутрь{}
, чтобы создать гонку каждый раз.watch
Команда должна сделать это за вас.Вы также можете попробовать
У вас будет больше опций с
less
командой прокрутки вашего файла, поскольку вы говорите, что это большой файл.источник
+F
вариант