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 デーモンが再起動されても、続行(ファイルを再度開く)します。