Por quanto tempo os arquivos temporários feitos com o mktemp duram?

12

Eu queria saber quanto tempo os arquivos temporários criaram com o mktemp por último. Parece-me estranho confiar em um arquivo que pode desaparecer a qualquer momento. Eu estou no Ubuntu, se for importante.

    
por MYV 29.05.2013 / 22:31

3 respostas

14

Huh? De man mktemp :

DESCRIPTION
   Create  a  temporary  file  or directory, safely, and
   print its name.  TEMPLATE must  contain  at  least  3
   consecutive  'X's  in last component.  If TEMPLATE is
   not specified, use tmp.XXXXXXXXXX,  and  --tmpdir  is
   implied.   Files  are  created  u+rw, and directories
   u+rwx, minus umask restrictions.

mktemp apenas adiciona uma string aleatória para criar um nome de arquivo exclusivo. Ninguém vai removê-lo automaticamente.

Já que parece haver um pouco de discussão, vamos entrar em mais detalhes. A página man do mktemp afirma que

if TEMPLATE is not specified, --tmpdir is assumed, if --tmpdir is not specified, /tmp is assumed.

Isso significa que simplesmente executar mktemp criará um arquivo chamado tmp.RANDOM_STRING no diretório / tmp . Então, sim, executar mktemp sem parâmetros criará um arquivo que será limpo juntamente com tudo o mais em /tmp de maneira dependente do sistema. Para esses arquivos, a variável $TMPTIME será importante, conforme explicado na resposta de Chris abaixo. Para muitas distribuições, o padrão é limpar /tmp a cada inicialização porque $TMPTIME está definido como 0 . Na maioria das distribuições (se não todas), isso é definido no arquivo /etc/default/rcS :

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

Agora, se você fizer especificar um TEMPLATE, por exemplo, mktemp fooXXX , um arquivo chamado fooXXX será criado no diretório atual, em que XXX será substituído por três caracteres aleatórios. Este arquivo nunca será excluído, a menos que você tenha escolhido especificamente fazê-lo. Somente arquivos nos diretórios temporários "oficiais", como /tmp , são automaticamente excluídos pelo sistema, não há mágica que você possa conjunto que especifica um arquivo temporário, os arquivos fora de /tmp e seu tipo não são excluídos automaticamente.

Para responder a sua pergunta principal, é claro que é estranho depender de um arquivo que pode desaparecer, é por isso que as pessoas não dependem de arquivos tmp, elas são criadas para armazenar dados temporariamente e podemos esquecê-los. Há muitas maneiras de criar um arquivo persistente e nomeado aleatoriamente. Por exemplo:

echo "foo" > $RANDOM.txt
echo "foo" > 'mktemp fooXXX.txt'
echo "foo" > $$.txt
    
por 29.05.2013 / 22:35
6

Lembre-se de que os arquivos temporários podem ser removidos durante a inicialização do sistema ou conforme o TMPTIME. Por favor, veja o que você tem em /etc/cron.daily/tmpwatch .

/var/tmp/ , por outro lado, está imune a tmpwatch .

Os arquivos temporários são criados por (geralmente) curto período de tempo. Eles têm nome temporário, por isso não é fácil executar ataques de temporização e geralmente eles são excluídos quando não são mais necessários pelo programa. Normalmente, seu script manteria esse arquivo por um curto período de tempo, geralmente processando algum texto ou outros arquivos, e o removeria assim que não fosse necessário. Se o seu script travasse, você também teria que recorrer aos procedimentos de arrumação da pasta / tmp (se é onde você decidiu colocá-los).

Você não precisa criar um arquivo temporário em /tmp

    
por 29.05.2013 / 22:50
1

Os arquivos temporários não desaparecem sozinhos. Eles são chamados de arquivos temporários simplesmente porque, no seu script ou sessão, ou onde quer que você os esteja produzindo, é esperado que você os exclua quando terminar. Ou deixá-los por aí, se é isso que você gosta. O mktemp existe unicamente para permitir que você crie um arquivo com um nome único, para que ele não sobrescreva algum arquivo existente.

    
por 29.05.2013 / 22:35