Paginar com o comando tail -f

5

Eu estou tentando seguir o arquivo com paginação:

tail -f foo.txt | more

Isso funciona bem até que o arquivo receba, digamos, 200 linhas injetadas, quando isso acontece, a natureza do comando tail é ir para o final do arquivo, nesse ponto eu perco o rastro do log.

Existe uma maneira de evitar isso?

    
por Dolphin 02.11.2012 / 14:25

3 respostas

2

Minha solução é esta:

less some-file.log

Então, em less , techo Shift + F . Isso faz com que less seja atualizado com o arquivo. Para rolar para trás, apenas pressione Ctrl + C .

    
por Scott Severance 04.11.2012 / 07:06
5

Use tail -f log.txt | less . No meu teste rápido, ele é atualizado para avançar para as novas informações e você pode subir ou descer. Ou seja, menos atualizações como um buffer de saída, não se referindo estaticamente ao conteúdo original.

Ou, uma ligeira variação com menos partes móveis (sem tubo) - a solução que o Dolphin mencionou em um comentário - less +F log.txt é um bom caminho a percorrer. Veja o que a página man diz sobre F :

   F      Scroll  forward, and keep trying to read when the end of file is reached.
          Normally this command would be used when already at the end of the  file.
          It  is  a  way to monitor the tail of a file which is growing while it is
          being viewed.  (The behavior is similar to the "tail -f" command.)

Em outras palavras, isso é perfeito para este caso.

Tem um problema que impede que seja o meu favorito. Uma adição como less +F daemon.log | egrep session não funciona.

Uma das razões pelas quais eu continuo a usar pipes no meu trabalho diário de linha de comando é que, quando acoplado ao histórico, é fácil voltar atrás, adicionar um canal e alterar o comportamento de seu comando como dados. dita. Se um tail -f log simples não estiver funcionando devido ao volume de dados rolando para fora da tela, pressione o tubo para menos. Se o volume for muito pesado, mas você ver dicas das linhas que está procurando, adicione um pipe ao grep ou egrep. Então acorde, ou sed, ou corte, para obter exatamente o que você quer.

Esta é também uma razão pela qual o "uso desnecessário de gatos" é frequentemente uma crítica ridícula. Se você catar um arquivo, mas achar que ele é inesperadamente longo, use o histórico do shell, pressione a seta para cima e faça outra coisa com ele. Conserto rápido? Basta adicionar cat foo | more . Quanto tempo é isso? Seta para cima e | wc . Quantas linhas existem com "pangloss"? Adicione | egrep pangloss | wc . É bom se você pode começar um comando sabendo exatamente onde sua investigação está indo, mas se você não puder, história e pipes são uma boa maneira de fazer as coisas. Mesmo que seja feio, cat file | more | egrep something funciona bem.

    
por belacqua 02.11.2012 / 18:44
1

Não realmente, usando esse método. Você está tentando usar programas que limitam os dados, mas de maneiras muito diferentes.

Tente

watch -n 5 tail  -n 40 /var/log/thingy

Isso atualizará a exibição de cauda a cada 5 segundos.

Isso é o mais perto que posso chegar, mas não é o que você quer.

O problema é que mais espera todos os seus dados de uma vez, onde a cauda continua a canalizar. Se você está apenas tentando ler as últimas linhas repetidamente, o relógio funcionará. Se você quiser apenas manter um registro e voltar, use o backbuffer do console.

Em X isso seria barras de rolagem, se você estiver em um console verdadeiro, então você tem que usar algo como:

kernel /vmlinuz root=/dev/sdb5 video=radeonfb fbcon=scrollback:128 para aumentar o tamanho no momento da inicialização. Então você pode usar Shift UP e Shift Down para rolar.

Isso é muito mais fácil no X. Apenas

tail -f /var/log/something.log e role para frente e para trás. Você pode apertar enter para criar uma quebra visual de onde você estava.

Em um VTY você precisa usar o shift para cima e o shift para baixo para realizar a mesma coisa, e se você precisar de mais scroll use o argumento fbcon=scrollback:128 no boot.

    
por coteyr 02.11.2012 / 14:46