Você descreve o utilitário GNU tail
. A diferença entre esses dois sinalizadores é que, se eu abrir um arquivo, um arquivo de log, por exemplo, assim:
$ tail -f /var/log/messages
... e se o recurso de rotação de log na minha máquina decidir girar esse arquivo de log enquanto eu estiver vendo as mensagens sendo gravadas nele ("girar" significa excluir ou mover para outro local etc.), a saída que eu veja, vai parar.
Se eu abrir o arquivo com tail
da seguinte forma:
$ tail -F /var/log/messages
... e novamente, o arquivo é girado, a saída continuaria a fluir no meu console porque tail
reabriria o arquivo assim que ele se tornasse disponível novamente, ou seja, quando o (s) programa (s) gravasse no log começou a escrever para o novo /var/log/messages
.
Nos sistemas BSD gratuitos, não há -F
, mas tail -f
se comportará como tail -F
nos sistemas GNU, com a diferença que você recebe a mensagem
tail: file has been replaced, reopening.
na saída quando o arquivo que você está monitorando desaparece e reaparece.
VOCÊ PODE TESTAR
Em uma sessão de shell, faça
$ cat >myfile
Isso agora vai esperar que você digite coisas. Basta ir em frente e digitar alguns rabiscos, algumas linhas. Tudo será salvo no arquivo myfile
.
Em outra sessão shell (talvez em outro terminal, sem interromper o cat
):
$ tail -f myfile
Isso mostrará o (final do) conteúdo de myfile
no console. Se você voltar para a primeira sessão de shell e digitar algo mais, essa saída será mostrada imediatamente por tail
na segunda sessão de shell.
Agora saia de cat
pressionando Ctrl + D e remova o arquivo myfile
:
$ rm myfile
Em seguida, execute o gato novamente:
$ cat >myfile
... e digite algo, algumas linhas.
Com o GNU tail
, essas linhas não aparecerão na segunda sessão de shell (onde tail -f
ainda está em execução).
Repita o exercício com tail -F
e observe a diferença.