「tail」コマンドの「-f」パラメーターはどのように機能しますか?


59
$ tail -f testfile

コマンドは、指定されたファイルの最新のエントリをリアルタイムで表示することになっていますか?しかし、それは起きていません。私がやろうとしていることが間違っている場合は、私を修正してください...

新しいファイル「aaa」を作成し、テキスト行を追加して閉じました。次に、このコマンドを発行しました(最初の行):

$ tail -f aaa
xxx
xxa
axx

最後の3行はファイルaaaの内容です。コマンドがまだ実行されているので(使用したため-f)、GUIを介してファイルaaaを開き、手動でさらに数行追加し始めました。しかし、ターミナルはファイルに追加された新しい行を表示しません。

ここで何が問題なのですか?tail -fそれらはシステムによってのみ書かれている場合は、コマンドは新しいエントリを示して?(ログファイルなど)

回答:


62

tail(1) manページから:

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

テキストエディタは、元のファイルの名前を変更または削除し、新しいファイルを同じファイル名で保存しています。-F代わりに使用してください。


働いた!だから、私$ tail -F filename$ tail -f filename正しいのではなく、常にコマンドを使用できますか?
-its_me

17
それが意図した動作である場合。そこあなたが記述子の代わりに、ファイル名でフォローしたい場合であってもよいが、私はそれらの多くに遭遇していない、公正であることを。
イグナシオバスケス-エイブラムス

lsofこれが起こっていることを示すことができます-例えばlsof -Fpcftni、後に続くiノードtailは、エディターが開いているiノードとは異なることを示します。
アーロンD.マラスコ

10

エディターには、ファイル用の独自のバッファーがあります。エディターでテキストを変更すると、ファイル自体には何も書き込まれません。

変更を保存すると、エディターが単に古いファイルを削除して新しいファイルを作成する可能性があります。tail -fは削除されたファイルに接続されたままなので、新しいものは表示されません。


1
エディターはファイルを上書きし、ログはテキストを追加します。これが問題かもしれません。
ルーフォエルマグーフォ

@Juan:コメントがわかりません。「上書き」は、答えで説明したものを除き、具体的な意味を持ちません。
ステファンギメネス

はい、私はあなたと同じ意味でした:)
ルーフォエルマグフォ

3

tail デフォルトでは、リアルタイムではなく1秒ごとに「更新」します。

これを試してください(bash4が必要です):

  • 2つのターミナルを開きます。
  • 最初のターミナルでとを実行touch ~/output.txttail -f ~/output.txtます。
  • 2番目のターミナルで実行します for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
  • 最初のターミナルのtailの出力を見てください。

という意味echo $i >> ~/output.txtですか?また、この答えは質問のポイントを見逃しています。
イグナシオバスケス-エイブラムス

1
はい、コメントを書いている間に失敗を修正しました:)。私の答えは問題
ルーフォエルマグーフォ

4
@Juan:現在、Linuxではtailf、inotifyベースの実装があります。そのため、リアルタイムで更新されます。
ステファンギメネス

はい。tailfただしtail、inotifyを使用します。知りませんでしたtailf。tailのマンページには、デフォルトの1秒が表示され-sます。
ルーフォエルマグーフォ

3
はい、tail続いており、利用可能になったらinotifyも使用しています。tailfファイルにアクティビティがない場合は、スリープ状態でポーリングはまったく行われません。tail -fアクティビティを示します(strace出力を参照)。
ステファンギメネス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.