Временное хранилище файлов – это совокупность механизмов операционной системы (ОС) и прикладного ПО для размещения промежуточных данных, не предназначенных для долговременного хранения: кэшей, черновиков, временных копий при обработке, промежуточных результатов вычислений, .tmp-файлов, временных каталогов сборки и т. п. Грамотное применение временных хранилищ повышает производительность, снижает износ постоянных носителей, уменьшает риск потери данных при сбоях и упрощает реализацию атомарных операций записи. Для подготовки к ЕГЭ эта тема важна в части: устройства ОС и файловых систем, управления ресурсами, безопасности, практических сценариев обработки данных и корректной работы с файлами.
Назначение и свойства временного хранилища
Назначение: хранение данных, актуальность которых ограничена временем выполнения процесса/задачи.
Свойства: непостоянство (данные могут автоматически удаляться), близость к вычислениям (часто на локальном носителе или в ОЗУ), потенциальная общедоступность (общественные каталоги ОС).
Критический принцип: временные данные не включаются в резервное копирование и не рассматриваются как источник истины.
Размещение во временных каталогах в популярных ОС
Windows: переменные окружения %TEMP% и %TMP% (обычно C:\Users\<Имя>\AppData\Local\Temp), системный каталог C:\Windows\Temp. Программно: WinAPI GetTempPath, GetTempFileName; .NET: Path.GetTempPath(), Path.GetTempFileName().
Linux/Unix-подобные: переменная TMPDIR (если не задана – по умолчанию /tmp); каталог /var/tmp (по стандарту FHS сохраняется между перезагрузками чаще, чем /tmp). В ряде систем /tmp монтируется как tmpfs (RAM-подобное хранилище), что ускоряет операции, но делает их зависимыми от объёма ОЗУ.
Безопасность общего каталога /tmp: это «world-writable» каталог со sticky-bit (права вида drwxrwxrwt), который запрещает удаление файлов не-владельцами, несмотря на общую запись.
Классы временных данных
Кэш: ускорение повторного доступа (браузеры, IDE, пакетные менеджеры).
Черновики/автосохранения: редакторы документов/мультимедиа для восстановления после сбоя.
Промежуточные артефакты: компиляция, сортировка внешними алгоритмами, временные индексы.
Вспомогательные файлы транзакций: «журналы» (journaling), lock-файлы, маркеры выполнения.
Атомарные записи: временный файл «рядом» с целевым и последующий атомарный rename/replace.
Атомарность и целостность
Паттерн атомарного обновления:
запишите данные во временный файл в том же каталоге,
синхронизируйте запись (fsync/Flush),
выполните атомарное переименование (POSIX rename в пределах одного тома; Windows MoveFileEx с MOVEFILE_REPLACE_EXISTING|MOVEFILE_WRITE_THROUGH).
Плюс: при сбое либо старый файл остаётся целым, либо уже лежит новый; «битой середины» нет.
Минус: требуется достаточное место для дублирования на время обновления.
Типовые угрозы
Предсказуемые имена временных файлов ⇒ подмена/перехват (race conditions, TOCTOU).
Хранение секретов в общедоступных каталогах (/tmp) ⇒ чтение/утечка.
Неправильные права на создаваемые файлы ⇒ несанкционированный доступ или удаление.
Защитные меры (правила безопасности)
Используйте безопасные API создания временных файлов/каталогов:
POSIX/C: mkstemp() / mkdtemp() (создаёт и открывает с безопасными правами).
Python: tempfile.NamedTemporaryFile, TemporaryDirectory.
Java: Files.createTempFile/Directory (указывайте атрибуты/ACL при необходимости).
Windows: GetTempFileName + корректные дескрипторы/ACL; при необходимости флаг «delete on close».
Ограничивайте права: маска umask 077 (только владелец), управляемые ACL/SDDL в Windows.
Не храните секреты в общих каталогах без шифрования; лучше – приватный каталог пользователя.
Проверяйте свободное место и не полагайтесь на долговечность содержимого /tmp.
Управление жизненным циклом и очисткой
Политики очистки: TTL (время жизни), LRU (выдавливание редко используемых), автоматическая очистка при старте/выключении, регулярные задачи (systemd-tmpfiles, cron, «Storage Sense» в Windows).
Разделение /tmp и /var/tmp: краткоживущие против «переживающих перезагрузку» (зависит от дистрибутива и политики).
Контейнеры и облако: эпемерные файловые системы (данные исчезают при пересоздании контейнера).
Квоты/лимиты: защита от «засорения» носителей одним пользователем/процессом.
Производительность и надёжность
tmpfs/ramdisk: быстрые операции ввода-вывода, но ограничены ОЗУ (риск OOM/свопинга).
SSD и износ: большие кэши/промежуточные файлы – разумная ротация и очистка.
Параллелизм: отдельные временные каталоги на поток/процесс, lock-файлы при разделяемых ресурсах.

