Eu estava olhando recentemente em usar tail -f
para monitorar alguns arquivos de texto assim: tail -f /var/sometext
.
No entanto, quando fiz alguns testes, ele não parece funcionar. O que fiz foi criar um novo arquivo e executar: tail -f /home/name/text
Em seguida, abri o log no vim e fiz algumas edições, salvei-o e parece que o tail não está "vendo" a alteração.
O estranho é que correr echo "hello" >> /home/name/text
parece funcionar bem (a cauda vê a mudança). Eu li em algum lugar que isso tem algo a ver com descritores de arquivos e novos inodes sendo criados ao salvar um arquivo.
Alguém pode explicar isso para mim? Não entendi direito como isso realmente funciona, mas tenho uma ideia do que são os descritores de arquivo.
fonte
tail -f observa o final do arquivo e, quando o final do arquivo é movido, ele imprime o novo conteúdo e aguarda o final do arquivo se mover novamente. Em outras palavras, as alterações no meio do documento não serão encontradas pela cauda -f, apenas anexando.
fonte
Na verdade, a verdadeira história é:
tail -f monitora a memória, não o disco. Mas ele não pode acessar a memória protegida, como edições em um arquivo que abriu um editor de texto.
fonte
tail -f
comando opera em um arquivo (descritor de arquivo após abrir o arquivo). Embora, de fato, as novas modificações do arquivo ainda estejam na memória (buffers, cache), isso não importa.tail
ainda acessa o arquivo através do descritor de arquivo. Não importa como o arquivo é modificado. --- A resposta de Ignacio Vazquez-Abrams está correta - o editor não modifica o arquivo atual (que é abertotail
), salva as alterações em um novo arquivo com o mesmo nome que o antigo.