Como posso ver o arquivo inteiro e também esperar que mais dados sejam adicionados a esse arquivo?

18

Eu quero ler todo o arquivo e esperar pela entrada, assim como tail -f , mas com o arquivo completo exibido.

O comprimento desse arquivo sempre será alterado, porque esse é um arquivo .log .

Como posso fazer isso, se não souber o comprimento do arquivo?

    
por malworm 28.04.2016 / 06:36

4 respostas

32

tail permite adicionar -n para especificar o número de linhas a serem exibidas no final, que pode ser usado em conjunto com -f . Se o argumento para -n começar com + , que é a contagem de linhas desde o início ( 0 e 1 exibindo o arquivo inteiro, 2 indicando ignorar a primeira linha, conforme indicado por @Ben). Então faça:

tail -f -n +0 filename

Se seus arquivos de log forem rotacionados, você poderá adicionar --retry (ou combinar -f and --retry em -F como sugerido pelo @Hagen)

Note também que em um terminal gráfico, você pode usar o mouse e PageUp / PageDown para voltar ao histórico (supondo que seu buffer seja grande o suficiente), as informações permanecem lá mesmo se você usar Ctrl + C para sair de tail . Se você usa less isto é muito menos conveniente e AFAIK você tem que usar o teclado para rolar e eu não sei de um meio de manter less de inicializar o termcap se você esquecer de iniciá-lo com -X . / p>     

por 28.04.2016 / 07:04
34

Existe uma maneira muito melhor de conseguir isso:

less +F <file>

Ele mostrará todo o arquivo, terá o poder total de less e aguardará novas entradas. Se você quiser parar de esperar pela entrada e ler uma parte específica, poderá pará-la com ^C e continuar com F .

O comando F está sempre disponível em less , se você decidir observar as alterações enquanto tiver um arquivo aberto em less , pressionar F irá ativá-lo. Graças a hiergiltdiestfu e curinga para apontar isso.

    
por 28.04.2016 / 14:25
3

Além da resposta do / u / Anthon, você pode fazer algo como:

{ cat filename; tail -0f filename; }

Essa opção -0 para tail é equivalente a -n 0 , ou seja: dispaly 0 linhas. Mas o -f exibirá novas linhas.

Você não precisa das chaves { } . Eu os usei porque às vezes você quer redirecionar os filodescriptors de alguma forma. Por exemplo:

{ cat ; tail -0f -; } < /var/log/messages

Observado por Ben Milwood: você pode ter uma condição de corrida em que o arquivo cresce entre o final da operação cat e o início da operação tail . Mas, novamente, esse é um problema "acadêmico" para uma solução acadêmica.

    
por 28.04.2016 / 10:18
2
O comando

watch deve fazer isso por você.

Você também pode tentar

less +FG 

Você terá mais opções com o comando less para percorrer seu arquivo, já que é um arquivo grande.

    
por 28.04.2016 / 07:12