man mktemp (Commandes) - crée un nom (unique) de fichier temporaire

NOM

mktemp - crée un nom (unique) de fichier temporaire

SYNOPSIS

mktemp [-V] | [-dqtu] [-p répertoire] [modèle]

DESCRIPTION

L'utilitaire mktemp utilise le modèle de nom de fichier modèle et en réécrit une partie pour créer un nom de fichier unique. modèle peut être nimporte quel nom de fichier suivi de six « X », comme par exemple /tmp/fichier_temp.XXXXXX. Si modèle n'est pas spécifié, tmp.XXXXXX est utilisé, l'option -t sera alors utilisée (voir cidessous).

Les « X » de fin sont remplacés à partir du numéro du process courant, et de lettres aléatoires.

Si mktemp arrive à générer un nom de fichier unique, le fichier (ou répertoire) est créé avec des permissions telles qu'il n'est accessible en lecture et en écriture que pour son propriétaire (à moins que l'option -u ne soit utilisée) et le nom du fichier est affiché sur la sortie standard.

mktemp est mis à disposition afin de permettre aux scripts shell de créer des fichiers temporaires de façon sûre. Traditionnellement, beaucoup de ces scripts utilisent l'identifiant du processus « PID » comme suffixe pour le nom des fichiers temporaires. Le nom devient prévisible et la situation de compétition (« race condition ») créée peut facilement être exploitée par un attaquant. Une approche plus sûre, bien que toujours insuffisante, consiste à créer un répertoire temporaire en utilisant la même méthode de nommage. Même si ceci permet de garantir que le fichier ne sera pas remplacé, cette méthode rend possible une attaque simple de type déni de service. Pour ces raisons, il est recommandé d'utiliser mktemp à la place.

Les options sont les suivantes :

-V
Affiche la version et quitte.
-d
Crée un répertoire à la place d'un fichier.
-p répertoire
Utilise le répertoire spécifié comme préfixe lors de la génération du nom de fichier temporaire. Le répertoire sera remplacé par la valeur de la variable d'environnement TMPDIR de l'utilisateur, si elle est définie. Cette option implique -t (voir ci-dessous).
-q
Échoue en silence en cas d'erreur. C'est utile pour les scripts qui ne veulent pas de message d'erreur sur la sortie d'erreur standard.
-t
Génère un chemin prenant racine dans un répertoire temporaire. Ce répertoire est choisi comme ceci :
•
Si la variable d'environnement TMPDIR de l'utilisateur est définie, le répertoire qu'elle contient est utilisé.
•
Sinon, si l'option -p est utilisée, le répertoire spécifié est utilisé.
•
Enfin, /tmp est utilisé.

Dans ce mode, le modèle (s'il est spécifié) doit être un élément d'un répertoire (par opposition à un chemin complet) et donc ne contenir aucune barre oblique (« / »).

-u
Opère dans un mode « non sûr ». Le fichier temporaire sera détaché « unlinked » avant que mktemp ne quitte. C'est légèrement mieux que mktemp(3), mais une situation de compétition est encore créée. L'utilisation de cette option est déconseillée.

L'utilitaire mktemp quitte avec une valeur de retour égale à 0 en cas de succès ou égale à 1 en cas d'échec.

EXEMPLES

Les lignes de shell sh(1) suivantes illustrent une utilisation simple de mktemp dans laquelle le script doit s'arrêter s'il ne peut pas obtenir un fichier temporaire sûr.

FICHIER_TEMP=`mktemp /tmp/exemple.XXXXXX` || exit 1 echo "exécution du programme" >> $FICHIER_TEMP

Voici un autre exemple utilisant la variable d'environnement TMPDIR de l'utilisateur.

FICHIER_TEMP=`mktemp -t exemple.XXXXXX` || exit 1 echo "exécution du programme" >> $FICHIER_TEMP

Ces lignes peuvent être simplifiées si le nom du fichier temporaire n'est pas important. Dans ce cas, mktemp fait comme si l'option -t était utilisée.

FICHIER_TEMP=`mktemp` || exit 1 echo "exécution du programme" >> $FICHIER_TEMP

Dans certains cas, il peut être désirable d'utiliser un répertoire temporaire par défaut autre que /tmp. Dans cet exemple, le fichier temporaire sera créé dans le répertoire /extra/tmp, à moins que la variable d'environnement TMPDIR ait été définie par l'utilisateur.

FICHIER_TEMP=`mktemp -p /extra/tmp exemple.XXXXXX` || exit 1 echo "exécution du programme" >> $FICHIER_TEMP

Dans certain cas, il est intéressant de récupérer une erreur éventuelle. Par exemple, pour créer deux fichiers temporaires, il faut supprimer le premier fichier dans le cas où la création du deuxième fichier échoue.

TMP1=`mktemp -t exemple.1.XXXXXX` || exit 1 TMP2=`mktemp -t exemple.2.XXXXXX` if [ $? -ne 0 ]; then rm -f $TMP1 exit 1 fi

Vous pouvez également ne pas vouloir quitter si mktemp n'est pas capable de créer le fichier. Dans ce cas, vous pouvez protéger une partie du script de cette façon :

FICHIER_TEMP=`mktemp -t exemple.XXXXXX` && { # $FICHIER_TEMP peut être utilisé de façon sécurisée dans ce bloc echo donnée > $FICHIER_TEMP ... rm -f $FICHIER_TEMP }

ENVIRONNEMENT

TMPDIR
répertoire dans lequel le fichier doit être placé lorsque l'option -t est utilisée.

VOIR AUSSI

HISTORIQUE

L'utilitaire mktemp est apparu dans OpenBSD 2.1.

TRADUCTION

Ce document est une traduction, réalisée par Nicolas FRANÇOIS le 29 octobre 2004.

L'équipe de traduction a fait le maximum pour réaliser une adaptation française de qualité.

La version anglaise la plus à jour de ce document est toujours consultable en ajoutant l'option « -L C » à la commande man.

N'hésitez pas à signaler à l'auteur ou à la liste de traduction <debian-l10-french@lists.debian.org>, selon le cas, toute erreur dans cette page de manuel.