Якщо вам потрібно написати деякі тимчасові файли , які тільки в минулому, поки ваш сценарій або додаток запущено, використовуйте каталог вказує 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
…