Recherche de site Web

Comment créer des fichiers temporaires à l’aide de mktemp sous Linux


Les fichiers temporaires et les répertoires sont très importants : ils peuvent être utilisés à partir de scripts shell par exemple, pour stocker des informations nécessaires à l’accomplissement de certaines tâches et peuvent être supprimés en toute sécurité une fois le travail terminé. Dans ce tutoriel, nous allons voir comment créer en toute sécurité des fichiers temporaires et des répertoires à l’aide de l’utilitaire mktemp sous Linux.

Dans ce tutoriel, vous allez apprendre :

  • Comment utiliser mktemp
  • Comment fournir un modèle personnalisé pour les noms de fichiers temporaires
  • Comment spécifier un répertoire alternatif pour les fichiers temporaires
  • Comment créer un répertoire temporaire

Configuration logicielle requise et conventions utilisées

Présentation de mktemp

L’utilitaire mktemp nous permet de créer en toute sécurité des fichiers temporaires et des répertoires nommés à l’aide d’un « modèle » prédéfini ou éventuellement fourni par l’utilisateur. L’utilitaire est installé par défaut sur toutes les principales distributions Linux, généralement dans le cadre du paquet « coreutils », il est donc inclus même dans les installations minimales.

Dans son utilisation la plus basique, il peut être invoqué sans spécifier d’arguments ou d’options. Lorsqu’il est utilisé de cette façon, il crée un fichier temporaire dans le répertoire /tmp.

Pour créer en toute sécurité un fichier ou un répertoire temporaire, son nom ne doit pas entrer en collision avec un fichier déjà existant. Pour s’assurer que cela ne se produise pas, mktemp utilise le modèle suivant :

tmp.XXXXXXXXXX

Les caractères X du modèle sont remplacés par des caractères et des chiffres aléatoires. Essayons d’invoquer mktemp et voyons quel résultat nous obtenons :

mktemp
/tmp/tmp.too2NcMWqn

Comme vous pouvez le remarquer, par défaut mktemp crée un fichier temporaire (pour créer un répertoire temporaire, nous devons utiliser une option spécifique que nous verrons plus tard), dans le répertoire /tmp en utilisant le modèle de nommage susmentionné.

Le nom du fichier créé est imprimé sur la sortie standard ; Cela nous permet de l’utiliser comme valeur de variables que nous pouvons utiliser pour le référencer pour les opérations ultérieures : écrire quelque chose dessus, ou le supprimer une fois qu’une tâche de script est effectuée.

Fournir un modèle personnalisé pour les noms de fichiers temporaires

Nous venons de voir le modèle de nommage par défaut qui est utilisé par mktemp pour créer en toute sécurité des fichiers temporaires. Si nous le voulons, cependant, nous avons la possibilité de fournir notre modèle de nommage personnalisé : tout ce que nous avons à faire est d’appeler l’application et de passer notre modèle de modèle personnalisé en argument. Pour être considéré comme valide, le modèle fourni doit contenir au moins 3 X caractères, qui, comme nous l’avons vu, seront remplacés par des caractères aléatoires. Si cette règle n’est pas respectée, une erreur est générée :

mktemp customtemplatename.XX
mktemp: too few X's in template ‘customtemplatename.XX’

Spécification d’un répertoire alternatif pour les fichiers temporaires

Comme nous l’avons déjà dit, sauf indication contraire, les fichiers et répertoires temporaires sont créés par mktemp dans le répertoire système /tmp. C’est logique puisque c’est là que les fichiers temporaires sont stockés par défaut. Dans certaines situations, cependant, nous pouvons vouloir spécifier un chemin d’accès différent. Nous pouvons le faire de deux manières :

  1. Utilisation de la variable d’environnement TMPDIR
  2. Utilisation de l’option --tmpdir lors de l’appel de mktemp

Explorons ces options.

Utilisation de la variable TMPDIR

Il est recommandé d’attribuer une valeur à la variable d’environnement TMPDIR si nous voulons définir un chemin alternatif à utiliser pour les fichiers et répertoires temporaires sans avoir à le spécifier à chaque fois que nous appelons l’application. Nous pouvons, par exemple, définir la valeur de cette variable dans nos fichiers ~/.profile ou ~/.bash_profile (selon le shell que nous utilisons).

