Come posso vedere l'intero file e aspettare anche che vengano aggiunti più dati a quel file?


21

Voglio leggere l'intero file e renderlo in attesa di input, proprio come tail -f con il file completo visualizzato.

La lunghezza di questo file cambierà sempre, poiché si tratta di un .logfile.

Come posso farlo, se non conosco la lunghezza del file?


2
sai già che la coda è vicina a ciò che vuoi. hai letto la pagina man per questo?
njzk2,

1
lessha il tasto "F". Utile se hai bisogno di interazione.
Thorbjørn Ravn Andersen,

Risposte:


33

tailconsente di aggiungere -nper specificare il numero di righe da visualizzare alla fine, che possono essere utilizzate insieme -f. Se l'argomento per -ninizia con +quello è il conteggio delle righe dall'inizio ( 0e 1visualizzando l'intero file, 2indicando saltare la prima riga, come indicato da @Ben). Quindi fai solo:

tail -f -n +0 filename

Se i file di log vengono ruotati, è possibile aggiungere --retry(o combinare -f and --retryin -Fquanto @Hagen suggerito)

Si noti inoltre che in un terminale grafico, è possibile utilizzare il mouse e PageUp/ PageDownper scorrere indietro nella cronologia (supponendo che il buffer sia abbastanza grande), queste informazioni rimangono lì anche se si utilizza Ctrl+ Cper uscire tail. Se usi lessquesto è molto meno conveniente e AFAIK devi usare la tastiera per scorrere e non conosco un modo per evitare lessdi deinizializzare termcap se ti dimentichi di avviarlo -X.


1
+1 La tua risposta è apparsa non appena ho pubblicato la mia e sebbene la mia funzioni, la tua è migliore.
Julie Pelletier,

1
Ho ricevuto il messaggio mentre stavo ancora scrivendo che c'era un'altra risposta e che avrei dovuto fare clic per aggiornare. La tua risposta porterebbe a termine il lavoro, ma non sarei sorpreso che il conteggio dall'inizio (forzato con +) sia implementato in modo più efficiente.
Anthon,

1
+1per avermi insegnato +0. Si potrebbe desiderare -Finvece di -fruotare i file di registro
Hagen von Eitzen,

Penso che ci sia una off-by-one qui. tail -n +1mostra l'inizio del file per me e tail -n +2salta una riga. Penso che il numero sia il numero di riga della prima riga visualizzata.
Ben Millwood,

1
@Anthon grazie! Questo è esattamente quello di cui ho bisogno!
Malworm,

37

C'è un modo migliore per raggiungere questo obiettivo:

less +F <file>

Ti mostrerà l'intero file, ha la piena potenza di lesse aspetterà un nuovo input. Se si desidera interrompere l'attesa per l'input e leggere una parte specifica, è possibile interromperla con ^Ce riprendere con F.

Il Fcomando è sempre disponibile in less, se decidi di guardare per le modifiche mentre hai un file aperto less, premendo Fsi accenderà. Grazie a hiergiltdiestfu e jolly per averlo sottolineato.


2
Questo è davvero molto meglio di tail. Grazie per il consiglio; Non avrei mai pensato di usarlo lessper questo. Nota per gli altri: puoi anche semplicemente eseguire less <file>e quindi digitare F.
Carattere jolly

3

Oltre alla risposta / u / Anthon, puoi fare qualcosa del tipo:

{ cat filename; tail -0f filename; }

Questa -0opzione di coda è equivalente a -n 0, ovvero: dispaly 0 righe. Ma -fverranno visualizzate nuove righe.

Non hai bisogno delle parentesi graffe { }. Li ho usati perché a volte vuoi reindirizzare i descrittori di file in qualche modo. Per esempio:

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

Notato da Ben Milwood: potresti avere una condizione di competizione in cui il file cresce tra la fine catdell'operazione e l'inizio taildell'operazione. Ma ancora una volta, questo è un problema "accademico" per una soluzione accademica.


3
Se il file cresce tra la catfine e l' tailinizio, non vedrai quelle righe. È improbabile che sia un grosso problema, ma un motivo per preferire la tailsoluzione pura .
Ben Millwood,

Penso { cat; tail -n +0 -f; } < fileche risolverebbe la gara, perché tail stamperà tutti i nuovi dati che compaiono tra catl'uscita e taill'avvio. Certo, rende catridondante. Il reindirizzamento avviene una sola volta e lo tailstdin è il descrittore di file che ha catgià letto su EOF, quindi la sua posizione corrente è dove è stata catfermata. Puoi metterlo alla prova mettendo un echo foo >> filedentro {}, per creare la gara ogni volta.
Peter Cordes,

2

watch il comando dovrebbe farlo per te.

Puoi anche provare

less +FG 

Avrai più opzioni con il lesscomando per scorrere il tuo file mentre dici che è un file di grandi dimensioni.


Meno anche non segue un file in crescita.
Shadur,

7
@Shadur, lo fa, ecco a cosa +Fserve l' opzione
Glenn Jackman,
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.