web-dev-qa-db-ja.com

tail -f <ディレクトリ名>は何をしますか?

ターミナルで次のコマンドを誤って実行しました。

tail -f /logs/applications/logs*

次の出力が得られました。

tail: file shrunk!
Error 0

正確に何が起こったのかわかりません。私はしばらくの間、ディレクトリ内のファイルの数を追跡していませんでした。誰かが正確に何が起こったのか説明してもらえますか、そして私はファイルを失いましたか?.

編集:

偶然かどうかはわかりませんが、コードを実行した後、ディレクトリ内のファイル数を数えたところ、10個でした!

初めて10番が私を妄想させた...

4
debal

正確に何が起こったのかわかりません。

何が起こったのかというと、ファイルは外部アプリケーションによってローテーションされていました。これは通常のことです。 logrotaterotateログファイルなどのユーティリティ。つまり、既存のログファイルの内容は別のファイルに移動され、既存のログファイルはアプリケーションが再度書き込みを開始する前に空白

tailが追跡ファイルのサイズが減少したと判断すると、観察したメッセージを出力し、ファイルの追跡を続行します。

GNU coreutilsマニュアルtail invocation セクションからの引用:

どちらの方法を使用しても、追跡されたファイルが縮小したと判断された場合、tailはファイルが切り捨てられたことを示すメッセージを出力し、新しく決定されたエンドポイントからファイルの終わりの追跡を再開します。

7
devnull

いいえ、tailコマンドはファイルの終わりのみを表示するため、ファイルを失うことはありませんでした。

/logs/applications/logs*tailに渡すことは、複数のファイル/フォルダー(/logs/applications/logs*パターンに一致するもの)を渡すことと同じです。このパターンはディレクトリでも一致する可能性があるため、これらの場合、tailは機能しません。

2
phoops