Quel dossier dois-je écrire pour mes files intermédiaires, en tant que dev?

Je commence à écrire quelques scripts bash pour mon projet et ils ont besoin de files intermédiaires ou de variables à écrire.

Je veux savoir quels dossiers puis-je être sûr d'avoir access à quand quelqu'un exécute mon script? Est-ce une pratique courante d'utiliser /tmp/ ? Ou devrais-je utiliser autre chose?

Je trouve le document standard de hiérarchie de système de files inestimable lors de la search de ce genre de choses.

Il y a quelques options,

  • / tmp – files temporaires non permanents
  • / var / tmp – files temporaires 'permanents'
  • / var / cache – files de données transitoires 'application'

Cela dépend vraiment du type de données que vous stockez.

Si vous devez écrire des files temporaires qui durent aussi longtime que votre script ou application s'exécute, utilisez le directory indiqué par la variable d'environnement TMPDIR , ou si cette variable n'est pas définie, /tmp .

/tmp est effacé au démarrage sur certains systèmes (parfois même en RAM, par exemple sur Solaris et sur certaines installations Linux), donc il ne peut pas être utilisé pour les files qui doivent survivre à une panne de courant ou à un redémarrage. /var/tmp peut être utilisé pour les files qui doivent survivre à un redémarrage, mais qui peuvent être nettoyés par l'administrateur système de time en time. Si votre application doit save les files de façon permanente, écrivez-les quelque part dans le directory personnel de l'user (dans ~/.programmingnoobsapp ou ~/.cache/programmingnoobsapp ) ou sous /var/lib/programmingnoobsapp ou /var/cache/programmingnoobsapp .

Notez que /tmp est partagé entre tous les users, vous devez donc prendre des précautions lors de la création d'un file. Vous devez choisir un nom de file qui n'existe pas encore, et vous devez faire attention à ne pas autoriser une condition de concurrency où un autre process crée le file devant vous avec des permissions différentes, ce qui pourrait être un trou de security (si l'autre process fonctionne en tant qu'user différent, il peut alors accéder et modifier datatables de votre process). Utilisez la command mktemp pour créer un file dans /tmp ou /var/tmp . Par défaut, mktemp crée un file dans $TMPDIR , ou /tmp si TMPDIR n'est pas défini, ce qui est généralement le bon endroit. Si vous devez utiliser plusieurs files temporaires, ou même si vous en avez besoin, je vous recommand de créer un directory pour tous vos files temporaires avec mktemp -d et de le supprimer à la fin de votre script.

 #!/bin/sh tmp_root= trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP tmp_root=$(mktemp -d) tmpfile1=$tmp_root/file1 tmpfile2=$tmp_root/file2 … 

Juste pour compléter les réponses qui ont déjà été postées jusqu'à présent.

Il y a aussi /dev/shm sur certaines dissortingbutions Linux qui peuvent être utilisées pour le stockage temporaire. Ce stockage ne doit être utilisé que lorsque les performances des E / S de files sont un facteur critique donné /dev/shm utilise le système de files tmpfs . Il devrait également être utilisé pour des files et des données de taille raisonnable. Le système de files tmpfs utilise une memory RAM système en tant que stockage, de sorte qu'il n'est pas persistant à partir du démarrage.

Il y a un bon aperçu de tous les choix mentionnés ici sur StackOverflow ainsi que dans ce Q & A intitulé: / tmp vs. / dev / shm pour le stockage de files temporaires sur Linux? . Il est bien couvert dans ce Q & R de SuperUser intitulé: Quand devrais-je utiliser / dev / shm / et quand devrais-je utiliser / tmp? .

Les references

  • Wikipedia – Mémoire partagée
  • Wikipedia – Standard de hiérarchie de système de files
  • Wikipedia – Tmpfs
  • Tmpfs – kernel.org

Oui, /tmp est principalement pour les files requirejs temporairement. Le file / tmp a un bit collant sur lequel seul le propriétaire de l'élément, le propriétaire du directory ou le superuser peut renommer ou supprimer des files. de nombreux programmes l'utilisent pour créer des files de locking et pour stocker temporairement des données. Sur certaines dissortingbutions, ce directory est effacé au démarrage ou à l'arrêt.