Me gustaría crear un /dev/null
directorio " " (o un directorio "agujero negro") para que los archivos escritos en él no se escriban realmente, sino que simplemente desaparezcan.
Tengo una aplicación que escribe archivos temporales grandes en un directorio. No tengo control sobre el nombre de los archivos y realmente no me importa el contenido de estos archivos. Podría escribir un script que periódicamente registra estos archivos, pero los archivos se escriben muy rápidamente y llenan mi disco. Estoy buscando algo más inteligente. Quiero que la aplicación "piense" que está escribiendo estos archivos, cuando de hecho, las escrituras simplemente se descartan en el otro extremo.
También vea este viejo hilo relacionado.
filesystems
directory
io-redirection
dogbane
fuente
fuente
Respuestas:
Esto no es compatible de fábrica en ningún Unix que conozca, pero puedes hacer casi cualquier cosa con FUSE . Hay al menos una implementación de nullfs¹ , un sistema de archivos donde cada archivo existe y se comporta como
/dev/null
(esta no es la única implementación que he visto).¹ No debe confundirse con los * BSD nullfs , que es análogo a bindfs .
fuente
g++ -Wall -o nullfs nullfs.c++ `pkg-config fuse --cflags --libs`
funcionó para mí.Otro enfoque sería un contenedor LD_PRELOAD; básicamente una pequeña biblioteca compartida que se carga antes de libc.so, e intercepta las llamadas para "abrir" con algo que verifica la posible ruta del archivo y sustituye "/ dev / null" si estuviera en el directorio de destino.
Esto tiene la ventaja de estar (a) completamente en el espacio de usuario: no se requiere piratería de kernel; y (b) solo afecta a la solicitud única errónea.
Un ejemplo simple se encuentra en http://www.noah.org/wiki/LD_PRELOAD_notes , pero en su caso querrá interceptar las llamadas del sistema "abierto" y "creativo".
fuente
int 0x80
/syscall
/sysenter
/ lo que sea.Si el programa es tan estúpido como para no permitirle desactivar esos registros, ¿es posible que tampoco compruebe si hay errores después de abrir un archivo de registro? Intentaría montar un sistema de archivos ficticio de solo lectura (por ejemplo, usando
mount -o loop
).fuente
Dices que eliminar los archivos periódicamente con un script no es lo suficientemente rápido. ¿Podría vivir con un disparador que elimina un archivo temporal cada vez que su aplicación termina de escribir y lo cierra? Si es así, puede hacer uso de la API "inotify".
(Ver http://en.wikipedia.org/wiki/Inotify y https://github.com/rvoicilas/inotify-tools/wiki/ )
fuente
He creado un módulo de kernel basado en el ejemplo de ramfs en el kernel de linux, es básicamente un sistema de archivos blackhole llamado nullfsvfs. La implementación del sistema FUSE necesita copiar datos del usuario al espacio del núcleo y es bastante lenta, en comparación con una implementación directa como módulo del núcleo. Ver:
https://github.com/abbbi/nullfsvfs
fuente
Simplemente enlace simbólicamente ese directorio a
/dev/null
/dev/null
, no tiene que ser un directorio. Si el programa intenta escribir en~/.logs/log1.dump
, todavía entra directamente/dev/null
.Hago esto para el caché de Google Chrome porque después de un tiempo se vuelve tan grande que Chrome tardará minutos en comenzar.
fuente
echo hello > ~/.logs/log1.dump
da~/.logs/log1.dump: Not a directory
. Sin embargo,echo hello > ~/.logs
funciona porque .logs es un archivo.$ ln -s /dev/null dev-null; touch dev-null/zzz
me datouch: cannot touch 'dev-null/zzz': Not a directory