Eu sei que havia um comando no Unix que eu poderia usar para monitorar um arquivo e ver as alterações que estão sendo gravadas nele. Isso foi bastante útil, especialmente para verificar arquivos de log.
Você sabe como é chamado?
Eu sei que havia um comando no Unix que eu poderia usar para monitorar um arquivo e ver as alterações que estão sendo gravadas nele. Isso foi bastante útil, especialmente para verificar arquivos de log.
Você sabe como é chamado?
Respostas:
tail -F
seguirá os nomes dos arquivos em vez dos objetos de arquivo, o que é especialmente útil em caso de rotação do arquivo de log.
tailf
agora está obsoleta e tail -f
é segura. (confirme isso em seu sistema com man tailf
.) Consulte a documentação: man7.org/linux/man-pages/man1/tailf.1.html
Você provavelmente quis dizer cauda, conforme a resposta de Jon Skeet.
Outro útil é o relógio ; Ele permite que você execute um comando periodicamente e veja a saída em tela cheia. Por exemplo:
watch -n 10 -d ls -l / var / adm / messages
Irá executar o comando a ls -l /var/adm/messages
cada 10 segundos e destacará a diferença na saída entre as execuções subseqüentes. (Útil para observar a rapidez com que um arquivo de log está crescendo, por exemplo).
inotifywait
O inotify-tools é útil se você deseja executar um comando sempre que um arquivo (ou qualquer arquivo de um diretório) for alterado. Por exemplo:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
não é a melhor opção para um nome de variável. Em zsh
, parece que os vários ambientes não diferenciam maiúsculas de minúsculas. Para mim, definir path
causas PATH
também é definido, e isso basicamente significa que nada será executado até que você corrija isso. Ativado bash
, a configuração path
não tem efeito PATH
.
Prefiro usar less +FG
1 ao tail -f
invés de precisar pesquisar um arquivo de log em busca de um ID ou erro específico. Se eu precisar procurar algo, digite ^C
para parar de seguir o arquivo e ?
começar a pesquisar para trás.
As combinações de teclas são praticamente as mesmas que em vi
. Qualquer comando pode ser inicializado na inicialização usando a +
opção:
+cmd Causes the specified cmd to be executed each time a new file is
examined. For example, +G causes less to initially display each
file starting at the end rather than the beginning.
Para logs realmente longos, acho conveniente usar a -n
opção que desativa a numeração de linhas. Na página de manual:
-n or --line-numbers
Suppresses line numbers. The default (to use line numbers) may
cause less to run more slowly in some cases, especially with a
very large input file. Suppressing line numbers with the -n
option will avoid this problem. Using line numbers means: the
line number will be displayed in the verbose prompt and in the =
command, and the v command will pass the current line number to
the editor (see also the discussion of LESSEDIT in PROMPTS
below).
1. Dê uma gorjeta ao rgmarcha por apontar isso nos comentários.
alias
com as opções desejadas, para que você não precise digitá-las todas as vezes.
Estou editando um arquivo LaTeX e queria monitorá-lo também para alterações em algum lugar no meio. Criei o seguinte pequeno script de shell que se mostrou útil para mim. Espero que também seja útil para outra pessoa.
#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
sleep 1
NEW=`ls -l "$FILE"`
if [ "$NEW" != "$LAST" ]; then
"$CMD" "$FILE"
LAST="$NEW"
fi
done
Salve como watch.sh
e faça chmod u+x watch.sh
. Então eu executo da seguinte maneira:
./watch.sh file.tex pdflatex
Se você deseja que o comando seja executado apenas se a modificação real ocorrer, é possível usar em `md5sum "$FILE"`
vez de `ls -l "$FILE"`
.
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
você pode usar o comando tailf, o mais fácil
tailf logfile.log
Tail é o padrão, tradicional, disponível em qualquer lugar da ferramenta unix. Uma ferramenta um pouco mais sofisticada é a multitail, que pode monitorar vários arquivos simultaneamente e realça a sintaxe.
Se eu quiser pesquisar o arquivo além de apenas segui-lo, uso menos com o comando "F".
Ao usar o tail, lembre-se de que argumentos adicionais serão necessários se o arquivo estiver passando por cima ou substituído por edit (modo padrão para o vim: w).
tail -f fará com que o tail armazene o descritor de arquivos e o siga. Se o arquivo for substituído, o descritor será alterado. O benefício de seguir o descritor de arquivo é que, se o arquivo for renomeado, você ainda o seguirá.
tail --follow = fará com que tail rastreie o arquivo nomeado, reabrindo-o periodicamente para ver se ele foi substituído.
--retry é outra opção útil se você deseja personalizar um arquivo de log, mas o arquivo ainda não foi criado.
tail -F é um atalho para --follow = --retry.
Esqueça tailf, diff é o comando que você deseja. Aqui está um bom truque para observar as diferenças conforme elas ocorrem em tempo real (ou fecham) entre 2 arquivos ou em um arquivo que está sendo gravado.
Você pode usar esses métodos para modificar o comportamento da maneira que desejar, como gravar as alterações em um arquivo para manter o registro. Brinque com o intervalo do relógio ou outras opções para os comandos abaixo.
Você tem um arquivo e deseja assistir à alteração feita:
Então, aqui está o que fazer:
cp file file2
touch check-differences.sh
nano check-differences.sh
chmod 755 check-differences.sh
#!/bin/bash
diff file file2
cp file file2
watch ./check-differences
isso será atualizado a cada 2 segundos por padrão. Portanto, se você precisar voltar e lê-los, escreva a saída do diff em um arquivo no script.
ou use cron para executar seu script regularmente se você não precisar ver a saída.
Enquanto tail -f somefile.txt
continua rolando com novos dados, às vezes também prefiro less +G somefile.txt
olhar para um patch dos dados mais recentes do arquivo.