Je commence à écrire quelques scripts bash pour mon projet et ils ont besoin d'écrire des fichiers ou des variables intermédiaires.
Je veux savoir à quels dossiers puis-je être sûr d'avoir accès lorsque quelqu'un exécute mon script? Est-ce une pratique courante à utiliser /tmp/
? Ou devrais-je utiliser autre chose?
scripting
filesystems
directory-structure
tmp
Programmation Noob
la source
la source
Si vous avez besoin d'écrire des fichiers temporaires qui ne durent aussi longtemps que votre script ou une application en cours d' exécution est, utilisez le répertoire indiqué par la
TMPDIR
variable d'environnement, ou si cette variable est pas définie,/tmp
./tmp
est effacé au démarrage sur certains systèmes (parfois même en RAM, par exemple sur Solaris par défaut et sur certaines installations Linux), il ne peut donc pas être utilisé pour des fichiers qui doivent survivre à une panne de courant ou à un redémarrage./var/tmp
peut être utilisé pour les fichiers qui doivent survivre à un redémarrage, mais qui peuvent être nettoyés par l'administrateur système de temps en temps. Si votre application doit enregistrer des fichiers de façon permanente, écrivez-les quelque part dans le répertoire personnel de l'utilisateur (dans~/.programmingnoobsapp
ou~/.cache/programmingnoobsapp
) ou sous/var/lib/programmingnoobsapp
ou/var/cache/programmingnoobsapp
.Notez qu'il
/tmp
est partagé entre tous les utilisateurs, vous devez donc prendre des précautions lors de la création d'un fichier là-bas. Vous devez choisir un nom de fichier qui n'existe pas encore, et vous devez faire attention à ne pas autoriser une condition de concurrence critique où un autre processus crée le fichier devant vous avec des autorisations différentes, ce qui pourrait être une faille de sécurité (si l'autre processus fonctionne en tant qu'utilisateur différent, il pourrait alors accéder et modifier les données de votre processus). Utilisez lamktemp
commande pour créer un fichier dans/tmp
ou/var/tmp
. Par défaut,mktemp
crée un fichier dans$TMPDIR
, ou/tmp
s'ilTMPDIR
n'est pas défini, qui est généralement au bon endroit. Si vous devez utiliser plusieurs fichiers temporaires, ou même si vous en avez besoin d'un seul, je vous recommande de créer un répertoire pour tous vos fichiers temporaires avecmktemp -d
et le supprimer à la fin de votre script.la source
mktemp
. Pour moi, c'est la bonne réponse: déléguer la tâche de créer en toute sécurité un fichier temporaire àmktemp
(voir cet article ). Bien que la seule réponse citant leFHS
ait également une grande valeur.tmp_root
avant de l'attribuer? Cela ne lui serait-il pas plus naturelunset
?set -u
, mais c'est rare). Il doit être (dé) défini sur une valeur sûre avant de définir l'interruption, au cas où le script serait tué juste après avoir défini l'interruption.set -o errexit
que sitmp_root
est déjà défini en lecture seule dans l'environnement, il ne détruira pas le mauvais répertoire ...Juste pour compléter les réponses qui ont déjà été publiées jusqu'à présent.
Il existe également
/dev/shm
sur certaines distributions Linux qui peuvent être utilisées pour le stockage temporaire. Ce stockage ne doit être utilisé que lorsque les performances des E / S de fichiers sont un facteur critique étant donné qu'il/dev/shm
utilise letmpfs
système de fichiers. Il doit également être utilisé pour des fichiers et des données de taille raisonnable. Letmpfs
système de fichiers utilise une RAM système comme stockage, il n'est donc pas persistant de démarrage en démarrage.Il y a aussi un bon aperçu de tous les choix mentionnés ici sur StackOverflow dans cette Q&R intitulée: / tmp vs / dev / shm pour le stockage de fichiers temporaires sous Linux? . Il est bien couvert dans ce Q&R SuperUser intitulé: Quand devrais-je utiliser / dev / shm / et quand devrais-je utiliser / tmp? .
Les références
la source
Oui,
/tmp
c'est surtout pour les fichiers qui sont requis temporairement. Le / tmp a un bit collant sur ce qui signifie que seul le propriétaire de l'élément, le propriétaire du répertoire ou le superutilisateur peut renommer ou supprimer des fichiers. de nombreux programmes l'utilisent pour créer des fichiers de verrouillage et pour le stockage temporaire des données. Sur certaines distributions, ce répertoire est effacé au démarrage ou à l'arrêt.la source