ファイルを監視し、ファイルに書き込まれる変更を確認するために使用できるコマンドがUnixにあったことは知っています。これは、特にログファイルをチェックする場合に非常に役立ちました。
それが何と呼ばれているか知っていますか?
ファイルを監視し、ファイルに書き込まれる変更を確認するために使用できるコマンドがUnixにあったことは知っています。これは、特にログファイルをチェックする場合に非常に役立ちました。
それが何と呼ばれているか知っていますか?
回答:
tail -F
ファイルオブジェクトではなくファイル名に従います。これは、ログファイルのローテーションの場合に特に便利です。
tailf
廃止され、tail -f
安全になりました。(システムでこれを確認しますman tailf
。)ドキュメントを参照してください:man7.org/linux/man-pages/man1/tailf.1.html
inotifywait
inotify-toolsからは、ファイル(またはディレクトリ内のファイル)が変更されるたびにコマンドを実行する場合に便利です。例えば:
inotifywait -r -m -e modify /var/log |
while read path _ file; do
echo $path$file modified
done
path
変数名に最適な選択肢ではないメモです。でzsh
、環境変数は大文字と小文字を区別しないようです。私にとっては、設定path
によって設定PATH
も行われます。つまり、基本的には、修正するまで何も実行されません。オンではbash
、設定path
はに影響しませんPATH
。
ログファイルで特定のエラーまたはIDを検索する必要があるため、less +FG
1よりも1を使用するtail -f
ことを好みます。何かを検索する必要がある場合は、入力^C
してファイルのフォローを停止し、?
後方検索を開始します。
キーバインディングはとほぼ同じvi
です。+
オプションを使用して、起動時にコマンドを初期化できます。
+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.
本当に長いログの場合、-n
行番号付けをオフにするオプションを使用すると便利です。マンページから:
-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. コメントでこれを指摘してくれたrgmarchaへのハットチップ。
alias
希望するオプションでを設定することを忘れないでください。そうすることで、毎回入力する必要がなくなります。
テールは素晴らしいです...以下も使用することができるプレスその後、すなわち以下myfileのファイルに以下を開始Shift+ F。これは尾としての役割が少ない。
私はLaTeXファイルを編集していますが、途中で変更を監視したかったのです。私は、次の小さなシェルスクリプトを作成しました。他の人にも役立つと思います。
#!/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
それを保存watch.sh
してくださいchmod u+x watch.sh
。次に、次のように実行します。
./watch.sh file.tex pdflatex
実際の変更が行われた場合にのみコマンドを実行する場合は、の`md5sum "$FILE"`
代わりに使用できます`ls -l "$FILE"`
。
NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
あなたはtailf コマンドを使用できます
tailf logfile.log
ファイルをテーリングするだけでなく、ファイルの周りを検索できるようにしたい場合は、「F」コマンドでlessを使用します。
tailを使用する場合、ファイルがロールオーバーするか、編集(vimのデフォルトモード:w)に置き換えられる可能性がある場合、追加の引数が必要になることに注意してください。
tail -fを指定すると、tailはファイル記述子を保存し、それに追従します。ファイルが置き換えられると、記述子が変更されます。ファイル記述子を追跡することの利点は、ファイルの名前が変更されても、引き続きファイルを追跡できることです。
tail --follow =は、定期的にファイルを開き、置き換えられているかどうかを確認することにより、指定されたファイルを追跡します。
--retryは、ログファイルを作成したいがファイルがまだ作成されていない場合に便利な別のオプションです。
tail -Fは--follow = --retryのショートカットです。
tailfを忘れてください、diffはあなたが望むコマンドです。以下に、2つのファイル間または書き込み中の1つのファイル間でリアルタイム(またはクローズ)に発生する違いを監視するための優れたトリックを示します。
これらのメソッドを使用して、記録を保持するためにファイルに変更を書き込むなど、任意の方法で動作を変更できます。監視の間隔または以下のコマンドの他のオプションを試してください。
ファイルが1つあり、変更が加えられるのを監視したい場合:
だから何をすべきかheres:
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
これはデフォルトで2秒ごとに更新されます。戻ってそれらを読む必要がある場合は、スクリプトのファイルにdiffの出力を書き込みます。
または、出力を表示する必要がない場合は、cronを使用してスクリプトを定期的に実行します。