Я хотел бы создать /dev/null
каталог " " (или каталог "черной дыры") так, чтобы любые файлы, записанные в него, на самом деле не записывались, а просто исчезали.
У меня есть приложение, которое записывает большие временные файлы в каталог. У меня нет контроля над именами файлов, и меня не волнует содержание этих файлов. Я мог бы написать сценарий, который периодически забивает эти файлы, но файлы записываются очень быстро и заполняют мой диск. Я ищу что-то умнее. Я хочу, чтобы приложение «думало», что оно записывает эти файлы, тогда как на самом деле записи просто отбрасываются на другом конце.
Также посмотрите эту старую связанную тему.
filesystems
directory
io-redirection
кендырь
источник
источник
Ответы:
Это не поддерживается "из коробки" на любом Unix, который я знаю, но вы можете делать практически все с FUSE . Существует по крайней мере одна реализация nullfs¹ , файловая система, в которой каждый файл существует и ведет себя как
/dev/null
(это не единственная реализация, которую я когда-либо видел).¹ Не путать с * BSD nullfs , который аналогичен bindfs .
источник
g++ -Wall -o nullfs nullfs.c++ `pkg-config fuse --cflags --libs`
работал для меня.Другой подход - обертка LD_PRELOAD; в основном небольшая разделяемая библиотека, которая загружается до libc.so и перехватывает вызовы «open» с чем-то, что проверяет предполагаемый путь к файлу и подставляет «/ dev / null», если он будет в целевом каталоге.
Это имеет то преимущество, что (а) полностью в пользовательском пространстве - взлом ядра не требуется; и (б) влияет только на одну ошибочную заявку.
Простой пример на http://www.noah.org/wiki/LD_PRELOAD_notes , но в вашем случае вы захотите перехватить системные вызовы "open" и "creat".
источник
int 0x80
/syscall
/sysenter
/ что-либо еще.Если программа настолько глупа, что не позволяет отключить эти журналы, может быть, она также не проверяет ошибки после открытия файла журнала? Я бы попробовал смонтировать фиктивную файловую систему только для чтения (например, используя
mount -o loop
.)источник
Вы говорите, что удаление файлов периодически с помощью скрипта не достаточно быстро. Не могли бы вы жить с триггером, который удаляет временный файл каждый раз, когда ваше приложение заканчивает запись и закрывает его? Если это так, вы можете использовать API inotify.
(См. Http://en.wikipedia.org/wiki/Inotify и https://github.com/rvoicilas/inotify-tools/wiki/ )
источник
я создал модуль ядра, основанный на примере ramfs в ядре linux, это в основном файловая система blackhole под названием nullfsvfs. Реализация системы FUSE должна копировать данные из пользователя в пространство ядра и является довольно медленной по сравнению с прямой реализацией в качестве модуля ядра. Видеть:
https://github.com/abbbi/nullfsvfs
источник
Просто символическую ссылку на этот каталог
/dev/null
/dev/null
, не должен быть каталогом. Если программа пытается выполнить запись~/.logs/log1.dump
, она все равно переходит в/dev/null
.Я делаю это для кеша Google Chrome, потому что через некоторое время он становится настолько большим, что запуск Chrome займет несколько минут.
источник
echo hello > ~/.logs/log1.dump
дает~/.logs/log1.dump: Not a directory
. Тем не менее,echo hello > ~/.logs
работает, потому что .logs это файл.$ ln -s /dev/null dev-null; touch dev-null/zzz
дает мнеtouch: cannot touch 'dev-null/zzz': Not a directory