Если вам нужно написать некоторые временные файлы , которые только в прошлом, пока ваш сценарий или приложение запущено, используйте каталог указывает TMPDIR
переменную окружения, или , если эта переменная не определена, /tmp
.
/tmp
очищается во время загрузки в некоторых системах (иногда даже в ОЗУ, например, по умолчанию в Solaris и в некоторых установках Linux), поэтому его нельзя использовать для файлов, которые должны пережить сбой питания или перезагрузку. /var/tmp
может использоваться для файлов, которые должны пережить перезагрузку, но которые могут время от времени очищаться системным администратором. Если вашему приложению необходимо сохранять файлы на постоянной основе, напишите их где-нибудь в домашнем каталоге пользователя (в ~/.programmingnoobsapp
или ~/.cache/programmingnoobsapp
) или в /var/lib/programmingnoobsapp
или /var/cache/programmingnoobsapp
.
Обратите внимание, что /tmp
это общее для всех пользователей, поэтому вы должны принять меры предосторожности при создании файла там. Вам нужно выбрать имя файла, которое еще не существует, и вы должны быть осторожны, чтобы не допустить условия гонки, когда другой процесс создает файл впереди вас с другими разрешениями, что может быть дырой в безопасности (если другой процесс работает от имени другого пользователя, он может получить доступ и изменить данные вашего процесса). Используйте mktemp
команду для создания файла в /tmp
или /var/tmp
. По умолчанию mktemp
создает файл в $TMPDIR
или, /tmp
если TMPDIR
не установлен, что обычно является правильным местом. Если вам нужно использовать несколько временных файлов, или даже если вам нужен один, я рекомендую создать каталог для всех ваших временных файлов сmktemp -d
и удалите его в конце вашего сценария.
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…