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.
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.
mktemp
ajoute 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. mktemp
La page de manuel indique que
si TEMPLATE n'est pas spécifié,
--tmpdir
est supposé, si--tmpdir
n'est pas spécifié,/tmp
est supposé.
Cela signifie que la simple exécution mktemp
créera un fichier appelé tmp.RANDOM_STRING
dans le répertoire / tmp . Donc oui, une exécution mktemp
sans paramètres créera un fichier qui sera effacé avec tout le reste de /tmp
manière dépendante du système. Pour de tels fichiers, la $TMPTIME
variable sera importante, comme expliqué dans la réponse de Chris ci-dessous. Pour de nombreuses distributions, la valeur par défaut efface /tmp
chaque démarrage car $TMPTIME
est 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 fooXXX
puis un fichier appelé fooXXX
est créé dans le répertoire courant où XXX
est 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 /tmp
sont 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 /tmp
et 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
tmp
répertoire était effacé mais quand les fichiers créés avecmktemp
étaient supprimés. Comme vous pouvez le voir, les deux ne sont pas nécessairement liés :).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é contretmpwatch
.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
la source
mktemp
peut ê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 à voirtmpwatch
.mktemp
crée des fichiers dans/tmp/
.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.
la source
TMPTIME
?/tmp
ou d'autres répertoires tmp. Il ne supprimera pas simplement au hasard les fichiers créés par l'utilisateur.mktemp
crée des fichiers dans/tmp/
.