Come usare il comando tail su Linux

Una finestra terminale che mostra un prompt di Bash su un laptop Linux in stile Ubuntu.
Fatmawati Achmad Zaenuri / Shutterstock

Linux tail comando visualizza i dati dalla fine di un file. Può persino visualizzare gli aggiornamenti aggiunti a un file in tempo reale. Ti mostriamo come usarlo.

Systemd Kill tail?

Il tail Il comando mostra i dati dalla fine di un file. Di solito, nuovi dati vengono aggiunti alla fine di un file, quindi il file tail Il comando è un modo rapido e semplice per visualizzare le aggiunte più recenti a un file. Può anche monitorare un file e visualizzare ogni nuova voce di testo in quel file nel momento in cui si verificano. Questo lo rende un ottimo strumento per monitorare i file di registro.

Molte moderne distribuzioni Linux hanno adottato il systemd gestore di sistemi e servizi. Questo è il primo processo eseguito, ha l'ID processo 1 ed è il genitore di tutti gli altri processi. Questo ruolo era usato dai più vecchi init sistema.

Insieme a questa modifica è arrivato un nuovo formato per i file di registro di sistema. Non più creato in testo semplice, sotto systemd sono registrati in un formato binario. Per leggere questi file di registro, è necessario utilizzare journactl utilità. Il tail Il comando funziona con formati di testo semplice. Non legge i file binari. Quindi questo significa che tail comando è una soluzione alla ricerca di un problema? Ha ancora qualcosa da offrire?

C'è di più per il tail comando che mostra gli aggiornamenti in tempo reale. E del resto, ci sono ancora molti file di registro che non sono generati dal sistema e sono ancora creati come file di testo semplice. Ad esempio, i file di registro generati da applicazioni non hanno cambiato il loro formato.

Usando la coda

Passa il nome di un file a tail e ti mostrerà le ultime dieci righe di quel file. I file di esempio che stiamo utilizzando contengono elenchi di parole ordinate. Ogni riga è numerata, quindi dovrebbe essere facile seguire gli esempi e vedere quale effetto hanno le varie opzioni.

tail word-list.txt

tail word-list.txt in una finestra terminale

Per vedere un numero diverso di righe, utilizzare il -n (numero di righe) opzione:

tail -n 15 word-list.txt

tail -n 15 word-list.txt in una finestra terminale

In realtà, puoi fare a meno di “-n” e usare solo un trattino “-” e il numero. Assicurarsi che non vi siano spazi tra di loro. Tecnicamente, questo è un modulo di comando obsoleto, ma è ancora nella pagina man e funziona ancora.

tail -12 word-list.txt

tail -12 word-list.txt in una finestra terminale

Usando la coda con più file

Puoi avere tail lavorare con più file contemporaneamente. Basta passare i nomi dei file sulla riga di comando:

tail -n 4 list-1.txt list-2.txt list-3.txt

tail -n 4 list-1.txt list-2.txt list-3.txt in una finestra terminale

Viene visualizzata una piccola intestazione per ogni file in modo da sapere a quale file appartengono le linee.

Visualizzazione delle linee dall'inizio di un campo

Il + (conta dall'inizio) il modificatore fa tail visualizza le righe dall'inizio di un file, iniziando da un numero di riga specifico. Se il tuo file è molto lungo e scegli una riga vicino all'inizio del file, riceverai un sacco di output inviato alla finestra del terminale. In tal caso, ha senso convogliare l'output da tail in less.

tail +440 list-1.txt

tail +44 list-1.txt in una finestra di terminale

Puoi sfogliare il testo in modo controllato.

Uscita dalla coda visualizzata in meno in una finestra terminale

Poiché in questo file sono presenti 20.445 righe, questo comando equivale a utilizzare l'opzione “-6”:

tail +20440 list-1.txt

tail +20440 list-1.txt in una finestra terminale

Utilizzo di byte con coda

Lo puoi dire tail per usare gli offset in byte anziché in linee usando il tasto -c (byte) opzione. Ciò potrebbe essere utile se si dispone di un file di testo formattato in record di dimensioni normali. Si noti che un carattere di nuova riga conta come un byte. Questo comando visualizzerà gli ultimi 93 byte nel file:

tail -c 93 list-2.txt

tail -c 93 list-2.txt in una finestra di terminale

È possibile combinare il -c (byte) con l'opzione + (conta dall'inizio del file) modificatore e specifica un offset in byte contato dall'inizio del file:

tail -c +351053 list-e.txt

tail -c +351053 list-e.txt in una finestra terminale

