Qual é a diferença entre "tail -f" e "tail -F"?


41

Eu nunca usei o tail -Fcomando, em vez disso sempre usei, tail -fno entanto, alguém me disse que -Fé melhor sem muita explicação.

Procurei na página de manual o 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

É fácil entender o que o menor -ffaz, mas não sigo o que o maiúsculo -Festá tentando fazer. Eu apreciaria que alguém possa me explicar as diferenças.

Respostas:


75

Você descreve o tailutilitário GNU . 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 logs da minha máquina decidir girar esse arquivo de log enquanto estou assistindo as mensagens serem gravadas nele ("girar" significa excluir ou mover para outro local etc.), a saída que eu vejo será apenas Pare.

Se eu abrir o arquivo tailassim:

$ tail -F /var/log/messages

... e novamente, o arquivo é girado, a saída continuaria fluindo no meu console, porque tailreabriria o arquivo assim que estivesse novamente disponível, ou seja, quando o (s) programa (s) gravando no log começaram a gravar no novo /var/log/messages .

Nos sistemas BSD gratuitos, não há -Fopção, mas tail -fse comportará como tail -Fnos sistemas GNU, com a diferença de 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 ISSO

Em uma sessão shell, faça

$ cat >myfile

Agora, isso irá esperar você digitar as coisas. Apenas vá em frente e digite algumas palavras sem sentido, algumas linhas. Tudo será salvo no arquivo myfile.

Em outra sessão do shell (talvez em outro terminal, sem interromper ocat ):

$ tail -f myfile

Isso mostrará o (final do) conteúdo myfileno console. Se você voltar para a primeira sessão do shell e digitar algo mais, essa saída será mostrada imediatamente tailna segunda sessão do shell.

Agora saia catpressionando Ctrl+De remova o myfilearquivo:

$ 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 do shell (onde tail -fainda está em execução).

Repita o exercício com tail -Fe observe a diferença.


Ah eu vejo. Eu tenho um arquivo de log do sistema, como foo.log, às vezes vejo foo_06242016.log junto com foo.log. Então eu corro tail -f foo.log, ele apontará para foo_06242016.log?
DaeYoung

1
@DaeYoung Não, não exatamente. Se você executar tail -f foo.loge seu sistema passar foo.logpara, por exemplo, foo.log.0.gza saída que você vê, seria interrompida. Se você usar -Fpor outro lado, veria o conteúdo do novo foo.log sem nenhuma interrupção.
Kusalananda

4
+1 ... obrigado por não limitar sua resposta à implementação do GNU, mas também por informar às pessoas o que pode ser esperado em outro ambiente.
TOOGAM

2
Ilustração muito boa com o exemplo.
a CVn

1
@ Kusalananda: Obrigado pelo exercício. Observei a diferença e isso me ajudou a entender melhor o que tail -f e tail -F fazem. tenha um dia abençoado!
Daeyoung

14

Simplificado, quando você abre um arquivo, você obtém o inode que contém alguns metadados de onde exatamente o arquivo está localizado no seu disco. O Tail então escutará as alterações nesse arquivo.

Se você remover o arquivo e criar um novo com o mesmo nome, o nome do arquivo será o mesmo, mas é um inode diferente (e provavelmente armazenado em um local diferente do disco). tail -fpreencha, não tente novamente e carregue o novo inode, tail -Fdetectará isso.

O mesmo efeito ocorrerá se você renomear / mover um arquivo. Se, por exemplo, você segue /var/log/messagese faz o logrotate, o log é rotacionado para /var/log/messages.1. tail with -fainda ouvirá o inode antigo que aponta para messages.1. cauda com -Fvai perceber isso e ler o novo inode.


Obrigado pela sua explicação. Faz muito sentido para mim agora.
Daeyoung

2
Está bem. Entendo que esse erro possa ser um erro fácil de cometer. Estou particularmente gostando do fato de que seu erro de ortografia anterior foi corrigido e confirmado ... com outro erro de ortografia. :)
TOOGAM
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.