So ändern Sie die Standardeinstellung / tmp in / home / user / tmp

13

Gibt es eine Umgebungsvariable, um das temporäre Verzeichnis auf Debian-basierten Systemen festzulegen?

Ich habe ein Java-Applet, das diese Umgebungsvariable verwendet, und es wird verwirrt, wenn zwei Instanzen desselben Applets gestartet werden.

Disko
quelle

Antworten:

17

Ich bin nicht sicher, ob das Java-Applet tatsächlich die Umgebungsvariablen überprüft, bevor es gestartet wird, aber was Sie tun können, bearbeiten Sie / etc / profile und fügen Sie die folgenden Zeilen hinzu:

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

Um daraus ein echtes tmp-Verzeichnis zu machen (da die Dateien nach Beendigung der Sitzung nicht mehr angezeigt werden), müssen Sie das .bash_logout des Benutzers sowie das .bash_logout-Gerüst (/etc/skel/.bash_logout) so bearbeiten, dass es Folgendes enthält :

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

Der Logout-Teil ist gefährlich, da die Variable nicht gesetzt wird und Sie als root angemeldet sind! Ich würde das nicht zum Root-Account hinzufügen oder jemandem, der Mitglied der Wheel-Gruppe ist! Fahren Sie nach eigenem Ermessen fort.

TrueDuality
quelle
3
Ich würde die Bereinigung überhaupt nicht in .bash_logout ablegen. Was passiert, wenn zwei Sitzungen geöffnet und eine beendet wird? Verwenden Sie tmpwatch. :)
MikeyB
Das ist eine viel bessere Bereinigungslösung, danke für das Hinzufügen. :)
TrueDuality
NB: Der tmpwatchBefehl existiert nicht in der BSD-Version (zB OSX) von Unix, für alle, die Portabilität anstreben. Meine CentOS-Boxen haben es allerdings. :)
Cometsong
8

Die Datei, die Sie suchen, ist:

/etc/environment

Sie müssen die TEMP-Variable wie folgt einstellen:

TEMP=/home/user/tmp
cstamas
quelle
2
Und selbstexport TEMP=/home/user/tmp
Fedir RYKHTIK
@Fedir das ist in der Shell, ja.
Cstamas
2

Wenn Sie /home/user/tmpbeim Neustart bereinigt werden möchten , empfehlen wir Ihnen, einen @rebootJob zum persönlichen des Benutzers hinzuzufügen crontab.

Teddy
quelle
1

In C würde ich den Aufruf tmpfile () für ein Posix-System verwenden, um die Kollision zu vermeiden. Daher würde ich nach einem ähnlichen Java-Aufruf suchen, bevor ich ihn selbst implementiere, falls Sie dies noch nicht getan haben.

Kyle Brandt
quelle
Dies setzt voraus, dass er derjenige ist, der die Anwendung entwickelt
TrueDuality
TrueDuality: Ah, mein Fehler
Kyle Brandt
1
Java hat java.io.File.createTempFile. Jetzt mit zusätzlichem sicheren RNG.
Tom Hawtin - Tackline
1

Java verwendet die Systemeigenschaft java.io.tmpdir, um das temporäre Verzeichnis zu konfigurieren. Eine vernünftige JRE setzt dies auf einen sinnvollen Wert basierend auf dem System, wenn dies nicht explizit angegeben wird.

Tom Hawtin - Tackline
quelle
1

Bei mir hat das funktioniert, als ich versucht habe, eine JAR-Datei mit Java zu installieren.

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

Ich benutze ein Red Hat Linux. /apps/prod/tmpder neue Ordner sein.

sajan
quelle