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

11

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

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

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

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

Алекс Чемберлен
источник
возможно tail -F program.log | lessбудет работать
sendmoreinfo
tail -f program.log ты пробовал это?
Рахул Патил

Ответы:

17

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

Стефан Шазелас
источник
Отличный ответ. Как Solaris 10, так и Solaris 11 используют меньше версии 436, поэтому эта опция действительно доступна.
unixhacker2010
5

lessВариант --follow-nameявляется лишь частью решения;
Для замены tail -Fнужен еще один аргумент:

less --follow-name +F file.log

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

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

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

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

less +F file.log
Volker Siegel
источник
1

Я только что нашел ответ в этом разделе вопросов и ответов под названием « Как сделать tail -fфайлы, повернутые в журнал? ,

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

(если установка GNU tail в вашей системе является опцией)

tail -F program.log

Из справочной страницы хвоста :

   -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Переключатель делает как на -fи --retry.

С помощью less

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

tail -F program.log | less

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

less --follow-name program.log
SLM
источник
Мне иногда очень не нравится Sun OS ...
Алекс Чемберлен
Я согласен, я работал годами, это сводит вас с ума, что инструментам 10 лет для некоторых приложений. Без разницы. Этот сайт был бесценным для поддержания вашего здравомыслия на Solaris: sunfreeware.com/introduction.html
ОДС
если вы хотите больше здравомыслия, проверьте pkgsrc.org :)
sendmoreinfo
Это не сработает. Потому что lessбудет висеть, если вы делаете "G", пр "F". Что вы можете прервать, нажав «Ctrl-C», но тогда это убьет хвост. После этого вы можете сохранить иммунитет к Ctrl-C, но он все еще не очень полезен.
Стефан Шазелас
Что касается хвоста GNU: проверьте это для получения информации о том, какие инструменты должны быть доступны на любом хосте Solaris. (На самом деле GNU tail существует по умолчанию в Solaris 11). Системные администраторы Solaris часто усложняют работу для своих пользователей, потому что они оставляют установку на самой простой установке, в то время как инструменты GNU для Solaris в настоящее время фактически доступны непосредственно из Oracle или в некоторых случаях являются частью установки по умолчанию. Нет причин не делать это частью вашей установки. Нет причин ходить на «неофициальные» репо. Смотрите ссылку.
unixhacker2010