Jeśli trzeba napisać niektóre pliki tymczasowe, które tylko ostatni tak długo, jak skrypt lub aplikacja jest uruchomiona, należy skorzystać z katalogu wskazanego przez TMPDIR
zmienną środowiskową, lub jeśli ta zmienna nie jest zdefiniowana /tmp
.
/tmp
jest czyszczony w czasie rozruchu w niektórych systemach (czasami nawet w pamięci RAM, np. domyślnie w Solarisie i w niektórych instalacjach Linuksa), więc nie można go używać do plików, które muszą przetrwać awarię zasilania lub restart. /var/tmp
może być używany do plików, które muszą przetrwać restart, ale które mogą być czyszczone przez administratora systemu od czasu do czasu. Jeśli aplikacja musi zapisywać pliki na stałe, zapisz je gdzieś w katalogu domowym użytkownika (w ~/.programmingnoobsapp
lub ~/.cache/programmingnoobsapp
) lub pod /var/lib/programmingnoobsapp
lub /var/cache/programmingnoobsapp
.
Pamiętaj, że /tmp
jest to wspólne dla wszystkich użytkowników, więc musisz zachować ostrożność podczas tworzenia pliku w tym miejscu. Musisz wybrać nazwę pliku, która jeszcze nie istnieje, i musisz uważać, aby nie dopuścić do wyścigu, w którym inny proces tworzy plik przed tobą z różnymi uprawnieniami, co może stanowić lukę bezpieczeństwa (jeśli inny proces działa jako inny użytkownik, może wtedy uzyskiwać dostęp do danych procesu i modyfikować je). Użyj mktemp
polecenia, aby utworzyć plik w /tmp
lub /var/tmp
. Domyślnie mktemp
tworzy plik w $TMPDIR
, lub /tmp
jeśli TMPDIR
jest rozbrojony, co zwykle jest właściwym miejscem. Jeśli chcesz użyć wielu plików tymczasowych, a nawet jeśli potrzebujesz jednego, zalecamy utworzenie katalogu dla wszystkich plików tymczasowych za pomocąmktemp -d
i usuwając go na końcu skryptu.
#!/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
…