гарантировано ли существование /tmp?

гарантировано ли существование /tmp?

Нужно ли мне проверять и создавать /tmpперед записью в файл внутри него? Предположим, что никто не запускал, sudo rm -rf /tmpпотому что это очень редкий случай

решение1

TheФХСмандаты, которые /tmpсуществуют, как иPOSIXтак что вы можете рассчитывать на его наличие (по крайней мере, в совместимых системах; но на самом деле его присутствие в Unix-подобных системах практически гарантировано). Но вам не следует этого делать: системный администратор или пользователь могут предпочесть другие места для временных файлов. СмотритеПоиск правильного каталога tmp на нескольких платформахБольше подробностей.

решение2

На практике, /tmpпрактически гарантированно существует. Однако, даже если он существует, это не значит, что вам следует помещать туда временные файлы.

TheстандартныйСоглашение заключается в использовании TMPDIRпеременной окружения. Если она существует, она указывает на каталог для временных файлов. Если ее нет, поместите временные файлы в /tmp.

В скрипте оболочки вы можете использовать "${TMPDIR:-/tmp}"как временное расположение файла: это расширяется до значения, TMPDIRесли оно установлено¹, и до /tmpв противном случае. Или вы можете установить TMPDIRусловно, если оно не установлено, с помощью команды

: "${TMPDIR:=/tmp}"

а затем создать временные файлы внутри "$TMPDIR".

Обратите внимание, что любое приложение может создавать файлы в /tmpили $TMPDIR. Кроме того, этот каталог может быть общим для нескольких пользователей, поэтому вам нужно позаботиться о разрешениях при создании файла. Во многих системах (Linux, *BSD) есть командаmktempкоторый безопасно создает файлы в правильном каталоге. Обычно это хорошая идея для mktempсоздания временных файлов и каталогов — особенно из скрипта оболочки, где невозможно безопасно создать файл в общем каталоге из-за возможности атак симлинков ( mkdirэто нормально, если вы правильно обрабатываете ошибки).

¹ и непустая — если переменная пуста, то ее в любом случае нельзя использовать как есть, и, как правило, рекомендуется обрабатывать пустые или неустановленные переменные таким же образом, если они должны содержать имя файла.

решение3

Хотя весьма вероятно, что он существует, вам следует проверить еще одну причину: нет гарантии, что он будетбольшой. Во многих системах /tmpподдерживается оперативной памятью, а не диском, и, скорее всего, ограничена несколькими ГБ. (В системах Fedora по умолчанию это половина оперативной памяти.) Поэтому вам следует проверить не только наличие, но и наличие места для того, что вы собираетесь туда поместить.

Если у вас что-то большое, используйте /var/tmp/.

Связанный контент