Zastanawiałem się, jak długo trwają pliki tymczasowe utworzone za pomocą mktemp. Wydaje mi się dziwne poleganie na pliku, który może zniknąć w dowolnym momencie. Jestem na Ubuntu, jeśli to ma znaczenie.
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.
mktemp
po 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. mktemp
Strona podręcznika użytkownika to stwierdza
jeśli SZABLON nie jest określony,
--tmpdir
zakłada się, jeśli--tmpdir
nie jest określony,/tmp
zakłada się.
Oznacza to, że samo uruchomienie mktemp
spowoduje utworzenie pliku o nazwie tmp.RANDOM_STRING
w katalogu / tmp . Tak, uruchomienie mktemp
bez parametrów spowoduje utworzenie pliku, który zostanie wyczyszczony wraz ze wszystkim innym w /tmp
sposób zależny od systemu. W przypadku takich plików $TMPTIME
zmienna będzie ważna, jak wyjaśniono w odpowiedzi Chrisa poniżej. W przypadku wielu dystrybucji ustawieniem domyślnym jest czyszczenie /tmp
każdego rozruchu, ponieważ $TMPTIME
jest 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 fooXXX
wtedy plik o nazwie fooXXX
jest tworzony w bieżącym katalogu, w którym XXX
jest 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 /tmp
te, które są zawsze automatycznie usuwane przez system, nie można ustawić magicznego bitu, który określa plik tymczasowy, pliki na zewnątrz /tmp
i 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
tmp
wyczyszczenia 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 natmpwatch
.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
źródło
mktemp
można uruchomić w dowolnym katalogu i po prostu generuje dowolną nazwę pliku, nie rozumiem, jak to ma cokolwiek wspólnegotmpwatch
.mktemp
tworzy 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.
źródło
TMPTIME
?/tmp
lub innych katalogów tmp. Nie tylko losowo usunie pliki utworzone przez użytkownika.mktemp
tworzy pliki w/tmp/
.