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.
Réponses
Trop de publicités?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
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
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.