Abra un archivo de texto y deje que se actualice solo

20

¿Cómo puedo abrir un archivo de texto y dejar que se actualice solo? Similar a la forma en que topfunciona.

Quiero abrir un archivo de registro y verlo actualizarse sobre la marcha.

Acabo de probar:

$ tail error.log

Pero acabo de darme cuenta, que solo te muestra las líneas en el archivo de registro.

Estoy usando RHEL 5.10

Kevdog777
fuente
44
Usotail -f error.log
garethTheRed
Ah, entonces, tail¿cuál es la forma correcta de usarlo? Wow, realmente no pensé que podría usar eso. Esperaba una expresión mucho más larga.
Kevdog777
1
Para su información, mientras que la cola es la herramienta para el trabajo, literalmente se open a text file and let it update itselfpuede lograr watch cat filename.
Cthulhu
1
@Cthulhu quieres decir watch cat filenameo similar. watch filenameintentará ejecutar filename.
terdon
@terdon Sí, de hecho.
Cthulhu

Respuestas:

29

Estás buscando tail -f error.log(de man tail):

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

Eso le permitirá ver un archivo y ver los cambios realizados en él.

terdon
fuente
¿Y esto no usará muchos recursos?
Kevdog777
1
@ Kevdog777 no realmente no. Presumiblemente, solo vuelve a abrir el archivo cada pocos segundos para actualizarlo. Sin embargo, esta es la forma clásica de hacer lo que quieres.
terdon
1
@terdon, solo se vuelve a abrir (puede volver a abrir) con -F. Con -feso solo se lee cada segundo. Es como una while cat; do sleep 1; done < file. Vea inotailen Linux una cola más reactiva (se usa inotifypara saber cuándo se está modificando el archivo).
Stéphane Chazelas
@ StéphaneChazelas: Estoy seguro de que es mucho más eficiente que eso. Apostaría a que use select o poll para ver si el fd es legible y luego duerma hasta que haya datos disponibles en el fd. Aunque podría estar totalmente equivocado.
Martin York
1
@LokiAstari, no puede ser mucho más eficiente que una readllamada al sistema cada segundo. Una "lectura" selecto pollen un archivo normal siempre devolvería verdadero ya que read()nunca se bloquea en un archivo normal, por lo que no funcionaría. Dicho esto, GNU tailahora usa inotifyLinux, por inotaillo que ya no es necesario.
Stéphane Chazelas
20

Use "menos" en lugar de "cola" para retroceder y buscar

Se puede utilizar tail -f error.log, o mejor: tail -F error.log.

Pero si desea desplazarse hacia atrás en el archivo, eso no es muy útil.

Con

less +F error.log

obtienes la función de tail -f,
pero puedes interrumpir la lectura de una nueva entrada con Ctrl+ C.

Luego, está en el lessmodo normal ,
donde puede desplazarse hacia atrás para ver lo que puede haber perdido con Up/ Down
También, puede leer largas líneas de archivo de registro sin ajustar, usando Left/Right

Buscar y mostrar solo líneas coincidentes

También puede buscar expresiones regulares con /, ?hacia atrás ny Npara siguiente / anterior.

Muy interesante para los archivos de registro es que puede ocultar todas las líneas que no coinciden para una búsqueda &, filtrando solo las coincidencias.

Teclas en la línea de comando

Con Fdentro de less, continúas con el tail -fmodo similar.
El +en la línea de comando less +Fsignifica "presione estas teclas directamente después de comenzar menos".

Entonces utilizamos la pulsación Fde teclas al inicio, que se describe como:

F  Scroll  forward,  and  keep trying to read when the end of file is
   reached.  Normally this command would be used when already at  the
   end  of the file.  It is a way to monitor the tail of a file which
   is growing while it is being viewed.  (The behavior is similar  to
   the "tail -f" command.)

Vea también multitailsi necesita ver más de un archivo de registro.

Volker Siegel
fuente
Gracias, pero tail -f error.loges perfecto para lo que necesito. El archivo de registro solo se actualiza cada hora, por lo que es suficiente para mi uso :-)
Kevdog777
1
Asegúrese de recordarlo para la próxima vez;)
Volker Siegel
mostTambién tiene un tail -fmodo con F.
Stéphane Chazelas
@ StéphaneChazelas bien, gracias! Hmmm ... recuerdo que alguien me agradeció por mencionarlo hace mostun tiempo ... y lo olvidé.
Volker Siegel
@ StéphaneChazelas Pero entonces, most¿no parece tener la característica de menos filtro &para mostrar solo líneas coincidentes? Una característica útil en los archivos de registro, por lo general.
Volker Siegel
5

Use la -fopción con tail:

-f, --follow [= {name | descriptor}] da salida a los datos agregados a medida que crece el archivo; -f, --follow y --follow = descriptor son equivalentes

O use el Fcomando dentro less:

   F      Scroll forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already at the end of the file.  It is a way to mon‐
          itor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f" command.)
Arkadiusz Drabczyk
fuente
¿Qué hay de nuevo en esta respuesta?
bluefoggy
1
No entiendo por qué preguntas. Fue la segunda respuesta a esta pregunta y la primera que mencionó less.
Arkadiusz Drabczyk