web-dev-qa-db-fra.com

Comment empêcher un dossier à l'intérieur de / tmp d'être nettoyé?

Cette question concerne Ubuntu 14.10 sur mon ordinateur portable de développeur.

J'ai un dossier dans /tmp qui est utilisé par une application pour y placer des éléments temporaires. Cette application crée généralement un dossier temporaire dans mon répertoire personnel et le supprime par la suite. Pour une raison quelconque, cela ne fonctionne pas lorsque le répertoire personnel est crypté. Alors au lieu de cela, j'ai créé un lien symbolique vers /tmp/foo dans mon répertoire personnel. Mon application peut y écrire et créer un sous-dossier temporaire.

Maintenant, /tmp/foo est supprimé à chaque redémarrage de la machine. Jusqu'à présent, je viens de recréer le dossier manuellement après le redémarrage. Maintenant, j'ai appris dans comment le répertoire/tmp est-il nettoyé? qu'il y a un travail qui le fait.

J'ai regardé /etc/init/mounted-tmp.conf mais mon bashfu et surtout mon findfu ne suffisent pas pour faire ce que je veux. Voici un extrait de ce fichier:

   EXCEPT='! -name .
            ! ( -path ./lost+found -uid 0 )
            ! ( -path ./quota.user -uid 0 )
            ! ( -path ./aquota.user -uid 0 )
            ! ( -path ./quota.group -uid 0 )
            ! ( -path ./aquota.group -uid 0 )
            ! ( -path ./.journal -uid 0 )
            ! ( -path ./.clean -uid 0 )
            ! ( -path "./...security*" -uid 0 )'

   # Remove all old files, then all empty directories
   find . -depth -xdev $TEXPR $EXCEPT ! -type d -delete
   find . -depth -xdev $DEXPR $EXCEPT -type d -empty -delete

Ce que je veux faire, c’est d’ajouter une condition qui supprime tout ce qui se trouve dans /tmp/foo, mais pas /tmp/foo lui-même. Comment je fais ça?

12
simbabque

/etc/init/mounted-tmp.conf fait partie du package mountall. Par conséquent, toutes les mises à jour de ce package et les modifications suggérées sont annulées.

$ Sudo dpkg -S /etc/init/mounted-tmp.conf 
mountall: /etc/init/mounted-tmp.conf

Au lieu de cela, conformément à la norme de hiérarchie de système de fichiers (FHS) ;

En ce qui concerne / tmp :

Les programmes ne doivent pas supposer que des fichiers ou des répertoires dans/tmp sont préservés entre les invocations du programme.

En ce qui concerne / var/tmp :

Le répertoire/var/tmp est disponible pour les programmes nécessitant des fichiers temporaires ou des répertoires préservés entre les redémarrages du système. Par conséquent, les données stockées dans/var/tmp sont plus persistantes que les données dans/tmp.

Vous devriez donc changer votre lien symbolique pour utiliser /var/tmp au lieu de /tmp.

20
mgor

Ce n’est pas strictement une réponse à votre question, mais vous pouvez penser que /var/tmp est un emplacement plus approprié, car il n’est pas nettoyé après un redémarrage. Il est conçu pour les fichiers temporaires qui ne doivent pas être automatiquement supprimés après une courte période.

Ce que je fais souvent, cependant, c’est de créer moi-même un dossier sous/opt pour stocker des choses aléatoires que je ne veux pas chez moi. C'est un endroit approprié pour mettre des choses hors du contrôle du système d'exploitation principal.

8
Andrew Aylett

Ainsi:

EXCEPT='! -name .
            ...
            ! ( -path "./foo" )'

   # Remove all old files, then all empty directories
   ...
   find /tmp/foo/* -depth -xdev $TEXPR -delete

Exemple:

$ cd /tmp/foo/
$ mkdir 1 2 3
$ touch 3 4 5
$ find /tmp/foo/* -depth -xdev $TEXPR -delete
$ ls /tmp/foo/
$

Je suis d'accord avec l'utilisateur aap: vous devriez soit en tenir compte dans le logiciel utilisé en recréant le répertoire là-bas s'il s'agit de fichiers tmp, ou utiliser un autre répertoire s'il ne s'agit pas de fichiers tmp non purgés.

6
Rinzwind

C'est une mauvaise idée d'avoir des fichiers avec une valeur future, écrivez dans le répertoire/tmp (/ var/tmp, comme suggéré par d'autres, est un meilleur endroit). Cela dit, vous voudrez peut-être tenter votre chance avec chattr. Cela devrait être exécuté après la fermeture de l'application, mais avant un arrêt. Rappelez-vous que cette opération ne laissera pas rien écrire dans ce répertoire par la suite.

touchez /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me

0
Hopping Bunny