¿Supervisar lo que se envía a / dev / null?

19

Solo por diversión:
¿hay alguna forma de monitorear / capturar / volcar lo que se está escribiendo /dev/null?

En Debian o FreeBSD, si es importante, cualquier otra solución específica del sistema operativo también es bienvenida.

Ali
fuente
3
Posible, pero como las respuestas y los comentarios describen es / muy / mucho, no es una buena idea.
Shadur
2
@Shadur: Puede haber malas soluciones, pero eso no hace que la idea sea poco interesante o mala.
jlliagre
1
De hecho, acabo de encontrar esta pregunta porque estaba considerando lo que /dev/nullpodría hacer un análisis del contenido de muchos mensajes capturados . No quisiera investigar yo mismo, pero me encantaría leer los resultados. (Hay muy probablemente habría algunas cuestiones éticas en la "mirando a través de la basura de la gente" en esencia, pero el concepto es interesante, no obstante.)
beporter

Respuestas:

12

Hacer /dev/nulluna tubería con nombre es probablemente la forma más fácil. Tenga en cuenta que algunos programas ( sshdpor ejemplo) actuarán de manera anormal o no se ejecutarán cuando descubran que no es un archivo especial (o pueden leerlo /dev/null, esperando que regrese 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

Esto debería funcionar en todas las distribuciones de Linux y en todos los BSD principales.

Chris Down
fuente
1
Una cosa a tener en cuenta es que si tailfalla, muchos programas pueden fallar porque el búfer de la tubería está lleno.
Arcege
44
A los programas que leen /dev/nullno les va a gustar esto.
Gilles 'SO- deja de ser malvado'
@Gilles - De hecho, de ahí mi nota.
Chris Down
3
@ Ali Sí. No magices un principio rector en la filosofía de UNIX.
phihag
44
Ejem /dev/null es mágico, mknod /dev/null c 1 3es la fórmula mágica para invocarlo. (Y necesitas superpoderes para eso ...)
Stéphane Gimenez
6

Una vez descubrí por las malas que / dev / null no tiene que ser un archivo de desarrollo especial. Hace mucho tiempo, se eliminó / dev / null en un sistema Ultrix en el trabajo, por lo que la próxima vez que un programa redirigió a / dev / null, terminó siendo un archivo normal lleno de la salida de ese programa. (Creo que no era "tal archivo o directorio", lo que significaba que cuando estábamos tratando de averiguar qué estaba pasando, lo hacíamos cat /dev/nully nos decían lo no such file or directoryque nos confundía muchísimo).

Entonces, mi sugerencia sería reemplazarlo con una tubería con nombre y luego adjuntar un programa a la tubería que lo leería y lo monitorearía.

Paul Tomblin
fuente
44
Muchos programas también se basan en /dev/nulldevolver siempre 0 bytes en un read ( cat /dev/null > foo). Tener /dev/nullun archivo regular con contenido rompería esta expectativa.
Arcege
1
Sí, así lo descubrimos. Los programas no esperaban ninguna entrada y recibían grandes cantidades de información, más / dev / se estaba llenando.
Paul Tomblin
1

Pienso en una idea en la que / dev / null puede ser un enlace simbólico a un descriptor de archivo pero con un mecanismo de agregar código para determinar que la operación es de lectura o escritura y luego, si se lee, debería leer desde / dev / actualnull creado por separado con mknod y si está escrito, tome nota del programa de invocación e intente iniciar sesión / contar para analizar los programas que usan / dev / null para escribir. Sin embargo, supongo que esto va a costar mucho en términos de rendimiento. Supongo que no es práctico ya que la mayoría de los programas de shell o código usan la redirección de todos modos. ¿Puede ser inotify podría usarse para monitorear el uso de / dev / null? o reescriba el código del núcleo que maneja los dispositivos 1: 3, compile y reinstale nuevamente, experimentable.

Nikhil Mulley
fuente
2
Todavía hay algunos problemas, intenté hacer algo como esto (no en el núcleo, sino transparentemente al permitir leer desde otro archivo y controlar /dev/nulldesde un demonio), y sshdtodavía me quejé y no comencé.
Chris Down
hmm..interesante en / dev / null controlando desde un demonio. Creo que la mayoría de los programas solo querrían usar / dev / null como un archivo más, dejando la importancia y la semántica de / dev / null para el sistema.
Nikhil Mulley
Bueno, sshd(al menos, como está empaquetado para Debian Squeeze) se queja sshd: cannot create /dev/nullsi es cualquier cosa menos la implementación más común.
Chris Down