tail -f
と同様に、ファイル全体を読み取って入力を待機させたいのですが、完全なファイルが表示されます。
これは.log
ファイルであるため、このファイルの長さは常に変化します。
ファイルの長さがわからない場合はどうすればよいですか?
tail
を使用すると、-n
を追加して、末尾から表示する行数を指定できます。これは、-f
と組み合わせて使用できます。 -n
の引数が先頭からの行数である+
で始まる場合(0
と1
はファイル全体を表示し、2
はスキップを示します@Benで示される最初の行)。だからちょうどしてください:
tail -f -n +0 filename
ログファイルがローテーションする場合は、--retry
を追加できます(または@Hagenが提案するように-f and --retry
を-F
に結合します)
また、グラフィカル端末では、マウスと PageUp/PageDown (バッファーが十分に大きいと仮定して)履歴にスクロールして戻るには、この情報は、 Ctrl+Ctail
を終了します。 less
を使用する場合、これははるかに不便であり、AFAIKはスクロールにキーボードを使用する必要があり、開始を忘れた場合にless
がtermcapを初期化しないようにする方法はわかりません-X
。
これを達成するためのより良い方法があります:
less +F <file>
ファイル全体が表示され、less
の機能をすべて備え、新しい入力を待ちます。入力の待機を停止し、特定の部分を読み取る場合は、^C
で停止し、F
で再開できます。
F
コマンドは常にless
で使用できます。less
でファイルを開いているときに変更を監視する場合は、F
を押すとオンになります。それを指摘してくれた hiergiltdiestf と wildcard に感謝します。
/ u/Anthonの回答に加えて、次のようなことができます。
{ cat filename; tail -0f filename; }
Tailの-0
オプションは-n 0
と同じです。つまり、0行を表示します。ただし、-f
は新しい行を表示します。
中括弧{ }
は必要ありません。ファイル記述子を何らかの方法でリダイレクトしたい場合があるので、それらを使用しました。例えば:
{ cat ; tail -0f -; } < /var/log/messages
ベンミルウッド氏による注記:cat
操作の終了からtail
操作の開始までの間にファイルが大きくなるという競合状態が発生する可能性があります。しかし、これもまた、学術的な解決策に対する「学術的な」問題です。
watch
コマンドがそれを行うはずです。
あなたも試すことができます
less +FG
less
コマンドには、大きなファイルであると言ってファイルをスクロールするためのオプションがさらにあります。