4

Я предпочитаю использовать "меньше" для чтения лог-файлов. В отличие от «tail -f», я могу одновременно следовать (Shift + F), останавливаться (Ctrl + C) и перемещаться вверх и вниз по u и d и т.д.

Теперь, что я действительно хотел бы, это возможность очистить определенный лог-файл изнутри программы. Это возможно?

4 ответа4

5

Самый простой способ ИМХО это:
!>%
То есть: знак исключения "!" , больший знак ">" и знак процента "%" .
Может быть, это поможет.

2

Вы можете просто нажать v, чтобы отредактировать файл в vim. В vim вы должны оказаться на той строке, на которой вы в последний раз были меньше, поэтому нажатие Vggd должно удалить вашу текущую позицию в верхней части файла. С помощью : WQ вы должны вернуться в меньшее.

Тем не менее, приложение, которое записывает файл журнала, может совсем не нравиться, поэтому ваш пробег может варьироваться.

1

Самое простое, что я могу придумать, это, вероятно, использовать ^Z чтобы перевести текущий процесс в фоновый режим, удалить файлы и набрать fg чтобы вернуться к вашему процессу. Тем не менее, удаление файлов журнала не лучший способ справиться с ними, гораздо лучше обычно использовать logrotate для их сжатия.

0

Вы могли бы использовать !cp /dev/null % , чтобы усечь текущий просматриваемый файл. Но, как отметили другие, он может работать неправильно (например, если приложение, записывающее файл, сохраняет файл открытым вместо открытия / записи / закрытия для каждой записи). Вы также можете попробовать !mv -f % %.old && cp /dev/null % , который уберет файл с пути и создаст его заново.

В любом случае, я вижу странное поведение от меньшего, когда пытаюсь это. (R не обновляется с диска, G не ищет и не отображает текущее значение EOF (обычно используется для «ввода» новых строк без перехода в «хвостовой режим»), h q G читает новые строки из файла, но добавляет все содержимое файла до конца буфера, а не просто добавление новых строк в конец (файл имеет строки 1, затем 1/2, затем 1/2/3 и т. д., меньше может показать 1/1/2/1/2/1/2/3/1/2/3/1/2/3/4/1/2/3/4/1/2/3/4/5, если бы я был делать «hqG» дважды после каждой новой строки)).

Похоже, эти же проблемы возникают и с методом «использовать v для усечения по редактору».

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .