TGViewer
BashTex | Linux BashTex | Linux @bash_tex · 2.51K subscribers
Post #522 694
Генерация временных файлов

Практически каждый, кому необходимы были временные файлы писал так:


TMP="/tmp/script.$RANDOM"


И вроде все ок, но на деле это один из самых старых и самых недооцененных багов в bash.

▪️ Почему /tmp/file.$RANDOM - это плохая идея
1️⃣ Коллизии.

$RANDOM - это число от 0 до 32767. При параллельном запуске скриптов совпадения реальны.

2️⃣ Race condition. Ты:


echo "data" > /tmp/file.$RANDOM


А злоумышленник заранее создал симлинк с таким именем и твой скрипт перезапишет чужой файл. Это классическая symlink attack.

3️⃣ Неправильные права. Файл создается с текущим umask. Это может быть не то, что ты ожидал.

▪️ Правильный способ - mktemp


TMP=$(mktemp)


Результат:


/tmp/tmp.ABCd93kL


Что делает mktemp:

генерирует криптографически безопасное имя
создаёт файл атомарно
выставляет права 600
исключает race condition


▪️ Создание временной директории


TMP_DIR=$(mktemp -d)


▪️ Правильная очистка. Всегда следует добавлять cleanup:


TMP=$(mktemp)

cleanup() {
rm -f "$TMP"
}
trap cleanup EXIT


Теперь файл удалится даже при ошибке или Ctrl+C.

▪️ Когда нужно имя с префиксом


mktemp /tmp/myscript.XXXXXX


Или:


mktemp -d /tmp/myscript.XXXXXX


XXXXXX обязательно - это шаблон.

BashTex 📱 #bash #utils
  • 👍 8
More from @bash_tex
  1. Oct 8, 2026Bridge FDB - как Linux bridge узнаёт, где находится MAC Linux bridge не знает заранее, за…
  2. Oct 7, 2026/dev/tcp - сетевое соединение средствами Bash В Bash есть малоизвестная возможность работа…
  3. Oct 6, 2026Ephemeral ports - почему заканчиваются исходящие TCP-порты Когда приложение устанавливает…
  4. Oct 5, 2026name_to_handle_at() - как получить файловый объект без обычного пути В Linux обычно обраща…
  5. Oct 2, 2026madvise() - как процесс подсказывает ядру, как он собирается использовать память Когда про…
  6. Oct 1, 2026flock vs fcntl - почему две блокировки одного файла могут вести себя совершенно по-разному…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →