Quanto durano i file temporanei creati con mktemp?


18

Mi chiedevo per quanto tempo sono durati i file temporanei creati con mktemp. Mi sembra strano fare affidamento su un file che potrebbe scomparire in qualsiasi momento. Sono su Ubuntu, se è importante.

Risposte:


17

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

2
Questo non risponde alla mia domanda. Dice che crea un file "temporaneo" e non fornisce informazioni sulla durata. Quindi dura per sempre? La directory tmp viene individuata all'avvio del sistema?
MYV,

@Maksim vedi risposta aggiornata. Inoltre, la tua domanda non è stata posta quando la tmpdirectory viene cancellata ma quando i file creati con mktempvengono eliminati. Come puoi vedere, i due non sono necessariamente correlati :).
terdon,

6

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


Visto che 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.
terdon,

1
Per impostazione predefinita mktempcrea file in /tmp/.
Chris,

solo se non dai un MODELLO, vedi la mia risposta aggiornata.
terdon,

1

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.


Alcuni sistemi non usano un TMPTIME?
pudica

@demure yes ma solo per cancellare /tmpo altre directory tmp. Non eliminerà casualmente i file creati dall'utente.
terdon,

Per impostazione predefinita mktempcrea file in /tmp/.
Chris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.