Describe la tail
utilidad 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 tail
así:
$ tail -F /var/log/messages
... y nuevamente, el archivo gira, la salida continuará fluyendo en mi consola porque tail
volverí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 -F
opción, pero tail -f
se comportará como lo tail -F
hace 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) myfile
en la consola. Si vuelve a la primera sesión de shell y escribe algo más, esa salida se mostrará inmediatamente tail
en la segunda sesión de shell.
Ahora salga cat
presionando Ctrl+Dy elimine el myfile
archivo:
$ 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 -f
todavía se está ejecutando).
Repita el ejercicio con tail -F
y observe la diferencia.
tail -f foo.log
y su sistema se muevefoo.log
a, por ejemplo,foo.log.0.gz
la salida que ve simplemente se detendrá. Si lo usa,-F
por otro lado, vería el contenido de la nuevafoo.log
sin interrupciones intermedias.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 -f
rellene no vuelva a intentarlo y cargue el nuevo inodo,tail -F
lo detectará.El mismo efecto ocurrirá si cambia el nombre / mueve un archivo. Si, por ejemplo, sigue
/var/log/messages
y rotar log, gira el registro a/var/log/messages.1
. tail with-f
todavía escuchará el viejo inodo que señalamessages.1
. tail se-F
dará cuenta de esto y leerá el nuevo inodo.fuente