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