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


19

ただ楽しみのために:
書き込まれているものを監視/キャプチャ/ダンプする方法はあり/dev/nullますか?

DebianまたはFreeBSDでは、重要な場合、他のOS固有のソリューションも歓迎します。


3
可能ですが、回答とコメントで説明されているように、/非常に/あまり良いアイデアではありません。
シャドゥール

2
@Shadur:悪い解決策があるかもしれませんが、それはアイデアを面白くないものや悪いアイデアにしないわけではありません。
jlliagre

1
実際、私はこの質問を見つけました。なぜなら、多くのキャプチャされた/dev/nullsのコンテンツの分析がどうなるかを考えていたからです。私は自分で研究をしたくありませんが、結果を読みたいです。(本質的に「人々のゴミを覗く」ことにはいくつかの倫理的問題があるだろうが、それでもコンセプトは興味深い。)
beporter

回答:


12

/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で機能するはずです。


1
注意すべきことの1つは、tail失敗すると、パイプのバッファーがいっぱいであるため、多くのプログラムが失敗する可能性があることです。
アルセージュ

4
から読み取るプログラムは、/dev/nullこれを好まないでしょう。
ジル「SO-悪であるのをやめる」

@Gilles-確かに、したがって、私のメモ。
クリスダウン

3
@アリはい。No magicUNIX哲学の指針です。
フィハグ

4
Ahem /dev/null 魔法でmknod /dev/null c 1 3あり、それを呼び出す魔法の公式です。(そしてそのためには超大国が必要です…)
ステファンギメネス

6

/ dev / nullが特別なdevファイルである必要がないという難しい方法を見つけました。ずいぶん前に、仕事中のUltrixシステムの/ dev / nullが削除されたため、次回プログラムが/ dev / nullにリダイレクトされたとき、そのプログラムからの出力で満たされた通常のファイルになりました。(私たちは何が起こっていたかを把握しようとしていたとき、私たちがやるだろうと意図され、それはそのようなファイルまたはディレクトリ」だったんだと思うcat /dev/nullと語ったことがno such file or directory、私たちの地獄を混同しています。)

したがって、名前付きパイプに置き換えてから、パイプを読み取り、監視するプログラムをアタッチすることをお勧めします。


4
多くのプログラム/dev/nullは、読み取り時に常に0バイトを返すことに依存しています(cat /dev/null > foo)。た/dev/null内容で通常のファイルも、この期待を破ります。
アルセージュ

1
はい、それは我々がそれを発見した方法です。プログラムは入力がないことを期待し、それを大量に取得し、さらに/ dev /がいっぱいになりました。
ポールトンブリン

1

/ dev / nullがファイル記述子へのシンボリックリンクになり得るが、操作が読み取りまたは書き込みであることを判別するコードメカニズムを追加し、それが読み取られた場合、実際に/ dev / actualnullから個別に作成されるアイデアを考えますmknodおよび書き込みの場合は、呼び出し元のプログラムを書き留め、書き込みに/ dev / nullを使用するプログラムを分析するためにログ/カウントを試みます。しかし、これはパフォーマンスの面でかなりの費用がかかりますが、私は思う。とにかくほとんどのシェルプログラムやコードはリダイレクトを使用するため、実用的ではないと思います。inotifyを使用して/ dev / nullの使用状況を監視できますか?または、1:3デバイスを処理するカーネルコードを書き直し、再度コンパイルして再インストールします。


2
まだいくつかの問題があります。私はこのようなことを試みました(カーネル内ではなく、別のファイルからの読み取りと/dev/nullデーモンからの制御を許可することで透過的に)、sshdまだ文句を言って起動しませんでした。
クリスダウン

デーモンから制御する/ dev / nullのhmm..interesting。ほとんどのプログラムは、/ dev / nullの重要性とセマンティクスをシステムに任せるだけの別のファイルとして/ dev / nullを使用したいと思うと思います。
ニキルマレー

まあ、sshd(Debianのスクイーズためにパッケージとして、少なくとも、)と不平を言うsshd: cannot create /dev/nullことの何が、最も一般的な実装であれば。
クリスダウン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.