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

41

Nunca usé el tail -Fcomando en su lugar, siempre usé, tail -fsin embargo, alguien me dijo que -Fes mejor sin mucha explicación.

Busqué la página de manual para el comando de cola.

-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 low pero no sigo lo que -Fintenta hacer mayúscula . Apreciaría que alguien me pueda explicar las diferencias.

DaeYoung
fuente

Respuestas:

75

Describe la tailutilidad GNU . La diferencia entre estos dos indicadores es que si abro un archivo, un archivo de registro, por ejemplo, así:

$ tail -f /var/log/messages

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

Si abro el archivo tailasí:

$ tail -F /var/log/messages

... y nuevamente, el archivo gira, la salida continuará fluyendo en mi consola porque tailvolvería a abrir el archivo tan pronto como esté disponible nuevamente, es decir, cuando los programas que escriben en el registro comenzaron a escribir en el nuevo /var/log/messages .

En los sistemas BSD gratuitos, no hay -Fopción, pero tail -fse comportará como lo tail -Fhace en los sistemas GNU, con la diferencia de que recibe el mensaje

tail: file has been replaced, reopening.

en la salida cuando el archivo que está monitoreando desaparece y vuelve a aparecer.


PUEDES PROBAR ESTO

En una sesión de shell, haz

$ cat >myfile

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

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

$ tail -f myfile

Esto mostrará el contenido (final de) myfileen la consola. Si vuelve a la primera sesión de shell y escribe algo más, esa salida se mostrará inmediatamente tailen la segunda sesión de shell.

Ahora salga catpresionando Ctrl+Dy elimine el myfilearchivo:

$ rm myfile

Luego corre el gato otra vez:

$ cat >myfile

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

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

Repita el ejercicio con tail -Fy observe la diferencia.

Kusalananda
fuente
Oh ya veo. Tengo un archivo de registro del sistema como foo.log y luego a veces veo foo_06242016.log junto con foo.log. Entonces ejecuto tail -f foo.log, apuntará a foo_06242016.log?
DaeYoung
1
@DaeYoung No, no del todo. Si ejecuta tail -f foo.logy su sistema se mueve foo.loga, por ejemplo, foo.log.0.gzla salida que ve simplemente se detendrá. Si lo usa, -Fpor otro lado, vería el contenido de la nueva foo.log sin interrupciones intermedias.
Kusalananda
44
+1 ... gracias por no limitar su respuesta a la implementación de GNU, sino también por decirle a la gente lo que se puede esperar en otro entorno.
TOOGAM
2
Muy buena ilustración con el ejemplo.
un CVn
1
@Kusalananda: Gracias por el ejercicio. Observé la diferencia y me ayudó a comprender mejor lo que hacen tail -f y tail -F. ¡que tengas un buen dia!
DaeYoung
14

Simplificado, cuando abre un archivo, obtendrá el inodo que contiene algunos metadatos de dónde se encuentra exactamente el archivo en su disco. 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 es un inodo diferente (y probablemente almacenado en un lugar diferente en su disco). tail -frellene no vuelva a intentarlo y cargue el nuevo inodo, tail -Flo detectará.

El mismo efecto ocurrirá si cambia el nombre / mueve un archivo. Si, por ejemplo, sigue /var/log/messagesy rotar log, gira el registro a /var/log/messages.1. tail with -ftodavía escuchará el viejo inodo que señala messages.1. tail se -Fdará cuenta de esto y leerá el nuevo inodo.

NS G
fuente
Gracias por tu explicación. Tiene mucho sentido para mí ahora.
DaeYoung
2
Está bien. Entiendo que tal cola puede ser un error fácil de cometer. Disfruto especialmente el hecho de que su error de ortografía anterior haya sido corregido y reconocido ... con otro error de ortografía. :)
TOOGAM