Risposte:
Eh? Da 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.
mktempaggiunge solo una stringa casuale per creare un nome file univoco. Nessuno lo rimuoverà automaticamente.
Dal momento che sembra esserci un po 'di un argomento, andiamo in qualche dettaglio in più. mktempLa pagina man di questo afferma
se TEMPLATE non è specificato,
--tmpdirviene assunto, se--tmpdirnon specificato,/tmpviene assunto.
Ciò significa che semplicemente eseguendo mktempverrà creato un file chiamato tmp.RANDOM_STRING nella directory / tmp . Quindi sì, l'esecuzione mktempsenza parametri creerà un file che verrà cancellato insieme a tutto il resto in /tmpmodo dipendente dal sistema. Per tali file, la $TMPTIMEvariabile sarà importante come spiegato nella risposta di Chris di seguito. Per molte distribuzioni, il valore predefinito cancella /tmpogni avvio perché $TMPTIMEè impostato su 0. Nella maggior parte (se non in tutte) le distribuzioni, questo è impostato nel file /etc/default/rcS:
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
Ora, se si fa specificare un modello, ad esempio, mktemp fooXXXpoi un file chiamato fooXXXviene creata nella directory corrente in cui XXXviene sostituita da tre caratteri casuali. Questo file non verrà mai eliminato a meno che tu non abbia scelto di farlo. Solo i file nelle directory temporanee "ufficiali" come quelli /tmpvengono mai eliminati automaticamente dal sistema, non è possibile impostare alcun bit magico che specifica un file temprary, i file esterni /tmpe i relativi file non vengono eliminati automaticamente.
Per rispondere alla tua domanda principale, ovviamente è strano dipendere da un file che può scomparire, ecco perché le persone non dipendono da file tmp, sono create per contenere temporaneamente i dati e possiamo quindi dimenticarcene. Esistono molti modi per creare un file persistente, chiamato in modo casuale. Per esempio:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmpdirectory viene cancellata ma quando i file creati con mktempvengono eliminati. Come puoi vedere, i due non sono necessariamente correlati :).
Ricorda che i file temporanei potrebbero essere rimossi durante l'avvio del sistema o secondo TMPTIME. Si prega di vedere cosa hai dentro /etc/cron.daily/tmpwatch.
/var/tmp/d'altra parte è di solito immune tmpwatch.
I file temporanei vengono creati per (normalmente) un breve periodo di tempo. Hanno un nome temporaneo, quindi non è facile eseguire l'attacco temporizzato e di solito vengono eliminati quando non sono più necessari al programma. Di solito il tuo script mantiene questo file per un periodo di tempo molto breve, di solito elabora del testo o altri file e lo rimuove non appena non è necessario. Se il tuo script si arrestasse in modo anomalo, avresti anche eseguito il fallback sulle procedure di pulizia della cartella / tmp (se è lì che hai deciso di metterle).
Non è necessario creare il file temporaneo in /tmp
mktemppuò essere eseguito in qualsiasi directory e produce semplicemente un nome di file arbitrario, non vedo come questo abbia qualcosa a che fare con tmpwatch.
mktempcrea file in /tmp/.
I file temporanei non vanno via da soli. Sono chiamati file temporanei semplicemente perché nel tuo script o sessione o ovunque tu li stia creando, ci si aspetta che tu li elimini quando hai finito. O lasciarli in giro se è la tua cosa. mktemp esiste esclusivamente per permetterti di creare un file che è chiamato qualcosa di unico in modo che non sovrascriva un file esistente.
TMPTIME?
/tmpo altre directory tmp. Non eliminerà casualmente i file creati dall'utente.
mktempcrea file in /tmp/.