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


21

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

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

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


2
あなたはすでに尾があなたが望むものに近いことを知っています。そのマニュアルページを読みましたか?
njzk2

1
less「F」キーがあります。相互作用が必要な場合に便利です。
するThorbjörnRavnアンデルセン

回答:


33

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

tail -f -n +0 filename

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

また、グラフィカルターミナルに、マウスを使用してできることに注意PageUp/ PageDown歴史に戻ってスクロールする(あなたのバッファをと仮定すると十分な大きさである)、あなたが使用している場合でもあり、この情報にとどまるCtrl+ C出口へtail。あなたが使用している場合less、これははるかに少ない便利で、私の知る限りであるあなたは、スクロールするためのキーボードを使用する必要があると私は維持する手段を知らないlessあなたがそれを起動するのを忘れた場合deinitialisingのtermcapから-X


1
+1あなたの答えは、私が私のものを投稿するとすぐに現れ、私のものはうまくいきますが、あなたの方が良いです。
ジュリーペレティエ

1
入力中に別の回答があったこと、および更新するにはクリックする必要があるというメッセージが表示されました。あなたの答えは仕事を成し遂げますが、最初からのカウント(で強制される+)がより効率的に実装されることは驚きではありません。
アントン

1
+1について教えてくれた+0。あなたは望むこと-Fの代わりに、-fログファイルを回転させるための
ハーゲン・フォン・Eitzen

ここには1つずれていると思います。tail -n +1ファイルの先頭を表示し、tail -n +21行スキップします。番号は最初に表示された行の行番号だと思います。
ベンミルウッド

1
@アンソンありがとう!これはまさに私が必要なものです!
悪虫

37

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

less +F <file>

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

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


2
これは確かにはるかに優れていtailます。ヒントをありがとう。私はこれに使用することを考えたことがなかったでしょうless。他のユーザーへの注意:単に実行してless <file>からを入力することもできFます。
ワイルドカード

3

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

{ cat filename; tail -0f filename; }

-0tailのそのオプションは-n 0、と同等です:0行を表示します。しかし、-f新しい行が表示されます。

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

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

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


3
cat終了からtail開始までの間にファイルが大きくなると、これらの行は表示されません。大したことではないが、純粋なtailソリューションを好む理由。
ベンミルウッド

{ cat; tail -n +0 -f; } < filetailはのcatexitとtailの間に表示される新しいデータを出力するので、レースを修正すると思います。もちろん、cat冗長になります。リダイレクトは1回だけ発生し、tail's stdinはcat既にEOFに読み出されているファイル記述子であるため、現在の位置はcat停止した場所です。あなたは置くことによってそれをテストすることができますecho foo >> file内側の{}レースを毎回作成するには、。
ピーターコーデス

2

watch コマンドはあなたのためにそれを行う必要があります。

また試すことができます

less +FG 

lessファイルが大きいファイルであると言うときに、ファイルをスクロールするコマンドのオプションが増えます。


Lessは、成長するファイルを追跡しません。
シャドゥール

7
@Shadur、それは、それが+Fオプションであるものです
グレンジャックマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.