Je ne comprends pas la fonction de mktemp
et ce que signifie un fichier temporaire.
Quelle est la différence entre touch xyz
et mktemp xyz
(mis à part le fait que mktemp
créera un fichier auquel xxx sera ajouté et qu'il aura 600 permissions?)
Précisez s'il vous plaît.
mktemp
randomise le nom . Il est très important du point de vue de la sécurité.
Imaginez que vous faites quelque chose comme:
echo something > /tmp/temporary-file
dans votre script root.
Et quelqu'un (qui a lu votre script) fait
ln -s /etc/passwd /tmp/temporary-file
avant.
La commande mktemp
pourrait vous aider dans cette situation:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
Maintenant, cette attaque ln /etc/passwd
ne fonctionnera pas.
Vous voulez souvent un "fichier bloc-notes" (ou un répertoire). De plus, vous aurez peut-être besoin de plusieurs fichiers de ce type en même temps et vous ne voudrez plus vous demander comment les nommer afin d'éviter tout conflit.
"mktemp" convient parfaitement :)
Vous y avez répondu vous-même: mktemp()
garantit un nom unique.
http://linux.die.net/man/3/mktemp
La fonction mktemp () génère un nom de fichier temporaire unique à partir de modèle. Les six derniers caractères du modèle doivent être XXXXXX et ceux-ci sont remplacés par une chaîne qui rend le nom de fichier unique.
Mais, comme le fait remarquer le commentaire de @ MarcB (et la page de manuel), vous ne devriez pas l'utiliser: vous devriez utiliser mkstemp () .
Ok, en fait, il est écrit clairement dans les pages de manuel.
mktemp - crée un fichier ou un répertoire temporaire.
Créez un fichier ou un répertoire temporaire, en toute sécurité, et affichez son nom.
Créer un fichier ou un répertoire en toute sécurité signifie qu'aucun autre utilisateur ne peut y accéder. C'est pourquoi son autorisation est de 600
touch - change l'horodatage des fichiers
Il suffit de changer les horodatages d'un fichier s'il est déjà créé et de créer un fichier s'il n'existe pas. Mais l'autorisation de fichier est toujours 644 par défaut.
Pour plus de détails, consultez les pages de manuel suivantes:
Une raison supplémentaire: tous les systèmes n'utilisent pas /tmp
en tant que répertoire temporaire . Par exemple https://termux.com/ pour des raisons techniques (il s'exécute en tant que processus dans Android) répertoire tmp.
Les scripts qui créent des fichiers temporaires ou des répertoires à l'aide de mktemp
seront portables et fonctionneront également dans des environnements spéciaux.
Au moins dans la bash Shell, vous pouvez faire quelque chose comme:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
par exemple.