LinuxRuLinux без лишней теории
Файловая система

Каталог /tmp в Linux: очистка, место на диске и безопасность

Редакция LinuxRu7 мин чтенияИнструкции

Каталог /tmp в Linux хранит временные файлы программ, и в 2026 году в Fedora, Arch и Debian 13 он по умолчанию живёт в оперативной памяти, а старые файлы удаляет таймер systemd. Ниже - как проверить свою схему, безопасно почистить /tmp, ограничить его размер и восстановить права, если каталог удалён.

Каталог /tmp в Linux: очистка, место на диске и безопасность
Содержание
  1. Зачем нужен /tmp
  2. /tmp и /var/tmp
  3. По дистрибутивам
  4. Место и память
  5. Очистка
  6. Сроки хранения
  7. Безопасность
  8. Если удалили /tmp
  9. Частые вопросы

Зачем нужен каталог /tmp

Каталог /tmp - общее место для временных файлов. Туда пишут распаковщики архивов, браузеры при загрузке, компиляторы, установщики, офисные пакеты при автосохранении, скрипты администратора. По стандарту иерархии файловой системы (FHS) программа не должна рассчитывать, что её файл в /tmp переживёт перезагрузку или даже следующий запуск.

Схема стандартных каталогов корневой файловой системы Linux, включая tmp и var
Место /tmp и /var/tmp в дереве каталогов Linux

В 2021 году типичная домашняя система держала /tmp на диске и чистила его при загрузке. В 2026 году картина другая: в Fedora, Arch и Debian 13 каталог по умолчанию живёт в оперативной памяти (tmpfs), а старые файлы удаляет таймер systemd. Поэтому вопрос может ли /tmp переполниться теперь звучит как сколько памяти он может съесть.

Узнать, как устроено у вас, можно двумя командами:

findmnt /tmp
df -h /tmp

Если в столбце FSTYPE стоит tmpfs, каталог в памяти. Если команда findmnt ничего не вывела, /tmp лежит на корневом разделе обычной папкой.

/tmp, /var/tmp и другие временные каталоги

Главная разница - в сроке жизни. /tmp для того, что можно потерять в любой момент. /var/tmp для временных данных, которые должны пережить перезагрузку: например, промежуточные файлы долгой сборки или кэш установщика. Есть ещё два места, о которых в старой статье не говорилось.

КаталогГде хранитсяПерезагрузкаАвтоочистка (systemd)Для чего
/tmpRAM (tmpfs) или дискобычно очищаетсяфайлы старше 10 днейкороткоживущие файлы любых программ
/var/tmpдисксохраняетсяфайлы старше 30 днейвременные данные, которые нужны после перезагрузки
/run/user/UIDRAMочищается, удаляется при выходенет, живёт с сеансомсокеты и служебные файлы сеанса пользователя
/dev/shmRAMочищаетсянетразделяемая память между процессами

Сроки 10 и 30 дней берутся из файла /usr/lib/tmpfiles.d/tmp.conf, который поставляет systemd. Отсчёт идёт от последнего обращения к файлу, а не от создания, так что файл, которым программа регулярно пользуется, не исчезнет. В отдельных дистрибутивах значения могут быть переопределены, проверяйте свой файл:

cat /usr/lib/tmpfiles.d/tmp.conf
ls /etc/tmpfiles.d/

Как устроен /tmp в Debian 13, Ubuntu, Fedora и Arch

  • Debian 13 перевёл /tmp в tmpfs на новых установках и включил чистку: в /tmp удаляется всё старше 10 дней, в /var/tmp старше 30. На системах, обновлённых с Debian 12, tmpfs включается после первой перезагрузки, а для чистки обновление создаёт файл /etc/tmpfiles.d/tmp.conf со старым поведением. Удалите его, если хотите новую схему.
  • Fedora держит /tmp в памяти уже больше десяти лет, Fedora 44 здесь ничего не меняла.
  • Arch Linux использует юнит tmp.mount из systemd, то есть tmpfs по умолчанию.
  • Ubuntu и Linux Mint в разных выпусках вели себя по-разному, а при обновлении с 24.04 до 26.04 LTS поведение зависит от того, как была сделана установка. Не гадайте, проверьте findmnt /tmp и состояние юнита.
systemctl status tmp.mount
systemctl list-timers systemd-tmpfiles-clean.timer

Таймер systemd-tmpfiles-clean.timer запускается вскоре после загрузки и затем раз в сутки. Именно он удаляет старые файлы на серверах, которые не перезагружаются месяцами. Как читать статусы юнитов, разобрано в статье про systemctl.

Может ли /tmp заполниться и сколько памяти он берёт

Может, и довольно легко. Распаковка большого архива, сборка ядра, видеоредактор или загрузка образа диска способны за минуты положить в /tmp десятки гигабайт. Если каталог на диске, кончится место на корневом разделе. Если в tmpfs, программа получит ошибку No space left on device, хотя на SSD свободно полтерабайта.

По умолчанию tmpfs под /tmp ограничен половиной оперативной памяти. Память занимается только реально записанными файлами, пустой tmpfs ничего не стоит. При нехватке RAM содержимое tmpfs может уйти в swap, так что связка с zram и swap тоже влияет на поведение.

Посмотреть, кто занял место:

sudo du -xh --max-depth=1 /tmp | sort -h | tail -n 15

Изменить предел для tmpfs проще всего через дополнение к юниту:

sudo systemctl edit tmp.mount
# в открывшемся редакторе:
[Mount]
Options=mode=1777,strictatime,nosuid,nodev,size=4G,nr_inodes=1m