Supposons que je veuille toujours utiliser le répertoire /customtempdir pour les fichiers temporaires créés par mktemp. À l’intérieur du fichier ~/.bash_profile, j’ajouterais le contenu suivant :

export TMPDIR="/customtempdir"

Comme vous le savez peut-être, c’est une convention d’utiliser des majuscules pour le nom des variables d’environnement, c’est pourquoi TMPDIR est utilisé. Dans l’exemple ci-dessus, nous avons attribué une valeur à la variable, mais nous avons également utilisé l’exportation interne shell, pourquoi ? Il sert à rendre une variable disponible dans l’environnement de tous les processus enfants du shell. Dans l’exemple ci-dessus, nous avons exporté et attribué une valeur à la variable sur la même ligne, mais nous aurions également pu écrire :

TMPDIR="/customtempdir"
export TMPDIR

Le répertoire spécifié doit déjà exister et disposer des autorisations appropriées. Il ne sera pas créé à la volée par mktemp, et il devrait être inscriptible par tous ceux qui devraient l’utiliser. C’est évident si l’on examine les permissions appliquées au répertoire /tmp par défaut :

ls -ld /tmp
drwxrwxrwt. 22 root root 520 Dec 22 12:45 /tmp

Comme nous pouvons le voir sur la sortie de ls, le répertoire appartient à l’utilisateur racine et au groupe racine, mais il est accessible en écriture et explorable par tout le monde. Le t final dans le rapport d’autorisations produit par ls, signifie que le post-it est défini, de sorte que tous les fichiers créés dans le répertoire ne sont modifiables que par leurs propriétaires. N’oubliez pas que nous pouvons facilement définir le sticky bit sur un répertoire en exécutant la commande suivante :

sudo chown o+t /path/to/the/directory

Pour que les modifications apportées à notre environnement soient efficaces, nous devons nous connecter à partir du système, ou utiliser source pour immédiatement (et temporairement - les modifications seront perdues lorsque nous fermerons le shell actuel) ré-sourcer le fichier (~/.bash_profile, dans ce cas) :

source ~/.bash_profile

Une fois que la variable fait partie de l’environnement, sa valeur sera utilisée par mktemp comme répertoire de destination dans lequel créer des fichiers et répertoires temporaires :

mktemp
/customtempdir/tmp.JXuNpunTUm

Utilisation de l’option –tmpdir

L’autre façon de spécifier un répertoire alternatif dans lequel les fichiers temporaires et les répertoires doivent être créés, c’est en utilisant l’option --tmpdir (-p) au moment de l’exécution. L’option prend le chemin du répertoire que l’on veut utiliser comme argument. Pour utiliser le répertoire /customtempdir de cette façon, par exemple, nous exécuterions :

mktemp --tmpdir=/customtempdir

Ou

mktemp -p /customtempdir

Création d’un répertoire temporaire

Comme nous l’avons vu dans les exemples précédents, par défaut l’utilitaire mktemp crée des fichiers temporaires. Dans certains cas, cependant, nous pouvons vouloir créer des répertoires temporaires à la place. Comment pouvons-nous le faire ? C’est très simple : tout ce que nous avons à faire est d’invoquer l’utilitaire avec l’option -d, qui est la version courte de --directory. Le même modèle qui est utilisé pour les noms de fichiers temporaires est également utilisé pour les répertoires :

mktemp -d
/tmp/tmp.YKQDLww3kT

Réflexions finales

La possibilité de créer en toute sécurité des fichiers et des répertoires temporaires est parfois nécessaire, en particulier à partir de scripts shell qui doivent stocker des informations temporaires. Dans ce tutoriel, nous avons vu comment effectuer une telle tâche en utilisant l’utilitaire mktemp sous Linux : nous avons vu quel est le modèle par défaut qui est utilisé pour nommer les fichiers temporaires et comment en fournir un personnalisé, comment spécifier dans quel répertoire ils doivent être créés, (la valeur par défaut étant /tmp), et enfin nous avons vu comment créer des répertoires temporaires au lieu de fichiers normaux.

Articles connexes: