Como faço para diminuir um nome de arquivo em vez de um número de inode?

Como faço para diminuir um nome de arquivo em vez de um número de inode?

Eu tenho um software que gira seus arquivos de log quando é reiniciado. No entanto, durante o desenvolvimento, estou reiniciando-o bastante, então gostaria de monitorar o arquivo de log mais recente a qualquer momento.

Se eu começar lessnormalmente less program.loge pressionar Shift+ faté o fim, quando o arquivo de log for girado, continuo monitorando o arquivo de log antigo. Presumo que isso ocorra porque o número do inode permanece o mesmo e lesspossui um identificador de arquivo aberto para esse inode.

É possível monitorar a atividade mais recente em qualquer arquivo de log chamado atualmente program.log?

Especificamente, estou trabalhando no Sun OS, então uma solução que funcione seria ideal.

Responder1

Use less --follow-namese a sua versão for lesscompatível.
Essa opção foi introduzida na versão 416.

Em seguida, execute um comando normal de acompanhamento Shift+Fem less.

Responder2

A lessopção --follow-nameé apenas parte da solução;
Para substituir tail -F, é necessário outro argumento:

less --follow-name +F file.log

A opção por si só less --follow-name file.lognão começa a seguir as atualizações do arquivo. Você precisa entrar no modo de acompanhamento pressionando ShiftF.
(Saia do modo para navegar por ControlC.)

Em vez de seguir o arquivo,--follow-name modifica o comportamentoDe menos.
Ele faz com que a chave de comando ShiftFdentro do lessfollow seja baseada no nome do arquivo, não no descritor do arquivo.

Além disso, não existe uma opção normal para iniciar lessno modo de acompanhamento.
Mas você pode usar a linha de comando para fornecerteclas para executarapós a inicialização, prefixando-os com +.
Combinar a opção modificadora com +F, lessna verdade iniciará no modo de acompanhamento (modificado).

Use +Fsozinho para o equivalente a plain tail -f:

less +F file.log

Responder3

Acabei de encontrar a resposta nestas perguntas e respostas sobre U&L intituladas:Como fazer um tail -fregistro de arquivos girados?.

Usando tail:

(se instalar GNU tail em seu sistema for uma opção)

tail -F program.log

Depágina de manual da cauda:

   -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

A chave é o --retryinterruptor. Isso informa ao tailcomando para continuar tentando seguir um arquivo pelo nome. O -Fswitch faz a -fe a --retry.

Usandoless

Como @StephaneChazela apontou nos comentários, o seguinte não funcionará.

tail -F program.log | less

A única outra opção que você tem é usar less diretamente, assumindo que ele suporta o --follow-nameswitch e lesso arquivo diretamente, renunciando ao uso tailcompletamente.

less --follow-name program.log

informação relacionada