Jak zmienić domyślny / tmp na / home / user / tmp

14

Czy istnieje zmienna środowiskowa do ustawienia katalogu tymczasowego w systemach opartych na Debianie?

Mam aplet Java, który używa tej zmiennej środowiskowej i robi się niejasny podczas uruchamiania dwóch instancji tego samego apletu.

Dyskoteka
źródło

Odpowiedzi:

17

Nie jestem pewien, czy aplet java rzeczywiście spojrzy na zmienne środowiskowe przed jego uruchomieniem, ale co możesz zrobić, edytuj / etc / profile i dodaj następujące wiersze:

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

Aby stał się prawdziwym katalogiem tmp (jak w plikach znikają po zakończeniu sesji, będziesz musiał edytować .bash_logout użytkownika oraz szkielet .bash_logout (/etc/skel/.bash_logout), aby uwzględnić następujące :

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

Wylogowanie jest niebezpieczne, ponieważ zmienna nie zostanie ustawiona, a użytkownik zalogowany jako root! Nie dodałbym tego do konta root ani nikogo, kto jest członkiem grupy kół! Postępuj zgodnie z własną ostrożnością.

TrueDuality
źródło
3
W ogóle nie umieściłem czyszczenia w .bash_logout - co się stanie, jeśli otworzą dwie sesje i wylogują się z jednej? Użyj tmpwatch. :)
MikeyB,
To znacznie lepsze rozwiązanie do czyszczenia, dzięki za dodanie tego. :)
TrueDuality,
Uwaga: tmpwatchpolecenie nie istnieje w wersji uniksowej BSD (np. OSX) dla każdego, kto wybiera przenośność. Moje pudełka CentOS mają to. :)
Cometsong
8

Plik, którego szukasz to:

/etc/environment

Musisz ustawić zmienną TEMP w następujący sposób:

TEMP=/home/user/tmp
cstamas
źródło
2
A nawetexport TEMP=/home/user/tmp
Fedir RYKHTIK
@Fedir, który jest w powłoce, tak.
cstamas
2

Jeśli chcesz /home/user/tmpzostać wyczyszczony przy ponownym uruchomieniu, sugeruję dodanie @rebootzadania do osobistego użytkownika crontab.

Miś
źródło
1

W C użyłbym wywołania tmpfile () dla systemu posix, który uniknąłby kolizji. Więc szukałbym podobnego wywołania Java, zanim spróbuję go zaimplementować, jeśli jeszcze tego nie zrobiłeś.

Kyle Brandt
źródło
Zakłada się, że to on opracowuje aplikację
TrueDuality
TrueDuality: Ach, mój błąd
Kyle Brandt
1
Java ma java.io.File.createTempFile. Teraz z dodanym bezpiecznym RNG.
Tom Hawtin - tackline
1

Java używa właściwości systemowej java.io.tmpdirdo skonfigurowania katalogu tymczasowego. Rozsądne środowisko JRE ustawi wartość rozsądną na podstawie systemu, jeśli nie zostanie to wyraźnie określone.

Tom Hawtin - tackline
źródło
1

Dla mnie to zadziałało, gdy próbowałem zainstalować plik jar za pomocą Java.

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

Używam Red Hat Linux. /apps/prod/tmpbędący nowym folderem.

Sajan
źródło