/dev/nullに送信される内容を監視しますか?

/dev/nullに送信される内容を監視しますか?

楽しく
作成中の内容をモニタリング/キャプチャ/ダンプする方法はありますか/dev/null

DebianやFreeBSDでは、重要な場合は他のオペレーティングシステム固有のソリューションも歓迎します。

答え1

名前付きパイプを作成するのは/dev/nullおそらく最も簡単な方法です。たとえば、一部のプログラムは、そのファイルがsshd特別なファイルではないことを発見した場合、例外をスローまたは実行できません(またはそのファイルから読み取って/dev/null返すことを期待できます)。EOF

# Remove special file, create FIFO and read from it
rm /dev/null && mkfifo -m622 /dev/null && tail -f /dev/null
# Remove FIFO, recreate special file
rm /dev/null && mknod -m666 /dev/null c 1 3

これは、すべてのLinuxディストリビューションとすべての主要なBSDで動作します。

答え2

私はかつて/dev/nullがしない難しい方法を見つけました。持つ特殊開発ファイルになります。ずっと前に/dev/nullが動作しているUltrixシステムから削除されたため、次にプログラムが/ dev/nullにリダイレクトされたときにプログラムの出力で埋められた一般的なファイルになりました。 (私の考えでは、「ファイルやディレクトリはありません」と思います。これは私たちがこれをやっていて何が起こっているのかをcat /dev/null知ろうとしたときに私に知らせるものを意味するno such file or directoryので混乱しています。)

だから私の提案は、それを名前付きパイプに置き換えて、パイプにプログラムを接続して読み、監視することです。

答え3

私は/ dev / nullがファイルディスクリプタへのシンボリックリンクになる可能性があるというアイデアを思いつきましたが、追加されたコードメカニズムを使用してタスクが読み取りか書き込みかを確認し、読み取った場合は実際に次のように生成する必要があります。別の/dev /actualnullはmknodを読み取り、ログに記録された場合は呼び出し元プログラムを書き込み、書き込みに/dev/nullを使用するプログラムを分析するためにログ/カウントを試みます。しかし、パフォーマンスの面では大きなコストがかかると思います。とにかく、ほとんどのシェルプログラムやコードはリダイレクトを使用しているので、これは実用的ではないと思います。 / dev / nullの使用量を監視するためにinotifyを使用できますか?あるいは、1:3デバイスを処理するカーネルコードを再構築し、再コンパイルして再インストールして実験することもできます。

関連情報