rsyslog
を構成しました 特定のログイベントを/dev/xconsole
に記録します :
*.*;cron.!=info;mail.!=info |/dev/xconsole
/dev/xconsole
名前付きパイプ(fifo
)。ログに記録されているものを確認したい場合は、cat /dev/xconsole
を実行できます。 。コマンドcat /dev/xconsole
を見て、私は驚いています。 ファイルを読み取った後は終了しませんが、代わりにtail -f
として機能します 。つまり、2つのコマンドは同じように動作します。
cat /dev/xconsole
tail -f /dev/xconsole
誰かがその理由を説明できますか?
2つの間に違いはありますか?
承認された回答:
cat
EOFを取得するまで読み続けます。パイプは、入力でEOFを取得した場合にのみ、出力でEOFを生成します。ロギングデーモンはファイルを開いて書き込み、開いたままにします —通常のファイルの場合と同じように—したがって、EOFが出力に生成されることはありません。 cat
ただ読み続け、現在パイプにあるものを使い果たすたびにブロックします。
これは手動で試すことができます:
$ mkfifo test
$ cat test
そして別のターミナルで:
$ cat > test
hello
もう一方の端子に出力されます。次に:
world
もっとあります もう一方の端子に出力します。ここでCtrl-Dを入力すると、他のcat
終了します。
この場合、cat
間の唯一の観察可能な違い およびtail -f
ロギングデーモンが終了または再起動された場合:cat
パイプの書き込み端が閉じられると永続的に停止しますが、tail -f
デーモンが再起動されても、続行(ファイルを再度開く)します。