¿Cuál es la diferencia entre "cola -f" y "cola -F"?

¿Cuál es la diferencia entre "cola -f" y "cola -F"?

Nunca usé tail -Fel comando, sino que siempre lo usé, tail -fsin embargo, alguien me dijo que -Fes mejor sin mucha explicación.

Busqué en la página de manual el comando tail.

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

Es fácil entender lo que -fhace la letra inferior, pero no entiendo lo que -Fintenta hacer la letra mayúscula. Agradecería que alguien pudiera explicarme las diferencias.

Respuesta1

Describes la tailutilidad GNU. La diferencia entre estos dos indicadores es que si abro un archivo, por ejemplo un archivo de registro, como este:

$ tail -f /var/log/messages

... y si la función de rotación de registros de mi máquina decide rotar ese archivo de registro mientras veo los mensajes que se escriben en él ("rotar" significa eliminar o mover a otra ubicación, etc.), el resultado que veo será simplemente detener.

Si abro el archivo tailasí:

$ tail -F /var/log/messages

... y nuevamente, el archivo se gira, la salida continuaría fluyendo en mi consola porque tailvolvería a abrir el archivo tan pronto como volviera a estar disponible, es decir, cuando los programas que escribían en el registro comenzaron a escribir en elnuevo /var/log/messages.

En los sistemas BSD libres no hay -Fopción, pero tail -fse comportará como tail -Fen los sistemas GNU, con la diferencia de que aparece el mensaje

tail: file has been replaced, reopening.

en la salida cuando el archivo que estás monitoreando desaparece y reaparece.


PUEDES PROBAR ESTO

En una sesión de shell, haga

$ cat >myfile

Eso ahora esperará a que escribas cosas. Simplemente sigue adelante y escribe algunas tonterías, unas pocas líneas. Todo se guardará en el archivo myfile.

Enotrosesión de shell (tal vez en otra terminal,sin interrumpir elcat):

$ tail -f myfile

Esto mostrará el (final del) contenido de myfilela consola. Si regresa a la primera sesión de Shell y escribe algo más, ese resultado se mostrará inmediatamente tailen la segunda sesión de Shell.

Ahora salga catpresionando Ctrl+Dyeliminarel myfilearchivo:

$ rm myfile

Luego vuelve a ejecutar al gato:

$ cat >myfile

... y escribe algo, unas pocas líneas.

Con GNU tail, estas líneas seránnoaparecer en la segunda sesión de Shell (donde tail -ftodavía se está ejecutando).

Repita el ejercicio con tail -Fy observe la diferencia.

Respuesta2

Simplificado, cuando abre un archivo, obtendrá el inodo que contiene algunos metadatos de dónde se encuentra exactamente el archivo en su disco. Luego, Tail escuchará los cambios en ese archivo.

Si elimina el archivo y crea uno nuevo con el mismo nombre, el nombre del archivo será el mismo pero será un inodo diferente (y probablemente almacenado en un lugar diferente de su disco). tail -fComplete, no vuelva a intentar y cargue el nuevo inodo, tail -Fdetectará esto.

El mismo efecto ocurrirá si cambia el nombre o mueve un archivo. Si, por ejemplo, sigue /var/log/messagesy logrotate rota el registro a /var/log/messages.1. tail with -fseguirá escuchando el antiguo inodo que apunta a messages.1. tail with -Fse dará cuenta de esto y leerá el nuevo inodo.

información relacionada