Выбирайте правильное место: TMPDIR/%TEMP% для частных данных, /var/tmp для данных, переживающих перезапуск (если политика это допускает).
Создавайте безопасно: только через функции, исключающие гонки (mkstemp, createTempFile и т. п.).
Ограничивайте доступ: минимум необходимых прав (принцип наименьших привилегий).
Проектируйте атомарно: временный файл → синхронизация → атомарная замена.
Управляйте жизненным циклом: явное удаление, TTL, периодическая очистка, мониторинг места.
Не храните чувствительные данные без шифрования и приватных прав.
Учитывайте платформу: особенности tmpfs, ACL/NTFS, квоты, контейнерную эпемерность.
Теория ОС и ФС: иерархия каталогов, права доступа, переменные окружения, пути.
Алгоритмы работы с файлами: запись-чтение, временные копии, атомарное обновление.
Информационная безопасность: мінімизация прав, защита от гонок, приватность.
Практика: анализ условий задач, где требуется корректная обработка входных/выходных данных при ограничениях на память/диск, моделирование жизненного цикла временных файлов.
Упражнение 1. Определение корректного каталога для временных данных
Задание. Для трёх ситуаций выберите оптимальное размещение временных данных и обоснуйте:
A) Веб-приложение сортирует большие файлы по внешнему алгоритму (несколько часов, возможен перезапуск системы).
B) Консольная утилита генерирует отчёт за 2–3 секунды и удаляет промежуточные файлы сразу.
C) Микросервис в контейнере создаёт промежуточные файлы на время запроса (десятки миллисекунд).
Разбор (примерный ответ).
A) /var/tmp (Linux) или приватный каталог в профиле сервиса: данные должны переживать перезапуск.
B) TMPDIR//tmp (или %TEMP% в Windows): короткая жизнь, важна скорость.
C) Эпемерное файловое хранилище контейнера (обычно /tmp или tmpfs), гарантировать явное удаление по завершении запроса.
Упражнение 2. Проектирование атомарного сохранения файла
Задание. Опишите пошаговый алгоритм атомарного обновления файла report.csv в каталоге data/ так, чтобы при любом сбое на диске или в приложении файл оставался в согласованном состоянии.
Разбор (эталонный сценарий).
Создать временный файл data/.report.csv.tmpXXXX в том же каталоге.
Записать все данные, вызвать синхронизацию буферов (POSIX fsync(fd), затем fsync каталога; Windows – эквивалентные Flush/WriteThrough).
Выполнить атомарное переименование на data/report.csv (заменив старый).
В случае исключений – удалить временный файл.
Пояснение. Атомарность rename внутри одного тома гарантирует отсутствие «битого» состояния.
Упражнение 3. Безопасное создание временного файла (защита от гонок)
Задание. Укажите безопасный способ создания временного файла и объясните, почему использование предсказуемого имени (например, temp_123.tmp) опасно.
Разбор.
Безопасные API: mkstemp()/mkdtemp() (POSIX), tempfile.NamedTemporaryFile (Python), Files.createTempFile (Java), GetTempFileName (WinAPI) с корректными атрибутами/ACL.
Опасность предсказуемых имён: атакующий может заранее создать файл-подмену (symlink/жёсткая ссылка), перехватить содержимое или заставить процесс перезаписать чужие данные (TOCTOU, race).
Защита: генерация уникального имени ядром/библиотекой и немедленное открытие файла с эксклюзивным доступом.
Упражнение 4. Политики очистки и оценка риска
Задание. Служба сохраняет промежуточные результаты в /tmp на срок до 48 часов; сервер перезагружается еженедельно, в системе настроен tmpfs на /tmp. Оцените риски потери данных и предложите корректировку.
Разбор.
Риск: /tmp на tmpfs – данные исчезнут при перезагрузке/OOM; 48 часов в /tmp ненадёжны.
Корректировка: переместить долговременные промежуточные данные в /var/tmp (или приватный каталог на диске), ввести TTL-очистку там; в /tmp хранить только краткоживущие артефакты.
Упражнение 5. Права и приватность временных данных
Задание. Программа обрабатывает персональные данные и на этапе вычислений пишет во временный файл. Сформулируйте требования к правам и расположению, чтобы исключить несанкционированный доступ.
Разбор.
Размещение: приватный каталог пользователя/сервиса, не общий /tmp; при необходимости – шифрованный том/каталог.
Права: только владелец (POSIX: umask 077, явные chmod 600; Windows: ограничивающий ACL).
Жизненный цикл: удаление сразу после использования; журналировать только метаданные без чувствительного содержимого; по возможности использовать шифрование «на диске».
Временное хранилище – фундаментальный инструмент ОС и приложений для ускорения операций, повышения отказоустойчивости и упрощения алгоритмов записи. Его грамотное применение опирается на три столпа: корректный выбор размещения, безопасное создание/права и управление жизненным циклом с атомарностью и очисткой. Для задач ЕГЭ понимание этих принципов усиливает компетенции в темах «Операционные системы», «Файловые системы», «Информационная безопасность», «Алгоритмы обработки данных», что помогает уверенно разбирать практические сценарии и избегать типичных ошибок при работе с файлами.