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

21

Quero ler o arquivo inteiro e deixá-lo aguardando a entrada, assim como tail -f com o arquivo completo exibido.

O tamanho deste arquivo sempre será alterado, porque é um .logarquivo.

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

malworm
fonte
2
você já sabe que a cauda está perto do que você quer. você leu a página de manual para isso?
Njzk2 28/04
1
lesstem a tecla "F". Útil se você precisar de interação.
Thorbjørn Ravn Andersen

Respostas:

33

tailpermite adicionar -npara especificar o número de linhas a serem exibidas no final, que podem ser usadas em conjunto com -f. Se o argumento para -ncomeçar com +isso for a contagem de linhas desde o início ( 0e 1exibir o arquivo inteiro, 2indicando pular a primeira linha, conforme indicado por @Ben). Então faça:

tail -f -n +0 filename

Se os seus arquivos de log se girado, você pode adicionar --retry(ou combinar -f and --retryem -Fcomo @Hagen sugerido)

Observe também que, em um terminal gráfico, você pode usar o mouse e PageUp/ PageDownpara voltar ao histórico (assumindo que seu buffer seja grande o suficiente), essas informações permanecerão lá mesmo se você usar Ctrl+ Cpara sair tail. Se você usar lessisso é muito menos conveniente e o AFAIK precisará usar o teclado para rolar e não conheço um meio de evitar lessdesinicializar o termcap se você esquecer de iniciá-lo -X.

Anthon
fonte
1
+1 Sua resposta apareceu assim que eu publiquei a minha e, embora a minha funcione, a sua é melhor.
Julie Pelletier
1
Recebi a mensagem enquanto ainda estava digitando que outra resposta estava lá e que eu deveria clicar para atualizar. Sua resposta faria o trabalho, mas não me surpreenderia que a contagem desde o início (forçada com a +) seja implementada com mais eficiência.
Anthon
1
+1por me ensinar sobre +0. Você pode querer -Fem vez de -fpara arquivos de log rotativos
Hagen von Eitzen
Eu acho que há uma desvantagem aqui. tail -n +1mostra o início do arquivo para mim e tail -n +2pula uma linha. Eu acho que o número é o número da primeira linha exibida.
precisa
1
@Anthon thanks! É exatamente disso que eu preciso!
malworm
37

Existe uma maneira muito melhor de conseguir isso:

less +F <file>

Ele mostrará o arquivo inteiro, tem todo o poder lesse aguardará novas entradas. Se você deseja parar de esperar pela entrada e ler uma parte específica, pode parar com ^Ce continuar com F.

O Fcomando está sempre disponível em less, se você decidir observar as alterações enquanto mantém um arquivo aberto less, pressionar pressioná F-lo-á. Obrigado a hiergiltdiestfu e curinga por apontar isso.

Leandros
fonte
2
Isso é realmente muito melhor que tail. Obrigado pela dica; Eu nunca teria pensado em usar lesspara isso. Nota para outras pessoas: você também pode simplesmente executar less <file>e digitar F.
Curinga
3

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

{ cat filename; tail -0f filename; }

Essa -0opção de cauda é equivalente a -n 0, o que significa: exibir 0 linhas. Mas o -fmostrará novas linhas.

Você não precisa do aparelho { }. Eu os usei porque às vezes você deseja redirecionar os filedescriptors de alguma maneira. 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 catoperação e o início da tailoperação. Mas, novamente, esse é um problema "acadêmico" para uma solução acadêmica.

Otheus
fonte
3
Se o arquivo crescer entre o catfinal e o tailinício, você não verá essas linhas. É improvável que seja um grande negócio, mas um motivo para preferir a tailsolução pura .
precisa
Eu acho { cat; tail -n +0 -f; } < fileque consertaria a corrida, porque o tail imprimirá todos os novos dados que aparecerem entre cata saída e taila inicialização. Claro, isso torna o catredundante. O redirecionamento acontece apenas uma vez e tailstdin é o descritor de arquivo que catjá foi lido no EOF; portanto, sua posição atual é onde catparou. Você pode testá-lo colocando um echo foo >> filedentro do {}, para criar a corrida sempre.
Peter Cordes
2

watch comando deve fazer isso por você.

Você também pode tentar

less +FG 

Você terá mais opções com o lesscomando para rolar pelo seu arquivo, pois diz que é um arquivo grande.

RajuBhai
fonte
Menos também não segue um arquivo crescente.
precisa saber é o seguinte
7
@Shadur, ele faz, é o que a +Fopção é para
glenn jackman