Пагинация с командой tail -f

Я пытаюсь завершить файл с разбиением на страницы:

tail -f foo.txt | more

Это работает нормально, пока файл не получит, скажем, 200 строк, когда это происходит, характер команды tail должен идти до конца файл, в этот момент я теряю след за журналом.

Есть ли способ избежать этого?

5
задан 2 November 2012 в 18:13

3 ответа

Мое решение таково:

less some-file.log

Затем в less я нажал Shift + F . Это заставляет less обновляться с файлом. Чтобы прокрутить назад, просто нажмите Ctrl + C .

0
ответ дан 2 November 2012 в 18:13

Не совсем, используя этот метод. Вы пытаетесь использовать программы, которые ограничивают данные, но по-разному.

Попробуйте

watch -n 5 tail  -n 40 /var/log/thingy

. Он будет обновлять замкнутый дисплей каждые 5 секунд.

Это так близко, как я могу получить, но это не то, что вы хотите.

Проблема в том, что все больше ожидают всех своих данных одновременно, где хвост продолжает транслироваться. Если вы просто пытаетесь прочитать последние несколько строк снова и снова, то часы сработают. Если вы хотите просто вести журнал и прокручивать назад, используйте консольный буфер.

В X это будут полосы прокрутки, если вы используете настоящую консоль, то вам нужно использовать что-то вроде:

kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128, чтобы увеличить размер во время загрузки. Затем вы можете использовать Shift UP и Shift Down для прокрутки.

Это намного проще в X. Просто

tail -f /var/log/something.log и прокручивайте назад и вперед. Вы можете нажать Enter, чтобы создать визуальный разрыв того, где вы были.

В VTY вам нужно использовать shift вверх и shift для достижения той же цели, а если вам нужно больше прокрутки назад, используйте аргумент fbcon=scrollback:128 при загрузке.

0
ответ дан 2 November 2012 в 18:13

Используйте вместо этого tail -f log.txt | less. На моем быстром тестировании, он обновляется, чтобы перейти к новой информации, и вы можете перейти вверх или вниз. То есть, меньше обновлений в качестве выходного буфера, статически не ссылающихся на исходный контент.

Или, небольшое изменение с меньшим количеством движущихся частей (без трубы) - решение, которое Дельфин упомянул в комментарии - less +F log.txt - хороший способ. Вот что говорит справочная страница для 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.)

Другими словами, это идеально для этого случая.

1113 У него есть одна проблема, которая мешает ему быть моим любимым. Дополнение типа less +F daemon.log | egrep session не работает.

Одна из причин, по которой я продолжаю использовать каналы в моей повседневной работе с командной строкой, заключается в том, что в сочетании с историей очень просто вернуться назад, добавить канал и изменить поведение вашей команды как данных диктует. Если простое tail -f log не работает из-за того, что объем данных прокручивается за пределы экрана, ударьте по конвейеру меньше. Если объем слишком большой, но вы видите подсказки нужных вам линий, добавьте трубу в grep или egrep. Затем цепочка awk, или sed, или cut, чтобы получить именно то, что вы хотите.

Это также причина того, что «ненужное использование кошки» часто является нелепой критикой. Если вы скачали файл, но обнаружили, что он неожиданно длинный, используйте историю оболочки, нажмите стрелку вверх и сделайте что-нибудь еще с ним. Быстрая починка? Просто добавьте cat foo | more. Как долго это? Стрелка вверх и | wc. Сколько строк с "pangloss"? Добавить | egrep pangloss | wc. Хорошо, если вы можете начать команду, точно зная, куда пойдет ваше расследование, но если вы не можете, история и каналы - хороший способ добиться цели. Даже если это некрасиво, cat file | more | egrep something работает нормально.

0
ответ дан 2 November 2012 в 18:13

Другие вопросы по тегам:

Похожие вопросы: