Combien de temps durent les fichiers temporaires créés avec mktemp?

20

Je me demandais combien de temps les fichiers temporaires créés avec mktemp duraient. Il me semble étrange de compter sur un fichier qui pourrait disparaître à tout moment. Je suis sur ubuntu, si c'est important.

MON V
la source

Réponses:

17

Hein? Deman 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.

mktempajoute simplement une chaîne aléatoire pour créer un nom de fichier unique. Personne ne va le supprimer automatiquement.


Puisqu'il semble y avoir un peu d'argument, allons plus en détail. mktempLa page de manuel indique que

si TEMPLATE n'est pas spécifié, --tmpdirest supposé, si--tmpdir n'est pas spécifié, /tmpest supposé.

Cela signifie que la simple exécution mktempcréera un fichier appelé tmp.RANDOM_STRING dans le répertoire / tmp . Donc oui, une exécution mktempsans paramètres créera un fichier qui sera effacé avec tout le reste de /tmpmanière dépendante du système. Pour de tels fichiers, la $TMPTIMEvariable sera importante, comme expliqué dans la réponse de Chris ci-dessous. Pour de nombreuses distributions, la valeur par défaut efface /tmpchaque démarrage car $TMPTIMEest défini sur 0. Dans la plupart des distributions (sinon toutes), cela est défini dans le fichier /etc/default/rcS:

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

Maintenant, si vous faites spécifier un modèle, par exemple , mktemp fooXXXpuis un fichier appelé fooXXXest créé dans le répertoire courant où XXXest remplacé par trois caractères aléatoires. Ce fichier ne sera jamais supprimé, sauf si vous l'avez expressément choisi.Seuls les fichiers dans les répertoires temporaires "officiels" tels que ceux qui /tmpsont supprimés automatiquement par le système, il n'y a pas de bit magique que vous pouvez définir qui spécifie un fichier temporaire, les fichiers à l'extérieur /tmpet ses semblables ne sont pas supprimés automatiquement.

Pour répondre à votre question principale, bien sûr, il est étrange de dépendre d'un fichier qui peut disparaître, c'est pourquoi les gens ne dépendent pas des fichiers tmp, ils sont créés pour contenir temporairement des données et nous pouvons ensuite les oublier. Il existe de nombreuses façons de créer un fichier persistant au nom aléatoire. Par exemple:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
terdon
la source
2
Cela ne répond pas à ma question. Il dit qu'il crée un fichier "temporaire" et ne donne aucune information sur sa durée. Alors ça dure pour toujours? Le répertoire tmp est-il falsifié au démarrage du système?
MYV
@Maksim voir la réponse mise à jour. De plus, votre question ne demandait pas quand le tmprépertoire était effacé mais quand les fichiers créés avec mktempétaient supprimés. Comme vous pouvez le voir, les deux ne sont pas nécessairement liés :).
terdon
6

N'oubliez pas que les fichiers temporaires peuvent être supprimés lors du démarrage du système ou selon TMPTIME. Veuillez voir ce que vous avez/etc/cron.daily/tmpwatch .

/var/tmp/ d'autre part est généralement immunisé contre tmpwatch .

Les fichiers temporaires sont créés pour (généralement) une courte période. Ils ont un nom temporaire, il n'est donc pas facile d'exécuter une attaque de synchronisation et ils sont généralement supprimés lorsqu'ils ne sont plus nécessaires au programme. Habituellement, votre script conserverait ce fichier pendant une très courte période, traitant généralement du texte ou d'autres fichiers et le supprimerait dès qu'il ne serait pas nécessaire. Si votre script plantait, vous auriez également recours aux procédures de gestion du dossier / tmp (si c'est là que vous avez décidé de les mettre).

Vous n'avez pas à créer de fichier temporaire dans /tmp

Chris
la source
Étant donné que mktemppeut être exécuté dans n'importe quel répertoire et produit simplement un nom de fichier arbitraire, je ne vois pas en quoi cela a quoi que ce soit à voir tmpwatch.
terdon
1
Par défaut, mktempcrée des fichiers dans /tmp/.
Chris
seulement si vous ne donnez pas de MODÈLE, voir ma réponse mise à jour.
terdon
1

Les fichiers temporaires ne disparaissent pas d'eux-mêmes. Ils sont appelés fichiers temporaires simplement parce que dans votre script ou session ou partout où vous les créez, vous devez les supprimer lorsque vous avez terminé. Ou laissez-les traîner si c'est votre truc. mktemp existe uniquement pour vous permettre de créer un fichier nommé quelque chose d'unique afin qu'il n'écrase pas un fichier existant.

EBGreen
la source
Certains systèmes n'utilisent-ils pas un TMPTIME?
sage
@demure oui mais uniquement pour effacer /tmpou d'autres répertoires tmp. Il ne supprimera pas simplement au hasard les fichiers créés par l'utilisateur.
terdon
Par défaut, mktempcrée des fichiers dans /tmp/.
Chris