rsyslog
いくつかのログイベントが記録されるように設定しました/dev/xconsole
。
*.*;cron.!=info;mail.!=info |/dev/xconsole
/dev/xconsole
名前付きパイプ(fifo
)。録画された内容を見たい場合は、これを行うことができますcat /dev/xconsole
。cat /dev/xconsole
ファイルを読み取った後、コマンドは完了せずに代わりにtail -f
。つまり、両方のコマンドが同じように動作するという事実に驚きました。
cat /dev/xconsole
tail -f /dev/xconsole
誰かがこれがなぜ説明できますか?
2つの間に違いはありますか?
ベストアンサー1
cat
EOFに達するまで読んでください。パイプが入力からEOFを取得した場合にのみ、出力からEOFを生成します。ログデーモンがファイルを開いて書き込んでいます。そして開いたままにしてください- 通常のファイルと同様 - 出力にEOFは生成されません。cat
読み続けながら、パイプの現在のコンテンツがなくなるたびにブロックします。
手動で試してみることができます。
$ mkfifo test
$ cat test
他の端末から:
$ cat > test
hello
他の端末に出力があります。次に、次のように入力します。
world
ありますもっと他の端末に出力します。 Ctrl-Dを押して入力すると、他の入力cat
も終了します。
cat
この場合、willとwillの間で観察できる唯一の違いは、tail -f
ロギングデーモンが終了するのか再起動されるのかということです。cat
パイプの書き込み側が閉じると永久に停止しますが、tail -f
デーモンが再起動された後も実行されます(restart open)ファイル)。