Qual é a diferença entre “cauda -f” e “cauda -F”?

Qual é a diferença entre “cauda -f” e “cauda -F”?

Eu nunca usei tail -Fo comando, sempre usei, tail -fporém 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 minúsculo -ffaz, mas não sigo o que o maiúsculo -Festá tentando fazer. Eu apreciaria que alguém pudesse me explicar as diferenças.

Responder1

Você descreve o tailutilitário GNU. A diferença entre esses dois flags é 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 em minha máquina decidir girar esse arquivo de log enquanto estou observando as mensagens sendo gravadas nele ("girar" significa excluir ou mover para outro local etc.), a saída que vejo será apenas parar.

Se eu abrir o arquivo tailassim:

$ tail -F /var/log/messages

... e novamente, o arquivo é girado, a saída continuaria a fluir no meu console porque tailreabriria o arquivo assim que ele ficasse disponível novamente, ou seja, quando o (s) programa (s) que estava gravando no log começasse a gravar nonovo /var/log/messages.

Nos sistemas BSD livres, não há -Fopção, mas tail -fse comportará como tail -Fnos sistemas GNU, com a diferença de que você receberá 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 de shell, faça

$ cat >myfile

Isso agora esperará que você digite as coisas. Vá em frente e digite algum jargão, algumas linhas. Tudo será salvo no arquivo myfile.

Emoutrosessão shell (talvez em outro terminal,sem interromper ocat):

$ tail -f myfile

Isso mostrará o (fim do) conteúdo do myfileconsole. 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+Deremovero myfilearquivo:

$ rm myfile

Em seguida, execute o gato novamente:

$ cat >myfile

... e digite algo, algumas linhas.

Com o GNU tail, essas linhas serãonãoaparece na segunda sessão do shell (onde tail -fainda está em execução).

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

Responder2

Simplificado, ao abrir um arquivo, você obterá o inode que contém alguns metadados de onde exatamente o arquivo está localizado em seu disco. Tail irá então ouvir 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 será um inode diferente (e provavelmente armazenado em um local diferente no disco). tail -fpreencha, não tente novamente e carregue o novo inode, tail -Fdetectará isso.

O mesmo efeito acontecerá se você renomear/mover um arquivo. Se você, por exemplo, seguir /var/log/messagese logrotate girar o log para /var/log/messages.1. tail with -fainda ouvirá o inode antigo que aponta para messages.1. tail with -Fperceberá isso e lerá o novo inode.

informação relacionada