Odpowiedzi:
Co? Od man mktemp:
DESCRIPTION
Create a temporary file or directory, safely, and
print its name. TEMPLATE must contain at least 3
consecutive `X's in last component. If TEMPLATE is
not specified, use tmp.XXXXXXXXXX, and --tmpdir is
implied. Files are created u+rw, and directories
u+rwx, minus umask restrictions.
mktemppo prostu dodaje losowy ciąg, aby utworzyć unikalną nazwę pliku. Nikt nie usunie go automatycznie.
Ponieważ wydaje się, że jest trochę kłótni, przejdźmy do bardziej szczegółowych szczegółów. mktempStrona podręcznika użytkownika to stwierdza
jeśli SZABLON nie jest określony,
--tmpdirzakłada się, jeśli--tmpdirnie jest określony,/tmpzakłada się.
Oznacza to, że samo uruchomienie mktempspowoduje utworzenie pliku o nazwie tmp.RANDOM_STRING w katalogu / tmp . Tak, uruchomienie mktempbez parametrów spowoduje utworzenie pliku, który zostanie wyczyszczony wraz ze wszystkim innym w /tmpsposób zależny od systemu. W przypadku takich plików $TMPTIMEzmienna będzie ważna, jak wyjaśniono w odpowiedzi Chrisa poniżej. W przypadku wielu dystrybucji ustawieniem domyślnym jest czyszczenie /tmpkażdego rozruchu, ponieważ $TMPTIMEjest ustawiony na 0. W większości (jeśli nie we wszystkich) dystrybucjach jest to ustawione w pliku /etc/default/rcS:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Teraz, jeśli zrobić określić szablon, na przykład mktemp fooXXXwtedy plik o nazwie fooXXXjest tworzony w bieżącym katalogu, w którym XXXjest zastąpiony przez trzech losowych znaków. Ten plik nigdy nie zostanie usunięty, chyba że zdecydujesz się to zrobić. Tylko pliki w „oficjalnych” katalogach tymczasowych, takie jak /tmpte, które są zawsze automatycznie usuwane przez system, nie można ustawić magicznego bitu, który określa plik tymczasowy, pliki na zewnątrz /tmpi podobne nie są automatycznie usuwane.
Aby odpowiedzieć na twoje główne pytanie, oczywiście dziwne jest poleganie na pliku, który może zniknąć, dlatego ludzie nie polegają na plikach tmp, są one tworzone do tymczasowego przechowywania danych, a następnie możemy o nich zapomnieć. Istnieje wiele sposobów tworzenia trwałych plików o losowej nazwie. Na przykład:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmpwyczyszczenia katalogu, ale usunięcia plików utworzonych za pomocą mktemp. Jak widać, te dwa niekoniecznie są powiązane :).
Pamiętaj, że pliki tymczasowe mogą zostać usunięte podczas uruchamiania systemu lub zgodnie z TMPTIME. Zobacz, co masz /etc/cron.daily/tmpwatch.
/var/tmp/z drugiej strony jest zwykle odporny na tmpwatch.
Pliki tymczasowe są tworzone (zwykle) przez krótki czas. Mają tymczasową nazwę, więc nie jest łatwo wykonać atak czasowy i zwykle są usuwane, gdy nie są już potrzebne programowi. Zwykle skrypt przechowuje ten plik przez bardzo krótki czas, zwykle przetwarzając jakiś tekst lub inne pliki i usuwa go, gdy tylko nie jest potrzebny. Jeśli twój skrypt się zawiesi, będziesz miał również procedury porządkowania folderów / tmp (jeśli właśnie tam zdecydowałeś się je umieścić).
Nie musisz tworzyć pliku tymczasowego /tmp
mktempmożna uruchomić w dowolnym katalogu i po prostu generuje dowolną nazwę pliku, nie rozumiem, jak to ma cokolwiek wspólnego tmpwatch.
mktemptworzy pliki w /tmp/.
Pliki tymczasowe nie znikają same z siebie. Są to tak zwane pliki tymczasowe, ponieważ w skrypcie lub sesji lub gdziekolwiek je tworzysz, oczekuje się, że usuniesz je po zakończeniu. Lub zostaw ich leżących, jeśli to twoja sprawa. mktemp istnieje wyłącznie po to, aby pozwolić ci wymyślić plik o nazwie coś unikalnego, aby nie zastępował istniejącego pliku.
TMPTIME?
/tmplub innych katalogów tmp. Nie tylko losowo usunie pliki utworzone przez użytkownika.
mktemptworzy pliki w /tmp/.