O `tail -f` é mais eficiente que o` less + F`?

34

Este artigo apontou alguns motivos para usar less +Fdemais tail -f. A maioria dos motivos são sobre os recursos , não os técnicos : less +Fpodem destacar, pesquisar, navegar pelo arquivo.

E as razões técnicas ?

AFAIK, lessusa polling a cada segundo para atualizar o arquivo, enquanto tail, conforme definido pelo POSIX, usa um loop que dorme por 1 segundo e copia os bytes disponíveis. Isso é suficiente, mas o POSIX também incentivou a implementação a usar um método mais eficiente. Pelo menos o GNU tail use inotify , por isso é mais eficiente.

less também mantém o conteúdo do arquivo na memória; portanto, com arquivos enormes, como alguns gigabytes, ele pode tornar o computador mais lento.

Então, existem outras razões técnicas para usar tail -fmais less +F?

cuonglm
fonte

Respostas:

37

Acho que você abordou o ponto principal: less +Flê o arquivo inteiro, enquanto em muitos sistemas tail -fapenas lê o final do arquivo, e mesmo nos sistemas em que lê o arquivo inteiro, pelo menos não mantém o arquivo inteiro em memória. Isso less +Finviabiliza arquivos muito grandes. Você pode, no entanto, executar less -n +F, o que faz lesscom que leia apenas o final do arquivo, com o custo de não exibir os números de linha.

Sob o capô, entre less -n +Fe tail -f, a principal diferença é que tailusa um serviço de notificação de alteração de arquivo em algumas plataformas (por exemplo, inotify no Linux), que permite exibir novos dados instantaneamente, enquanto lesspode levar até 1 segundo para exibir os novos dados porque verifica novos dados em um loop e dorme entre as verificações.

Outra diferença entre less +Fe tail -fé que lessinvocará seu filtro de entrada, mas que normalmente não terá impacto nos arquivos de log.

Uma diferença técnica a favor less +Fé que você pode torná-la truncada na largura da tela com a -Sopção, enquanto tailnão lhe dá outra opção senão exibir a linha inteira, não importa quanto tempo ela seja.

Em termos de interface, não há muita vantagem em usar less. tail -fé útil perceber quando algo acontece. Você pode até executá-lo em segundo plano. Se algo acontecer e você quiser examinar o arquivo com mais detalhes, poderá abri-lo lessem outro terminal.

Se você deseja assistir a vários arquivos, o multitail é o caminho a seguir. Mesmo para um único arquivo, o multitail possui recursos adicionais interessantes, como filtragem e colorizações.

Gilles 'SO- parar de ser mau'
fonte
Com arquivos muito grandes, 'less -n 99.99p + F' impede menos de ler o arquivo inteiro?
precisa saber é
11
@cuonglm Ah, certo, sim. Basta less -n, isso faz menos uso da estratégia de procurar terminar e depois ler novamente.
Gilles 'SO- stop being evil' em