Abra um arquivo de texto e deixe que ele se atualize

20

Como posso abrir um arquivo de texto e deixá-lo se atualizar? Semelhante à maneira como topfunciona.

Quero abrir um arquivo de log e vê-lo se atualizar rapidamente.

Eu apenas tentei:

$ tail error.log

Mas acabei de perceber que apenas mostra as linhas no arquivo de log.

Estou usando o RHEL 5.10

Kevdog777
fonte
4
Usetail -f error.log
garethTheRed
Ah, então tailé a maneira correta de usá-lo? Uau, eu realmente não achei que poderia usar isso. Eu estava esperando uma expressão muito mais longa.
precisa saber é o seguinte
11
FYI, enquanto a cauda é a ferramenta para o trabalho, literalmente open a text file and let it update itselfpode ser alcançada watch cat filename.
Cthulhu
11
@Cthulhu você quer dizer watch cat filenameou similar. watch filenametentará executar filename.
terdon
@terdon Sim, de fato.
Cthulhu

Respostas:

29

Você está procurando tail -f error.log(de man tail):

   -f, --follow[={name|descriptor}]
          output appended data as the file grows; -f, --follow, and --fol‐
          low=descriptor are equivalent

Isso permitirá que você assista a um arquivo e veja as alterações feitas nele.

terdon
fonte
E isso não vai consumir muitos recursos?
precisa saber é o seguinte
11
@ Kevdog777 não é realmente não. Presumivelmente, ele apenas reabre o arquivo a cada poucos segundos para atualizá-lo. Essa é a maneira clássica de fazer o que você deseja.
terdon
11
@terdon, apenas reabre (pode reabrir) com -F. Com -fele apenas lê cada segundo. É como um while cat; do sleep 1; done < file. Veja inotailno Linux uma cauda mais reativa (costuma inotifysaber quando o arquivo está sendo modificado).
Stéphane Chazelas
@ StéphaneChazelas: Tenho certeza que é muito mais eficiente do que isso. Eu apostaria que use select ou poll para ver se o fd é legível e, em seguida, durma até que haja dados disponíveis no fd. Embora eu possa estar totalmente errado.
Martin York
11
@LokiAstari, você não pode ser muito mais eficiente do que um readsistema chama a cada segundo. Uma "leitura" selectou pollum arquivo regular sempre retornaria true, pois read()nunca bloqueia um arquivo regular, portanto, não funcionaria. Dito isto, o GNU tailagora usa inotifyno Linux, então inotailnão é mais necessário.
Stéphane Chazelas
20

Use "less" em vez de "tail" para retroceder e pesquisar

Você pode usar tail -f error.log, ou melhor: tail -F error.log.

Mas se você quiser voltar ao arquivo, isso não é muito útil.

Com

less +F error.log

você obtém a função de tail -f,
mas pode interromper a leitura de novas entradas com Ctrl+ C.

Em seguida, você está no lessmodo normal ,
onde pode voltar para ver o que pode ter perdido com Up/ Down
Além disso, você pode ler longas linhas de arquivos de log sem quebrar, usando Left/Right

Pesquise e mostre apenas linhas correspondentes

Você também pode procurar expressões regulares com /, ?para trás ne Npara a próxima / anterior.

Muito interessante para os arquivos de log é que você pode ocultar todas as linhas não correspondentes para uma pesquisa &, filtrando apenas as correspondências.

Teclas na linha de comando

Com Fdentro de less, você continua o tail -fmodo-like.
O +na linha de comando less +Fsignifica "pressione essas teclas diretamente após iniciar menos".

Então, usamos a tecla pressionada Fna inicialização, descrita como:

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.)

Veja também multitailse você precisa assistir mais de um arquivo de log.

Volker Siegel
fonte
Obrigado, mas tail -f error.logé perfeito para o que eu preciso. O arquivo de log só é atualizado a cada hora, por isso é suficiente para meu uso :-)
Kevdog777
11
Certifique-se de lembrar que para a próxima vez;)
Volker Siegel
mosttambém tem um tail -fmodo com F.
Stéphane Chazelas
@ StéphaneChazelas certo, obrigado! Hummm ... lembro que alguém me agradeceu por mencionar mosthá um tempo atrás ... e eu esqueci.
Volker Siegel
@ StéphaneChazelas Mas então, mostnão parece ter menos recurso de filtro &para mostrar apenas as linhas correspondentes? Um recurso útil nos arquivos de log, geralmente.
Volker Siegel
5

Use a -fopção com tail:

-f, --follow [= {name | descriptor}] gera dados anexados à medida que o arquivo cresce; -f, --follow e --follow = descritor são equivalentes

Ou use o Fcomando dentro less:

   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 mon‐
          itor the tail of a file which is growing while it is being viewed.  (The behavior is similar to the "tail -f" command.)
Arkadiusz Drabczyk
fonte
O que há de novo nesta resposta?
precisa saber é o seguinte
11
Eu não entendo o que você está perguntando. Foi a segunda resposta a esta pergunta e a primeira que mencionamos less.
Arkadiusz Drabczyk 9/09/14