Есть ли в Linux стандартный временный каталог для общего пользования, такой как папка Windows C:\Temp
? Если да, где он находится? Я нашел SO вопрос о программном поиске каталога tmp
, но я хочу заранее установить временное местоположение в XML-файле конфигурации.
4 ответа
Стандарт Иерархии Файловой Системы версии 3.0 гласит:
/tmp: временные файлы
Каталог
/tmp
должен быть доступен для программ, которым требуются временные файлы.Программы не должны предполагать, что какие-либо файлы или каталоги в
/tmp
сохраняются между вызовами программы.обоснование
Стандарт IEEE POSIX.1-2008 перечисляет требования, аналогичные приведенному выше разделу. Хотя данные, хранящиеся в
/tmp
могут быть удалены в зависимости от сайта, рекомендуется, чтобы файлы и каталоги, расположенные в/tmp
, удалялись при каждой загрузке системы.FHS добавил эту рекомендацию на основе исторического прецедента и общепринятой практики, но не сделал ее обязательным требованием, поскольку системное администрирование не входит в сферу применения этого стандарта.
/var/tmp: временные файлы сохраняются между перезагрузками системы
Каталог
/var/tmp
доступен для программ, которым требуются временные файлы или каталоги, которые сохраняются между перезагрузками системы. Поэтому данные, хранящиеся в/var/tmp
, более постоянны, чем данные в/tmp
.Файлы и каталоги, расположенные в
/var/tmp
не должны удаляться при загрузке системы. Хотя данные, хранящиеся в/var/tmp
, обычно удаляются в зависимости от сайта, рекомендуется, чтобы удаление происходило с меньшим интервалом, чем/tmp
.
Также в выпуске 7 «Базовые спецификации открытых групп» переменных среды упоминается следующее:
TMPDIR
Эта переменная должна представлять путь к каталогу, доступному для программ, которым требуется место для создания временных файлов.
Это старый вопрос, поэтому сегодня есть еще один вариант. В дистрибутивах Linux, использующих systemd
(а это 90%), теперь можно использовать каталог $XDG_RUNTIME_DIR
(спецификация XDG Base Directory) для хранения определенных типов временных файлов. Обычно он находится в /run/user/$uid
. Это каталог для каждого пользователя с 700
разрешениями, который обеспечивает лучшую безопасность. Это монтирование tmpfs
которое обеспечивает производительность. Недостатком tmpfs
является то, что он должен использоваться только для хранения небольших файлов и сокетов.
Я смотрю на это как на брак /tmp
и /var/run
.
Вы не можете заранее выбрать одно временное имя каталога, которое будет работать для любой системы Linux. На самом деле, вы не можете сделать это и в Windows. Согласно статье Википедии о временных папках, временный каталог в Windows определяется переменной среды TEMP. Если бы вы просто использовали c:\Temp
в качестве временного каталога в системе Windows, в котором для TEMP было установлено что-то еще, любая программа, использующая ваш XML-файл для выбора временного каталога, потерпит неудачу.
Короче говоря, системный временный каталог определяется средой во всех известных мне современных операционных системах, включая как Windows, так и любую UNIX-подобную систему. Установка одного статического пути в качестве вашего временного каталога будет работать только до тех пор, пока значения по умолчанию не будут изменены.
В любом случае, стандартный временный каталог в типичной системе Linux - /tmp
. Это эквивалент C:\Temp
в том смысле, что это только временный каталог по умолчанию, а не универсальный. Даже если /tmp
доступен, если пользователь (или система) установил переменную среды TEMP, вместо нее следует использовать значение этой переменной.
Вы можете попробовать выбрать временный каталог относительно домашнего каталога пользователя, который вы можете создать.