Descubrí que si transfiero una gran cantidad de datos entre dos procesos a través de una tubería, linux creará un archivo temporal en el directorio / tmp. Si la operación de canalización tiene éxito, el sistema operativo eliminará automáticamente el archivo temporal correspondiente. Pero si la operación falla, el archivo tmp permanece allí.
Por alguna razón, no quiero que el usuario tenga la oportunidad de obtener los datos que transferí a través de la tubería, por lo que no quiero que quede nada en el disco duro, incluso si mi programa falla. ¿Cómo puedo hacer esto?
sender > filename
entoncesreceiver < filename
. Verificaría el archivo tmp durante ambas operaciones, para ver si el remitente o el receptor lo están haciendo.mkfifo
tubería creada nunca crea ningún almacenamiento intermedio (¡en absoluto!) Y nunca crea archivos.Respuestas:
las tuberías no almacenan datos en el disco. / bin / echo foo | grep bar no crea ningún archivo. intente
strace -f sh -c '/bin/echo foo | grep bar'
ver todas las llamadas al sistema realizadas por un shell al ejecutar una canalización.echo
es un shell incorporado, por lo que sugerí/bin/echo
hacer que el shell ejecute un ejecutable./tmp
no tiene que estar en el disco. Se puede montar en tmpfs (es decir, respaldado por memoria virtual). Tenga en cuenta que un reinicio se vaciará/tmp
en ese caso, así que úselo/var/tmp
para cualquier cosa que desee dejar.Si lo que está haciendo es poner datos en un archivo, entonces no está usando una tubería. Si el archivo es un Fifo, no un archivo normal, entonces es solo una cita con nombre y no contiene datos. Use ls -l para averiguarlo.
Y tenga en cuenta que si espera evitar que los usuarios vean lo que pasa a través de las tuberías en los procesos que poseen, es prácticamente SOL, porque
strace
puede inspeccionar todo lo que hace un proceso que interactúa con cualquier cosa fuera del proceso, excepto leer / escribir mmapped shared memoria.ltrace
Es aún más invasivo. Si su programa se ejecutará en sistemas donde el usuario local tiene root, no puede detenerlos en absoluto. En Unix, root puede hacer cualquier cosa y tiene herramientas poderosas para este propósito.fuente
Una tubería verdadera es un bloque de memoria en el núcleo, un búfer que algunos procesos leen / escriben. No crea archivos en ningún lado.
Algunas aplicaciones tienen opciones que cambian entre usar tuberías (más rápido, sin golpear el disco, toma un poco más de memoria) y usar archivos temporales (toma un poco menos de memoria, le permite ver los archivos temporales, un toque más lento).
gcc
es una de esas aplicaciones, aunque probablemente sean otras.fuente
Hack sucio: cifre los datos antes de enviarlos y descifrarlos al recibirlos si puede cambiar ambos procesos ...
fuente