27 votes

Quelle est la durée de vie des fichiers temporaires créés avec mktemp ?

Je me demandais combien de temps durent les fichiers temporaires créés avec mktemp. Il me semble étrange de se fier à un fichier qui peut disparaître à tout moment. Je suis sur ubuntu, si cela a de l'importance.

22voto

Mohsin Points 11

Hein ? De 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 ajoute simplement une chaîne aléatoire pour créer un nom de fichier unique. Personne ne va la supprimer automatiquement.


Puisqu'il semble y avoir une certaine polémique, entrons un peu plus dans les détails. mktemp La page de manuel du logiciel indique que

si TEMPLATE n'est pas spécifié, --tmpdir est supposé, si --tmpdir n'est pas spécifié, /tmp est supposée.

Cela signifie que le simple fait d'exécuter mktemp créera un fichier appelé tmp.RANDOM_STRING dans le répertoire /tmp . Alors oui, courir mktemp sans paramètres créera un fichier qui sera effacé en même temps que tous les autres fichiers de la base de données /tmp en fonction du système. Pour ces fichiers, l'option $TMPTIME La variable sera importante, comme l'explique la réponse de Chris ci-dessous. Pour de nombreuses distributions, la valeur par défaut est la compensation /tmp à chaque démarrage car $TMPTIME est fixé à 0 . Dans la plupart des distributions (si ce n'est toutes), ce paramètre est défini dans le fichier /etc/default/rcS :

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

Maintenant, si vous faire spécifier un MODÈLE, par exemple mktemp fooXXX puis un fichier appelé fooXXX est créé dans le répertoire courant où se trouve XXX est remplacé par trois caractères aléatoires. Ce fichier ne sera jamais supprimé, à moins que vous n'en fassiez la demande expresse. Seuls les fichiers des répertoires temporaires "officiels" tels que /tmp ne sont jamais supprimés automatiquement par le système, il n'y a pas de bit magique que vous pouvez définir pour spécifier un fichier temporaire, les fichiers en dehors de l'application /tmp et ses semblables ne sont pas supprimés automatiquement.

Pour répondre à votre question principale, il est bien sûr é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, nommé de manière aléatoire. Par exemple :

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

8voto

Tim Partridge Points 993

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 dans /etc/cron.daily/tmpwatch .

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

Les fichiers temporaires sont créés pour une période (généralement) courte. Ils portent un nom temporaire afin qu'il ne soit pas facile d'exécuter une attaque par timing et sont généralement supprimés lorsque le programme n'en a plus besoin. En général, votre script conserve ce fichier pendant une très courte période, généralement pour traiter du texte ou d'autres fichiers, et le supprime dès qu'il n'est plus nécessaire. Si votre script tombe en panne, vous devrez alors vous rabattre sur les procédures de conservation du dossier /tmp (si c'est là que vous avez décidé de les placer).

Il n'est pas nécessaire de créer un fichier temporaire dans le dossier /tmp

2voto

djeidot Points 2143

Les fichiers temporaires ne disparaissent pas d'eux-mêmes. Ils sont appelés fichiers temporaires simplement parce que dans votre script ou dans votre session ou dans n'importe quel endroit où vous les créez, vous êtes censé les supprimer lorsque vous avez terminé. mktemp existe uniquement pour vous permettre de créer un fichier qui porte un nom unique afin qu'il n'écrase pas un fichier existant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X