Comment changer / tmp par défaut en / home / user / tmp

13

Existe-t-il une variable d'environnement pour définir le répertoire temporaire sur les systèmes basés sur Debian?

J'ai une applet java qui utilise cette variable d'environnement et cela devient confus lors du lancement de deux instances de la même applet.

Disco
la source

Réponses:

17

Je ne sais pas si l'applet java examinera réellement les variables d'environnement avant de commencer, mais ce que vous pouvez faire, éditez / etc / profile et ajoutez les lignes suivantes:

if [[ -O /home/$USER/tmp && -d /home/$USER/tmp ]]; then
        TMPDIR=/home/$USER/tmp
else
        # You may wish to remove this line, it is there in case
        # a user has put a file 'tmp' in there directory or a
        rm -rf /home/$USER/tmp 2> /dev/null
        mkdir -p /home/$USER/tmp
        TMPDIR=$(mktemp -d /home/$USER/tmp/XXXX)
fi

TMP=$TMPDIR
TEMP=$TMPDIR

export TMPDIR TMP TEMP

Pour en faire un véritable répertoire tmp (comme les fichiers disparaissent à la fin de la session, vous voudrez éditer le .bash_logout de l'utilisateur ainsi que le squelette .bash_logout (/etc/skel/.bash_logout) pour inclure les éléments suivants :

if [ -O $TMPDIR && -d $TMPDIR ]; then
        rm -rf $TMPDIR/*
fi

La partie de déconnexion est dangereuse, la variable n'est pas définie et vous êtes connecté en tant que root! Je n'ajouterais pas cela au compte root ou à toute personne membre du groupe Wheel! Procédez à votre propre prudence.

TrueDuality
la source
3
Je ne mettrais pas du tout le nettoyage dans .bash_logout - que se passe-t-il s'ils ouvrent deux sessions et se déconnectent d'une? Utilisez tmpwatch. :)
MikeyB
C'est une bien meilleure solution de nettoyage, merci d'avoir ajouté cela. :)
TrueDuality
NB: la tmpwatchcommande n'existe pas sur la version BSD (par exemple OSX) d'Unix, pour toute personne recherchant la portabilité. Mes boîtiers CentOS l'ont cependant. :)
Cometsong
8

Le fichier que vous recherchez est:

/etc/environment

Vous devez définir la variable TEMP comme:

TEMP=/home/user/tmp
cstamas
la source
2
Et mêmeexport TEMP=/home/user/tmp
Fedir RYKHTIK
@Fedir qui est dans le shell, oui.
cstamas
2

Si vous souhaitez /home/user/tmpêtre nettoyé au redémarrage, je vous suggère d'ajouter un @reboottravail au personnel de l'utilisateur crontab.

Teddy
la source
1

En C, j'utiliserais le tmpfile () pour un système posix, ce qui éviterait la collision. Je chercherais donc un appel Java similaire avant d'essayer de l'implémenter moi-même, si vous ne l'avez pas déjà fait.

Kyle Brandt
la source
Cela suppose qu'il est celui qui développe l'application
TrueDuality
TrueDuality: Ah, mon erreur
Kyle Brandt
1
Java a java.io.File.createTempFile. Maintenant, avec RNG sécurisé ajouté.
Tom Hawtin - tackline
1

Java utilise la propriété système java.io.tmpdirpour configurer le répertoire temporaire. Un JRE raisonnable définira cela sur une valeur sensible basée sur le système s'il n'est pas explicitement spécifié.

Tom Hawtin - sellerie
la source
1

Pour moi, cela a fonctionné lorsque j'essayais d'installer un fichier jar à l'aide de java.

export _JAVA_OPTIONS="-Djava.io.tmpdir=/apps/prod/tmp"

J'utilise un Red Hat Linux. /apps/prod/tmpétant le nouveau dossier.

sajan
la source