¿Cómo puedo reducir un nombre de archivo en lugar de un número de inodo?

¿Cómo puedo reducir un nombre de archivo en lugar de un número de inodo?

Tengo un software que rota sus archivos de registro cuando se reinicia. Sin embargo, durante el desarrollo, lo reinicio con frecuencia, por lo que me gustaría monitorear el archivo de registro más reciente en cualquier momento.

Si empiezo lessnormalmente less program.logy presiono Shift+ fhasta el final, cuando se gira el archivo de registro, continúo monitoreando el archivo de registro anterior. Supongo que esto se debe a que el número de inodo permanece igual y lesstiene un identificador de archivo abierto para ese inodo.

¿Es posible monitorear la actividad más reciente en cualquier archivo de registro que se llame actualmente program.log?

Específicamente, estoy trabajando en Sun OS, por lo que una solución que funcione allí sería ideal.

Respuesta1

Úselo less --follow-namesi su versión lesslo admite.
Esa opción se introdujo en la versión 416.

Luego haga un comando de seguimiento normal Shift+Fdentro de less.

Respuesta2

La lessopción --follow-namees sólo una parte de la solución;
Para reemplazar tail -F, se necesita otro argumento:

less --follow-name +F file.log

La opción por sí sola "me gusta" less --follow-name file.logen realidad no comienza a seguir las actualizaciones del archivo. Debe ingresar al modo de seguimiento presionando ShiftF.
(Salga del modo para navegar ControlC).

En lugar de seguir el archivo,--follow-name modifica el comportamientode menos.
Hace que la clave de comando ShiftFdentro de lessfollow se base en el nombre del archivo, no en el descriptor del archivo.

Además, no existe una opción normal para iniciar lessen modo de seguimiento.
Pero puedes usar la línea de comando para darpulsaciones de teclas para ejecutardespués del inicio, anteponiendoles el prefijo +.
Al combinar la opción modificadora con +F, lessen realidad comenzará en el modo de seguimiento (modificado).

Úselo +Fsolo para el equivalente de simple tail -f:

less +F file.log

Respuesta3

Acabo de encontrar la respuesta en estas preguntas y respuestas de U&L tituladas:¿Cómo hacer un tail -fregistro de archivos rotados?.

Usando tail:

(si instalar GNU tail en su sistema es una opción)

tail -F program.log

Desde elpágina de manual de cola:

   -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

La clave es el --retryinterruptor. Esto le indica al tailcomando que siga intentando seguir un archivo por su nombre. El -Finterruptor hace tanto a -fcomo a --retry.

Usandoless

Como @StephaneChazela señaló en los comentarios, lo siguiente no funcionará.

tail -F program.log | less

La única otra opción que tiene es usar menos directamente, asumiendo que admite el --follow-namecambio y lessel archivo directamente, renunciando a usarlo tailpor completo.

less --follow-name program.log

información relacionada