Я начинаю писать несколько сценариев bash для моего проекта, и им нужно написать несколько промежуточных файлов или переменных.
Я хочу знать, к каким папкам я могу иметь доступ, когда кто-то запускает мой скрипт? Это обычная практика для использования /tmp/
? Или я должен использовать что-то еще?
scripting
filesystems
directory-structure
tmp
Программирование нуб
источник
источник
Если вам нужно написать некоторые временные файлы , которые только в прошлом, пока ваш сценарий или приложение запущено, используйте каталог указывает
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
и удалите его в конце вашего сценария.источник
mktemp
. Для меня это правильный ответ: поручить задачу безопасного создания временного файлаmktemp
(см. Эту статью ). Хотя один ответ, цитирующий, такжеFHS
имеет большое значение.tmp_root
перед назначением? Разве это не было бы более естественным дляunset
этого?set -u
, но это редко). Его нужно (не) устанавливать в безопасное значение перед установкой ловушки, в случае, если скрипт будет убит сразу после установки ловушки.set -o errexit
что, еслиtmp_root
в среде уже установлен режим «только для чтения», он не разрушит неправильный каталог ...Просто чтобы дополнить ответы, которые уже были опубликованы до сих пор.
Существует также
/dev/shm
в некоторых дистрибутивах Linux, которые можно использовать для временного хранения. Это хранилище следует использовать только в том случае, если производительность файлового ввода-вывода является критическим фактором, определяющим/dev/shm
использованиеtmpfs
файловой системы. Также его следует использовать для файлов и данных разумного размера. Вtmpfs
файловой позволяет использовать в качестве системной памяти хранения , так что не является постоянной от загрузки к загрузке.Есть хороший обзор всех вариантов, упомянутых здесь, в StackOverflow, а также в этом разделе вопросов и ответов под названием: / tmp vs. / dev / shm для временного хранения файлов в Linux? , Это хорошо описано в разделе вопросов и ответов SuperUser под названием: Когда я должен использовать / dev / shm / и когда я должен использовать / tmp? ,
Ссылки
источник
Да,
/tmp
в основном для файлов, которые требуются временно. У / tmp есть залипший бит, который означает, что только владелец элемента, владелец каталога или суперпользователь может переименовывать или удалять файлы. многие программы используют это для создания файлов блокировки и для временного хранения данных. В некоторых дистрибутивах этот каталог очищается при загрузке или выключении.источник