¿Cómo puedo ver todo el archivo y también esperar a que se agreguen más datos a ese archivo?

21

Quiero leer todo el archivo y hacer que espere la entrada, al igual que tail -f con el archivo completo mostrado.

La longitud de este archivo siempre cambiará, porque este es un .logarchivo.

¿Cómo puedo hacerlo si no conozco la longitud del archivo?

gusano
fuente
2
ya sabes que la cola está cerca de lo que quieres. ¿Leíste la página del manual?
njzk2
1
lesstiene la tecla "F". Útil si necesitas interacción.
Thorbjørn Ravn Andersen

Respuestas:

33

taille permite agregar -npara especificar el número de líneas que se mostrarán desde el final, que se pueden usar junto con -f. Si el argumento para -ncomenzar con +eso es el recuento de líneas desde el principio ( 0y 1mostrar todo el archivo, 2indicando omitir la primera línea, como lo indica @Ben). Entonces solo hazlo:

tail -f -n +0 filename

Si los archivos de registro girará, se puede añadir --retry(o combinar -f and --retryen -Fcomo se sugiere @Hagen)

También tenga en cuenta que en una terminal gráfica, puede usar el mouse y PageUp/ PageDownpara volver al historial (suponiendo que su búfer sea lo suficientemente grande), esta información permanece allí incluso si usa Ctrl+ Cpara salir tail. Si usa lessesto, es mucho menos conveniente y AFAIK tiene que usar el teclado para desplazarse y no conozco un medio para evitar la lessdesinicialización de termcap si olvida comenzar -X.

Anthon
fuente
1
+1 Tu respuesta apareció tan pronto como publiqué la mía y aunque la mía funciona, la tuya es mejor.
Julie Pelletier
1
Recibí el mensaje mientras aún escribía que había otra respuesta y que debía hacer clic para actualizar. Su respuesta haría el trabajo, pero no me sorprendería que contar desde el principio (forzado con +) se implemente de manera más eficiente.
Anthon
1
+1por enseñarme acerca +0. Es posible que desee en -Flugar de -frotar archivos de registro
Hagen von Eitzen
Creo que hay un off-by-one aquí. tail -n +1me muestra el comienzo del archivo y tail -n +2omite una línea. Creo que el número es el número de línea de la primera línea mostrada.
Ben Millwood
1
@Anthon gracias! ¡Esto es exactamente lo que necesito!
malworm
37

Hay una manera mejor de lograr esto:

less +F <file>

Le mostrará todo el archivo, tiene todo el poder lessy esperará una nueva entrada. Si desea dejar de esperar la entrada y leer una parte específica, puede detenerla ^Cy continuar con F.

El Fcomando siempre está disponible en less, si decide observar los cambios mientras tiene un archivo abierto less, al presionar se Factivará. Gracias a hiergiltdiestfu y wildcard por señalar eso.

Leandros
fuente
2
Esto es de hecho mucho mejor que tail. Gracias por el consejo; Nunca hubiera pensado usarlo lesspara esto. Nota para otros: también puede simplemente ejecutar less <file>y luego escribir F.
Comodín el
3

Además de la respuesta de / u / Anthon, puede hacer algo como:

{ cat filename; tail -0f filename; }

Esa -0opción de cola es equivalente a -n 0, es decir: muestra 0 líneas. Pero el -fmostrará nuevas líneas.

No necesitas los frenos { }. Los usé porque a veces quieres redirigir los descriptores de archivos de alguna manera. Por ejemplo:

{ cat ; tail -0f -; } < /var/log/messages

Notado por Ben Milwood: podría tener una condición de carrera donde el archivo crece entre el final de la catoperación y el comienzo detail operación. Pero, de nuevo, este es un problema "académico" para una solución académica.

Oteo
fuente
3
Si el archivo crece entre cuando cattermina y tailcomienza, no verá esas líneas. Es poco probable que sea un gran problema, pero es una razón para preferir la tailsolución pura .
Ben Millwood
Creo { cat; tail -n +0 -f; } < fileque solucionaría la carrera, porque tail imprimirá cualquier dato nuevo que aparezca entre catla salida y tailel inicio. Por supuesto, hace que sea catredundante. La redirección solo ocurre una vez, y tailel stdin es el descriptor de archivo que catya se lee en EOF, por lo que su posición actual es donde se catdetuvo. Puede probarlo poniendo echo foo >> filedentro de la {}, para crear la carrera cada vez.
Peter Cordes
2

watch el comando debería hacer eso por ti.

También puedes probar

less +FG 

Tendrás más opciones con el lesscomando para desplazarte por tu archivo mientras dices que es un archivo grande.

RajuBhai
fuente
Menos tampoco sigue un archivo en crecimiento.
Shadur
77
@Shadur, sí, para eso está la +Fopción
Glenn Jackman