После перезагрузки проверьте df -h /tmp. Если вы хотите вернуть /tmp на диск, например на машине с 8 ГБ памяти, где часто распаковываются огромные архивы, юнит маскируется:

sudo systemctl mask tmp.mount
sudo reboot

Откат - sudo systemctl unmask tmp.mount и снова перезагрузка.

Для разовой тяжёлой работы не обязательно перенастраивать систему. Многие программы уважают переменную TMPDIR: TMPDIR=~/tmp-big tar -xf huge.tar или сборка через TMPDIR=/var/tmp make. Так временные файлы лягут на диск, а /tmp в памяти останется свободным.

Как безопасно очистить /tmp вручную

Команда sudo rm -rf /tmp/* на работающей системе - плохая идея. В /tmp лежат сокеты X11 и Wayland, блокировки, файлы открытых программ. Удалите их, и рабочий стол может перестать запускать новые окна, а программа потеряет документ, который сейчас редактируется.

Правильные варианты по возрастанию решительности:

  1. Перезагрузка. Если /tmp в tmpfs, он начнётся с чистого листа.
  2. Плановая чистка по правилам systemd, ровно то, что делает таймер:
    sudo systemd-tmpfiles --clean
  3. Удаление своих старых файлов, без чужих сокетов и без перехода на другие файловые системы:
    find /tmp -mindepth 1 -user "$USER" -type f -atime +3 -print
    # проверили список, теперь удаляем
    find /tmp -mindepth 1 -user "$USER" -type f -atime +3 -delete

Бывает, что файл уже удалён, а место не освободилось. Значит, его держит открытым какой-то процесс. Найти его помогает lsof:

sudo lsof +L1 | grep /tmp

Перезапустите найденную программу, и место вернётся. Если /tmp не главная проблема, а диск всё равно забит, пройдитесь по списку из статьи как освободить место на диске, там же про кэш пакетов и журналы.

Как изменить срок хранения временных файлов

Правила systemd-tmpfiles переопределяются файлом с тем же именем в /etc/tmpfiles.d/. Системный файл в /usr/lib трогать не нужно, его перезапишет обновление.

sudo cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/tmp.conf
sudoedit /etc/tmpfiles.d/tmp.conf

Строки в файле выглядят так: тип, путь, права, владелец, группа, возраст. Например, чтобы чистить /tmp через три дня, а /var/tmp через две недели:

q /tmp 1777 root root 3d
q /var/tmp 1777 root root 14d

Прочерк вместо возраста отключает автоудаление для каталога. Проверить синтаксис без реального удаления можно командой sudo systemd-tmpfiles --cat-config | less, она покажет итоговую конфигурацию со всеми переопределениями. Формат подробно описан в man tmpfiles.d на freedesktop.org.

Безопасность: sticky bit, PrivateTmp и noexec

В /tmp пишут все пользователи, поэтому у каталога особые права 1777. Единица в начале - sticky bit: писать может каждый, но удалить или переименовать файл может только его владелец. В выводе ls -ld /tmp это видно по букве t в конце: drwxrwxrwt. Подробнее о битах прав рассказано в статье про chmod и chown.

Ещё несколько механизмов, которые работают в современных системах:

  • Защита ссылок. Параметры ядра fs.protected_symlinks и fs.protected_regular не дают подсунуть чужую символическую ссылку или файл в общем каталоге. Проверка: sysctl fs.protected_symlinks fs.protected_regular, обе должны быть больше нуля.
  • PrivateTmp. Многие службы systemd получают собственный изолированный /tmp. Поэтому файл, который пишет веб-сервер, вы не найдёте в общем /tmp: он лежит в каталоге вида /tmp/systemd-private-*. Снапы делают похожее через /tmp/snap-private-tmp.
  • Скрипты. Не создавайте файлы с предсказуемыми именами вроде /tmp/backup.txt. Используйте mktemp: f=$(mktemp) для файла, d=$(mktemp -d) для каталога.
  • noexec. На серверах /tmp иногда монтируют с запретом запуска файлов. Это мешает простым атакам, но ломает некоторые установщики. Им можно указать другой TMPDIR.

Что делать, если каталог /tmp удалён

Случается при неаккуратной чистке. Каталог восстанавливается за минуту, главное - вернуть правильные права, иначе программы начнут сыпать ошибками доступа:

sudo mkdir /tmp
sudo chmod 1777 /tmp
ls -ld /tmp   # должно быть drwxrwxrwt root root

Можно поручить это systemd, он создаст каталог с правами из конфигурации: sudo systemd-tmpfiles --create. После этого перезагрузитесь, чтобы все программы и службы заново открыли свои временные файлы. Если /tmp у вас в tmpfs, удалить сам каталог-точку монтирования на работающей системе обычно не получится, а после перезагрузки он появится снова.

Частые вопросы

Можно ли удалять файлы из /tmp?

Свои старые файлы можно. Удалять всё подряд на работающей системе не стоит: там сокеты и файлы открытых программ. Надёжнее перезагрузиться или выполнить sudo systemd-tmpfiles --clean.

Через сколько очищается /tmp?

По правилам systemd файлы в /tmp удаляются через 10 дней без обращений, в /var/tmp через 30. Если /tmp в tmpfs, он очищается и при каждой перезагрузке.

Сколько памяти занимает /tmp в tmpfs?

Только объём реально записанных файлов. Верхний предел по умолчанию - половина оперативной памяти, его можно изменить через systemctl edit tmp.mount.

Как вернуть /tmp на диск?

Выполните sudo systemctl mask tmp.mount и перезагрузитесь. Отменяется командой unmask.

Какие права должны быть у /tmp?

1777, то есть drwxrwxrwt с владельцем root. Буква t означает sticky bit.

Документация и источники

Читайте также

Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.