Como evito que uma pasta dentro de / tmp seja limpa?

11

Esta questão é sobre o Ubuntu 14.10 no meu laptop de desenvolvedor.

Eu tenho uma pasta em /tmp que é usada por um aplicativo para colocar coisas temporárias lá. Esta aplicação geralmente faz uma pasta temporária no meu homedir e apaga depois. Por alguma razão, isso não funciona quando o homedir é criptografado. Então, ao invés disso, eu fiz um link simbólico para /tmp/foo dentro do meu homedir. Meu aplicativo pode escrever lá e torná-lo subpasta temporária.

Agora, /tmp/foo é excluído toda vez que eu reinicializo minha máquina. Até agora eu apenas recriou a pasta manualmente após a reinicialização. Agora eu aprendi em Como o diretório / tmp foi limpo? há um trabalho fazendo isso.

Eu olhei para /etc/init/mounted-tmp.conf mas meu bashfu e especialmente meu findfu não são suficientes para fazer o que eu quero. Aqui está um trecho desse arquivo:

   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

O que eu quero fazer é adicionar uma condição que faça com que seja excluído everyting dentro de /tmp/foo , mas não /tmp/foo em si. Como eu faço isso?

    
por simbabque 12.06.2015 / 15:45

5 respostas

20

/etc/init/mounted-tmp.conf faz parte do pacote mountall , portanto, todas as atualizações nesse pacote e as alterações sugeridas serão revertidas.

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

Em vez disso, de acordo com o padrão Hierachy Filesystem Hierachy (FHS) ;

Em relação a / tmp :

  

Os programas não devem presumir que quaisquer arquivos ou diretórios em / tmp sejam   preservado entre invocações do programa.

Em relação a / var / tmp :

  

O diretório / var / tmp é disponibilizado para programas que requerem arquivos temporários ou diretórios que são preservados entre as reinicializações do sistema.   Portanto, os dados armazenados em / var / tmp são mais persistentes que os dados em / tmp.

Portanto, você deve alterar seu link simbólico para usar /var/tmp em vez de /tmp .

    
por mgor 12.06.2015 / 18:07
8

Não é estritamente uma resposta à sua pergunta, mas você pode achar o /var/tmp como um local mais adequado, já que ele não é limpo durante a reinicialização. Ele foi projetado para arquivos temporários que não devem ser descartados automaticamente após um curto período de tempo.

O que eu frequentemente faço, no entanto, é criar uma pasta em / opt para armazenar coisas aleatórias que não quero em casa. Esse é um local adequado para colocar coisas que estão fora do controle do sistema operacional principal.

    
por Andrew Aylett 12.06.2015 / 18:28
6

Assim:

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

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

Exemplo:

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

Eu concordo com o usuário aap: Você deve cuidar disso no software usado recriando o diretório lá se eles forem arquivos tmp ou usar outro diretório se eles não forem arquivos tmp que não são eliminados.

    
por Rinzwind 12.06.2015 / 16:11
0

É uma má idéia ter arquivos com valor futuro, escrever no diretório / tmp (/ var / tmp, como sugerido por outros, é um lugar melhor). Dito isto, você pode querer dar uma chance ao chattr. Isso deve ser executado após a saída do aplicativo, mas antes de um desligamento. Lembre-se que esta operação não permitirá que qualquer coisa escreva para esse diretório daqui em diante.

toque em /tmp/foo/ddmmyy/.001_immute_me chattr + i /tmp/foo/ddmmyy/.001_immute_me

    
por Hopping Bunny 19.06.2015 / 06:40
-1

Execute isto:

echo "if [ ! -e /etc/foo/ ]; then mkdir /etc/foo/; fi; rm -rf /etc/foo/*" > /bin/foodel; sudo chmod 755 /bin/foodel 

adicione isto ao / etc / inittab veja aqui: onde está o inittab arquivo? :

foo:2345:boot:/bin/foodel

Isso criará o / etc / foo no boot, se ele não existir, e então o esvaziará.

Isso fará o mesmo no login do bash:

echo "/bin/foodel" >> ~/.bashrc
    
por Daniel 12.06.2015 / 19:01

Tags