Как мне уменьшить имя файла, а не номер инода?

Как мне уменьшить имя файла, а не номер инода?

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

Если я начинаю lessнормально с less program.logи нажимаю Shift+ fдо конца, когда файл журнала ротируется, я продолжаю следить за старым файлом журнала. Я предполагаю, что это происходит потому, что номер inode остается прежним и lessимеет открытый файловый дескриптор для этого inode.

Возможно ли отслеживать последнюю активность в любом файле журнала, который в данный момент называется program.log?

В частности, я работаю на Sun OS, поэтому решение, работающее там, было бы идеальным.

решение1

Используйте less --follow-name, если ваша версия lessподдерживает это.
Эта опция была введена в версии 416.

Затем выполните обычную команду follow Shift+Fвнутри less.

решение2

Этот lessвариант --follow-name— лишь часть решения;
для замены tail -Fнеобходим еще один аргумент:

less --follow-name +F file.log

Опция сама по себе, как less --follow-name file.logне начинает отслеживать обновления файлов. Вам нужно войти в режим отслеживания, нажав ShiftF.
(Выйдите из режима, чтобы перейти по ControlC.)

Вместо того, чтобы следовать файлу,--follow-name изменяет поведениеиз less.
Он делает командный ключ ShiftFвнутри lessfollow на основе имени файла, а не дескриптора файла.

Также нет нормальной опции для запуска lessв режиме follow.
Но вы можете использовать командную строку, чтобы датьнажатия клавиш для выполненияпосле запуска, добавив к ним префикс +.
Сочетание опции модификатора с +F, lessфактически запустится в (измененном) режиме следования.

Используйте +Fотдельно для эквивалента простого tail -f:

less +F file.log

решение3

Я только что нашел ответ в этом разделе вопросов и ответов U&L под названием:Как сделать tail -fлог ротированных файлов?.

С использованием tail:

(если установка GNU tail на вашу систему возможна)

tail -F program.log

Изстраница пользователя tail:

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

Ключ — это --retryпереключатель. Он сообщает tailкоманде, что нужно продолжать повторять попытки следовать за файлом по имени. Переключатель -Fделает и a -f, и a --retry.

С использованиемless

Как отметил @StephaneChazela в комментариях, следующее не сработает.

tail -F program.log | less

Единственный другой вариант, который у вас есть, — это использовать less напрямую, предполагая, что он поддерживает --follow-nameпереключатель и lessфайл напрямую, tailполностью отказавшись от использования.

less --follow-name program.log

Связанный контент