$ tail -f testfile
このコマンドは、指定されたファイルの最新項目をリアルタイムで表示する必要があります。そうですか?しかし、そのようなことは起こりませんでした。私の意図が間違っている場合は訂正してください...
新しいファイル「aaa」を作成し、1行のテキストを追加して閉じました。次に、次のコマンドを実行します(最初の行)。
$ tail -f aaa
xxx
xxa
axx
最後の3行はaaaファイルの内容です。これで、コマンドはまだ実行されているので(使用しているように-f
)GUIを介してaaaファイルを開き、手動でより多くの行を追加し始めます。ただし、端末にはファイルに追加された新しい行は表示されません。
どうなりますか?このtail -f
コマンドは、システムでのみ作成された新しいエントリのみを表示しますか? (ログファイルなど)
答え1
~からtail(1)
マニュアルページ:
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
。
答え2
エディタには独自のファイルバッファがあります。エディタでテキストを変更すると、ファイル自体には何も記録されません。
変更を保存すると、エディタは古いファイルを削除して新しいファイルを作成する可能性が高くなります。tail -f
削除されたファイルは引き続きリンクされているため、新しいコンテンツは表示されません。
答え3
tail
デフォルトでは、リアルタイムではなく1秒ごとに「リフレッシュ」されます。
これを試してみてください(bash4が必要です):
- 2つの端末を開きます。
touch ~/output.txt
実行し、最初の端末でtail -f ~/output.txt
。- 2番目の端末で実行
for i in {0..100}; do sleep 2; echo $i >> ~/output.txt ; done
- 最初の端末でtailの出力を見てください。