Como alterar o padrão / tmp para / home / user / tmp

13

Existe uma variável de ambiente para definir o diretório temporário em sistemas baseados em debian?

Eu tenho um applet java que usa essa variável de ambiente e está ficando confuso ao iniciar duas instâncias do mesmo applet.

Disco
fonte

Respostas:

17

Não tenho certeza se o applet java realmente analisará as variáveis ​​de ambiente antes de iniciar, mas o que você pode fazer é editar / etc / profile e adicionar as seguintes linhas:

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

Para torná-lo um diretório tmp verdadeiro (como nos arquivos desaparecem quando a sessão termina, convém editar o .bash_logout do usuário e o esqueleto .bash_logout (/etc/skel/.bash_logout) para incluir o seguinte :

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

A parte do logout é perigosa, a variável não é definida e o seu logon como root! Eu não adicionaria isso à conta raiz ou a qualquer um que seja membro do grupo wheel! Prossiga com seu próprio cuidado.

TrueDuality
fonte
3
Eu não colocaria a limpeza em .bash_logout - o que acontece se eles abrirem duas sessões e sairem de uma? Use tmpwatch. :)
MikeyB 10/10/09
Essa é uma solução de limpeza muito melhor, obrigado por adicionar isso. :)
TrueDuality 16/10/2009
Nota: o tmpwatchcomando não existe na versão BSD (por exemplo, OSX) do unix, para quem quer portabilidade. Minhas caixas do CentOS possuem. :)
Cometsong
8

O arquivo que você está procurando é:

/etc/environment

Você precisa definir a variável TEMP como:

TEMP=/home/user/tmp
cstamas
fonte
2
E mesmo #export TEMP=/home/user/tmp
Fedir RYKHTIK
@ Fedir que está no shell, sim.
Cstamas 02/07/2014
2

Se você deseja /home/user/tmpser limpo na reinicialização, sugiro que você adicione um @reboottrabalho ao pessoal do usuário crontab.

Urso de pelúcia
fonte
1

Em C, eu usaria a chamada tmpfile () para um sistema posix, o que evitaria a colisão. Então, eu procuraria uma chamada Java semelhante antes de tentar implementá-la, se você ainda não o fez.

Kyle Brandt
fonte
Isso pressupõe que ele é o desenvolvimento da aplicação
TrueDuality
TrueDuality: Ah, meu erro #
Kyle Brandt
1
Java tem java.io.File.createTempFile. Agora com RNG seguro adicionado.
Tom Hawtin - tackline
1

Java usa a propriedade do sistema java.io.tmpdirpara configurar o diretório temporário. Um JRE razoável definirá esse valor para um valor razoável com base no sistema, se não for especificado explicitamente.

Tom Hawtin - linha de orientação
fonte
1

Para mim, isso funcionou quando eu estava tentando instalar um arquivo jar usando java.

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

Eu uso um Red Hat Linux. /apps/prod/tmpsendo a nova pasta.

sajan
fonte