Apri un file di testo e lascia che si aggiorni da solo


20

Come posso aprire un file di testo e lasciarlo aggiornare da solo? Simile al modo in cui topfunziona.

Voglio aprire un file di registro e guardarlo aggiornarsi al volo.

Ho appena provato:

$ tail error.log

Ma ho appena realizzato che mostra solo le linee nel file di registro.

Sto usando RHEL 5.10


4
Usatail -f error.log
garethTheRed il

Ah, quindi tailè il modo corretto di usarlo? Wow, non pensavo davvero di poterlo usare. Mi aspettavo un'espressione molto più lunga.
Kevdog777,

1
Cordiali saluti, mentre la coda è lo strumento per il lavoro, letteralmente open a text file and let it update itselfpuò essere raggiunto watch cat filename.
Cthulhu,

1
@Cthulhu intendi watch cat filenameo simili. watch filenametenterà di eseguire filename.
terdon

@terdon Sì davvero.
Cthulhu,

Risposte:


29

Stai cercando tail -f error.log(da man tail):

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

Ciò ti consentirà di guardare un file e vedere eventuali modifiche apportate ad esso.


E questo non utilizzerà molte risorse?
Kevdog777,

1
@ Kevdog777 non proprio no. Presumibilmente, riapre il file ogni pochi secondi per aggiornarlo. Questo è il modo classico di fare quello che vuoi però.
Terdon

1
@terdon, si riapre (può riaprire) solo con -F. Con -fesso legge solo ogni secondo. È come a while cat; do sleep 1; done < file. Vedi inotailsu Linux per una coda più reattiva (usa inotifyper sapere quando il file viene modificato).
Stéphane Chazelas,

@ StéphaneChazelas: sono sicuro che è molto più efficiente di così. Scommetto che usa select o poll per vedere se il fd è leggibile e quindi sleep fino a quando non ci sono dati disponibili sul fd. Anche se potrei sbagliarmi totalmente.
Martin York,

1
@LokiAstari, non puoi essere molto più efficiente di una readchiamata di sistema ogni secondo. Una "lettura" selecto pollsu un file normale restituirà sempre true poiché read()non si blocca mai su un file normale, quindi non funzionerebbe. Detto questo, GNU tailora usa inotifysu Linux, quindi inotailnon è più necessario.
Stéphane Chazelas,

20

Usa "meno" invece di "coda" per lo scorrimento e la ricerca

È possibile utilizzare tail -f error.logo, meglio: tail -F error.log.

Ma se vuoi tornare indietro nel file, non è molto utile.

Con

less +F error.log

ottieni la funzione di tail -f,
ma puoi interrompere la lettura di un nuovo input con Ctrl+ C.

Quindi, ci si trova in lessmodalità normale ,
dove è possibile scorrere indietro per vedere cosa potrebbe essersi perso con Up/ Down
Inoltre, è possibile leggere lunghe righe di file di registro senza eseguire il wrapping, utilizzando Left/Right

Cerca e mostra solo le linee corrispondenti

Puoi anche cercare espressioni regolari con /, ?all'indietro ne Nal successivo / precedente.

Molto interessante per i file di registro è che puoi nascondere tutte le righe non corrispondenti per una ricerca &, filtrando solo le corrispondenze.

Tasti sulla riga di comando

Con Fdentro di less, continui la tail -fmodalità -like.
L' +Nella riga di comando less +Fsignifica "premere questi tasti direttamente dopo l'avvio meno".

Quindi abbiamo usato keypress Fall'avvio, che è descritto come:

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.)

Vedere anche multitailse è necessario guardare più di un file di registro.


Grazie, ma tail -f error.logè perfetto per quello che mi serve. Il file di registro viene aggiornato solo ogni ora, quindi è sufficiente per il mio uso :-)
Kevdog777

1
Assicurati di ricordarlo per la prossima volta;)
Volker Siegel,

mostha anche una tail -fmodalità con F.
Stéphane Chazelas,

@ StéphaneChazelas giusto, grazie! Hmmm ... Ricordo che qualcuno mi ha ringraziato per averlo menzionato mostqualche tempo fa ... e me ne sono dimenticato.
Volker Siegel,

@ StéphaneChazelas Ma allora, mostnon sembra avere la funzione di filtro meno &per mostrare solo le linee corrispondenti? Una funzione utile nei file di registro, di solito.
Volker Siegel,

5

Utilizzare l' -fopzione con tail:

-f, --follow [= {name | descriptor}] genera dati aggiunti man mano che il file cresce; -f, --follow e --follow = descrittore sono equivalenti

O usa il 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.)

Cosa c'è di nuovo in questa risposta?
bluefoggy

1
Non capisco di cosa stai chiedendo. Era la seconda risposta a questa domanda e la prima che menzionava less.
Arkadiusz Drabczyk,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.