Überwachen, was an / dev / null gesendet wird?

19

Nur zum Spaß:
Gibt es eine Möglichkeit zum Überwachen / Erfassen / Speichern von Inhalten, auf die geschrieben wird /dev/null?

Wenn es um Debian oder FreeBSD geht, sind auch andere betriebssystemspezifische Lösungen willkommen.

Ali
quelle
3
Möglich, aber wie die Antworten und Kommentare beschreiben, ist es / sehr / sehr keine gute Idee.
Shadur
2
@ Shadur: Es mag schlechte Lösungen geben, aber das macht die Idee nicht uninteressant oder eine schlechte Idee.
Juli
1
Tatsächlich habe ich diese Frage gerade gefunden, weil ich darüber nachdachte, wie sich eine Analyse des Inhalts vieler erfasster /dev/nulls ergeben könnte. Ich würde nicht selbst recherchieren wollen, aber ich würde gerne die Ergebnisse lesen. (Es würde sehr wahrscheinlich ethische Probleme beim "
Durchsuchen

Antworten:

12

Das Erstellen /dev/nulleiner Named Pipe ist wahrscheinlich der einfachste Weg. Seien Sie gewarnt, dass einige Programme ( sshdz. B.) nicht normal funktionieren oder nicht ausgeführt werden können, wenn sie feststellen, dass es sich nicht um eine spezielle Datei handelt (oder sie lesen möglicherweise aus /dev/nullund erwarten, dass sie zurückkehrt 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

Dies sollte unter allen Linux-Distributionen und allen wichtigen BSDs funktionieren.

Chris Down
quelle
1
Eine zu beachtende Sache ist, dass, wenn das tailfehlschlägt, viele Programme möglicherweise fehlschlagen, weil der Puffer der Pipe voll ist.
Arcege
4
Programme, aus denen gelesen wird, /dev/nullwerden das nicht mögen.
Gilles 'SO- hör auf böse zu sein'
@ Gilles - In der Tat, daher mein Hinweis.
Chris Down
3
@Ali Ja. No magicist ein Leitprinzip in der UNIX-Philosophie.
Phihag
4
Ahem /dev/null ist Magie, mknod /dev/null c 1 3ist die Zauberformel, um es aufzurufen. (Und dafür braucht man Superkräfte…)
Stéphane Gimenez
6

Ich fand einmal auf die harte Tour , die / dev / null nicht funktioniert haben eine spezielle dev Datei sein. Vor langer Zeit wurde / dev / null auf einem Ultrix-System gelöscht. Wenn ein Programm das nächste Mal nach / dev / null umgeleitet wird, ist es eine normale Datei mit der Ausgabe dieses Programms. (Ich denke, es war 'keine solche Datei oder kein solches Verzeichnis', was bedeutete, dass wir, als wir versuchten herauszufinden, was vor sich ging, tun cat /dev/nullund erfahren würden, no such file or directorywas uns verdammt noch mal verwirrte.)

Mein Vorschlag wäre also, es durch eine Named Pipe zu ersetzen und dann ein Programm an die Pipe anzuhängen, das es liest und überwacht.

Paul Tomblin
quelle
4
Viele Programme verlassen sich auch darauf, bei /dev/nulleinem read ( cat /dev/null > foo) immer 0 Bytes zurückzugeben . Nachdem /dev/nulleine normale Datei mit dem Inhalt sein, würde diese Erwartung brechen.
Arcege
1
Ja, so haben wir es entdeckt. Die Programme hatten keine Eingabe erwartet und hatten Probleme damit, und / dev / wurde aufgefüllt.
Paul Tomblin
1

Ich denke an eine Idee, wo / dev / null ein Symlink zu einem Dateideskriptor sein kann, aber mit Add-Code-Mechanismus, um zu bestimmen, dass die Operation gelesen oder geschrieben wird, und wenn es dann gelesen wird, sollte es tatsächlich aus / dev / actualnull lesen, das separat mit erstellt wurde mknod und wenn es write ist, notieren Sie sich das aufrufende Programm und versuchen Sie zu protokollieren / zählen, um die Programme zu analysieren, die / dev / null zum Schreiben verwenden. Das wird allerdings eine Menge Leistung kosten, nehme ich an. Ich denke, es ist nicht praktisch, da die meisten Shell-Programme oder der Code sowieso die Umleitung verwenden. Könnte inotify verwendet werden, um die Verwendung von / dev / null zu überwachen? oder schreiben Sie den Kernel-Code, der 1: 3-Geräte handhabt, neu, kompilieren und installieren Sie ihn erneut, experimentierbar.

Nikhil Mulley
quelle
2
Es gibt immer noch einige Probleme. Ich habe versucht, so etwas zu tun (nicht im Kernel, aber transparent, indem ich es erlaube, aus einer anderen Datei zu lesen und /dev/nullvon einem Daemon aus zu steuern ). Ich habe mich sshdimmer noch beschwert und wollte nicht starten.
Chris Down
hmm..interessant auf / dev / null Steuerung von einem Daemon. Ich denke, die meisten Programme möchten / dev / null nur als eine weitere Datei verwenden, wobei die Bedeutung und Semantik von / dev / null dem System überlassen bleibt.
Nikhil Mulley
Nun, sshd(zumindest, wie für Debian Squeeze verpackt) beschwert sich, sshd: cannot create /dev/nullwenn es sich nicht um die gängigste Implementierung handelt.
Chris Down