Tubazioni nella coda

In precedenza, abbiamo convogliato l'output da tail in less . Possiamo anche reindirizzare l'output di altri comandi in tail.

Per identificare i cinque file o cartelle con i tempi di modifica più vecchi, utilizzare il -t (ordina per tempo di modifica) con ls e convoglia l'output in tail.

ls -tl | tail -5

ls -lt | coda -5 in una finestra terminale

Il head Il comando elenca le righe di testo dall'inizio di un file. Possiamo combinare questo con tail per estrarre una sezione del file. Qui, stiamo usando head comando per estrarre le prime 200 righe da un file. Questo viene convogliato tail, che sta estraendo le ultime dieci righe. Questo ci dà le linee da 191 a 200. Cioè, le ultime dieci linee delle prime 200 linee:

head -n 200 list-1.txt | tail -10

head -n 200 list-1.txt | coda -10 in una finestra terminale

Questo comando elenca i cinque processi più affamati di memoria.

ps aux | sort -nk +4 | tail -5

ps aux | ordina -nk +4 | coda -5 in una finestra terminale

Analizziamolo.

Il ps comando visualizza informazioni sui processi in esecuzione. Le opzioni utilizzate sono:

  • un': Elenca tutti i processi, non solo per l'utente corrente.
  • u: Visualizza un output orientato all'utente.
  • X: Elenca tutti i processi, inclusi quelli non in esecuzione all'interno di un TTY.

Il sort il comando ordina l'output da ps . Le opzioni che stiamo utilizzando con sort siamo:

  • n: Ordina numericamente.
  • k +4: Ordina sulla quarta colonna.

Il tail -5 comando visualizza gli ultimi cinque processi dall'output ordinato. Questi sono i cinque processi più affamati di memoria.

Usando la coda per tenere traccia dei file in tempo reale

Tracciare nuove voci di testo che arrivano in un file, di solito un file di registro, è facile tail. Passare il nome file sulla riga di comando e utilizzare il -f (segui) opzione.

tail -f geek-1.log

tail -f geek-1.log in una finestra terminale

Man mano che ogni nuova voce di registro viene aggiunta al file di registro, tail aggiorna la sua visualizzazione nella finestra del terminale.

Uscita da tail -f geek-1.log in una finestra terminale

È possibile perfezionare l'output per includere solo righe di particolare rilevanza o interesse. Qui stiamo usando grep per mostrare solo le righe che includono la parola “media”:

tail -f geek-1.log | grep average

tail -f geek-1.log | media grep in una finestra terminale

Per seguire le modifiche a due o più file, passare i nomi dei file sulla riga di comando:

tail -f -n 5 geek-1.log geek-2.log

tail -f -n 5 geek-1.log geek-2.log in una finestra terminale

Ogni voce è taggata con un'intestazione che mostra da quale file proviene il testo.

Uscita da tail -f -n 5 geek-1.log geek-2.log

Il display viene aggiornato ogni volta che arriva una nuova voce in un file seguito. Per specificare il periodo di aggiornamento, utilizzare il -s (periodo di sonno) opzione. Questo dice tail attendere un numero di secondi, cinque in questo esempio, tra i controlli dei file.

tail -f -s 5 geek-1.log

tail -f -s 5 geek-1.log in una finestra terminale

Certo, non puoi dirlo guardando uno screenshot, ma gli aggiornamenti al file stanno accadendo una volta ogni due secondi. Le nuove voci del file sono in corso visualizzato nella finestra del terminale una volta ogni cinque secondi.

Uscita da tail -f -s 5 geek-1.log

Quando si seguono le aggiunte di testo a più file, è possibile eliminare le intestazioni che indicano da quale file di registro proviene il testo. Usa il -q (silenzioso) opzione per fare questo:

tail -f -q geek-1.log geek-2.log

tail -f -q geek-1.log geek-2.log in una finestra terminale

L'output dei file viene visualizzato in una fusione uniforme di testo. Non vi è alcuna indicazione da quale file di registro provenga ciascuna voce.

Uscita da tail -f -q geek-1.log geek-2.log in una finestra terminale

tail ha ancora valore

Sebbene l'accesso ai file di registro di sistema sia ora fornito da journalctl, tail ha ancora molto da offrire. Ciò è particolarmente vero quando viene utilizzato insieme ad altri comandi, eseguendo il piping dentro o fuori tail.

systemd potrebbe aver cambiato il panorama, ma c'è ancora posto per le utility tradizionali conformi alla filosofia Unix di fare una cosa e farlo bene.

Articoli correlati

Ultimi articoli