web-dev-qa-db-ja.com

ファイル全体を表示し、そのファイルにデータが追加されるのを待つにはどうすればよいですか?

tail -fと同様に、ファイル全体を読み取って入力を待機させたいのですが、完全なファイルが表示されます。

これは.logファイルであるため、このファイルの長さは常に変化します。

ファイルの長さがわからない場合はどうすればよいですか?

22
malworm

tailを使用すると、-nを追加して、末尾から表示する行数を指定できます。これは、-fと組み合わせて使用​​できます。 -nの引数が先頭からの行数である+で始まる場合(01はファイル全体を表示し、2はスキップを示します@Benで示される最初の行)。だからちょうどしてください:

tail -f -n +0 filename

ログファイルがローテーションする場合は、--retryを追加できます(または@Hagenが提案するように-f and --retry-Fに結合します)

また、グラフィカル端末では、マウスと PageUp/PageDown (バッファーが十分に大きいと仮定して)履歴にスクロールして戻るには、この情報は、 Ctrl+Ctailを終了します。 lessを使用する場合、これははるかに不便であり、AFAIKはスクロールにキーボードを使用する必要があり、開始を忘れた場合にlessがtermcapを初期化しないようにする方法はわかりません-X

33
Anthon

これを達成するためのより良い方法があります:

less +F <file>

ファイル全体が表示され、lessの機能をすべて備え、新しい入力を待ちます。入力の待機を停止し、特定の部分を読み取る場合は、^Cで停止し、Fで再開できます。

Fコマンドは常にlessで使用できます。lessでファイルを開いているときに変更を監視する場合は、Fを押すとオンになります。それを指摘してくれた hiergiltdiestfwildcard に感謝します。

38
Leandros

/ u/Anthonの回答に加えて、次のようなことができます。

{ cat filename; tail -0f filename; }

Tailの-0オプションは-n 0と同じです。つまり、0行を表示します。ただし、-fは新しい行を表示します。

中括弧{ }は必要ありません。ファイル記述子を何らかの方法でリダイレクトしたい場合があるので、それらを使用しました。例えば:

{ cat ; tail -0f -; } < /var/log/messages

ベンミルウッド氏による注記:cat操作の終了からtail操作の開始までの間にファイルが大きくなるという競合状態が発生する可能性があります。しかし、これもまた、学術的な解決策に対する「学術的な」問題です。

3
Otheus

watchコマンドがそれを行うはずです。

あなたも試すことができます

less +FG 

lessコマンドには、大きなファイルであると言ってファイルをスクロールするためのオプションがさらにあります。

2
RajuBhai