Qual è la differenza tra “tail -f” e “tail -F”?


41

Non ho mai usato il tail -Fcomando invece l' ho sempre usato, tail -ftuttavia qualcuno mi ha detto che -Fè meglio senza molte spiegazioni.

Ho cercato la pagina man per il comando tail.

-f output appended data as the file grows;

-F Same as --follow=name --retry

--retry Keep trying to open a file even when it is or becomes inaccessible

È facile capire cosa -ffa il basso ma non seguo quello che il maiuscolo -Fsta cercando di fare. Gradirei che qualcuno possa spiegarmi le differenze.

Risposte:


75

Descrivi l' tailutilità GNU . La differenza tra questi due flag è che se apro un file, ad esempio un file di registro, come questo:

$ tail -f /var/log/messages

... e se la funzione di rotazione del registro sulla mia macchina decide di ruotare quel file di registro mentre guardo i messaggi che vengono scritti su di esso ("ruotare" significa eliminare o spostare in un'altra posizione ecc.), l'output che vedo sarà solo Stop.

Se apro il file in tailquesto modo:

$ tail -F /var/log/messages

... e ancora, il file viene ruotato, l'output continuerà a fluire nella mia console perché tailriaprirà il file non appena sarà nuovamente disponibile, cioè quando i programmi che scrivono sul registro hanno iniziato a scrivere sul nuovo /var/log/messages .

Sui sistemi BSD gratuiti, non esiste alcuna -Fopzione, ma tail -fsi comporterà come tail -Fsui sistemi GNU, con la differenza che ricevi il messaggio

tail: file has been replaced, reopening.

nell'output quando il file che stai monitorando scompare e ricompare.


PUOI PROVARE QUESTO

In una sessione di shell, fare

$ cat >myfile

Ora aspetterai che tu scriva cose. Basta andare avanti e digitare un po 'incomprensibile, alcune righe. Sarà tutto salvato nel file myfile.

In un'altra sessione della shell (forse in un altro terminale, senza interromperecat ):

$ tail -f myfile

Questo mostrerà il (fine del) contenuto della myfileconsole. Se torni alla prima sessione della shell e digiti qualcosa in più, quell'output verrà immediatamente mostrato dalla tailseconda sessione della shell.

Ora esci catpremendo Ctrl+De rimuovi il myfilefile:

$ rm myfile

Quindi eseguire nuovamente il gatto:

$ cat >myfile

... e digita qualcosa, poche righe.

Con GNU tail, queste linee non verranno visualizzate nella seconda sessione della shell (dove tail -fè ancora in esecuzione).

Ripeti l'esercizio con tail -Fe osserva la differenza.


Oh, capisco. Ho un file di registro di sistema come foo.log, quindi a volte vedo foo_06242016.log insieme a foo.log. Quindi corro tail -f foo.log, punterà a foo_06242016.log?
DaeYoung,

1
@DaeYoung No, non del tutto. Se corri tail -f foo.loge il tuo sistema si sposta, foo.logad esempio, foo.log.0.gzl'output che vedi si fermerebbe. Se invece lo utilizzassi -F, vedresti il ​​contenuto del nuovo foo.log senza alcuna interruzione.
Kusalananda

4
+1 ... grazie per non aver limitato la tua risposta all'implementazione di GNU, ma anche per far sapere alle persone cosa ci si può aspettare in un altro ambiente.
TOOGAM,

2
Illustrazione molto bella con l'esempio.
un CVn il

1
@Kusalananda: grazie per l'esercizio. Ho osservato la differenza e mi ha aiutato a capire meglio cosa fanno la coda -f e la coda -F. buona giornata!
DaeYoung,

14

Semplificato, quando apri un file, otterrai l'inode che contiene alcuni metadati in cui si trova esattamente il file sul tuo disco. Tail ascolterà quindi le modifiche a quel file.

Se rimuovi il file e ne crei uno nuovo con lo stesso nome, il nome file sarà lo stesso ma è un inode diverso (e probabilmente memorizzato in una posizione diversa sul tuo disco). tail -friempire non riprovare e caricare il nuovo inode, tail -Frileverà questo.

Lo stesso effetto si verificherà se si rinomina / sposta un file. Se ad esempio segue /var/log/messagese logrotate ruota il registro su /var/log/messages.1. coda con -fascolterà ancora il vecchio inode a cui punta messages.1. tail with -Frealizzerà questo e leggerà il nuovo inode.


Grazie per la tua spiegazione. Per me ha molto senso adesso.
DaeYoung,

2
Va bene. Capisco che un tale adattamento può essere un errore facile da fare. Mi piace particolarmente il fatto che il tuo precedente errore di ortografia sia stato corretto e riconosciuto ... con un altro errore di ortografia. :)
TOOGAM,
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.