Respostas:
Hã? 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.
mktempapenas adiciona uma sequência aleatória para criar um nome de arquivo exclusivo. Ninguém vai removê-lo automaticamente.
Como parece haver um pouco de argumento, vamos entrar em mais detalhes. mktempA página de manual de
se TEMPLATE não for especificado,
--tmpdirserá assumido, se--tmpdirnão for especificado,/tmpserá assumido.
Isso significa que a simples execução mktempcriará um arquivo chamado tmp.RANDOM_STRING no diretório / tmp . Portanto, sim, executar mktempsem parâmetros criará um arquivo que será limpo junto com tudo o mais de /tmpuma maneira dependente do sistema. Para esses arquivos, a $TMPTIMEvariável será importante, conforme explicado na resposta de Chris abaixo. Para muitas distribuições, o padrão é limpar /tmpcada inicialização porque $TMPTIMEestá 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ê faz especificar um modelo, por exemplo mktemp fooXXX, em seguida, um arquivo chamado fooXXXé criado no diretório atual, onde XXXé 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 os que /tmpsão automaticamente excluídos pelo sistema, não há um bit mágico que você possa definir que especifique um arquivo temporário, os arquivos externos /tmpe seus tipos não serão excluídos automaticamente.
Para responder à sua pergunta principal, é claro que é estranho depender de um arquivo que possa desaparecer, é por isso que as pessoas não dependem dos arquivos tmp, elas são criadas para armazenar dados temporariamente e podemos esquecê-los. Existem várias maneiras de criar um arquivo persistente e nomeado aleatoriamente. Por exemplo:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmpdiretório foi limpo, mas quando os arquivos criados com mktempforam excluídos. Como você pode ver, os dois não estão necessariamente relacionados :).
Lembre-se de que os arquivos temporários podem ser removidos durante a inicialização do sistema ou conforme TMPTIME. Por favor, veja o que você tem /etc/cron.daily/tmpwatch.
/var/tmp/por outro lado, é geralmente imune a tmpwatch.
Arquivos temporários são criados por (geralmente) um curto período de tempo. Eles têm nome temporário, portanto, não é fácil executar ataques de tempo e geralmente são excluídos quando não são mais necessários pelo programa. Normalmente, seu script manteria esse arquivo por um período muito curto, geralmente processando algum texto ou outros arquivos e o removeria assim que não fosse necessário. Se o seu script travar, você também deverá recorrer aos procedimentos de limpeza da pasta / tmp (se foi aí que decidiu colocá-los).
Você não precisa criar um arquivo temporário no /tmp
mktemppode ser executado em qualquer diretório e simplesmente produz um nome de arquivo arbitrário, não vejo como isso tem alguma coisa a ver tmpwatch.
mktempcria arquivos no /tmp/.
Os arquivos temporários não desaparecem por conta própria. Eles são chamados de arquivos temporários simplesmente porque em seu script ou sessão ou em qualquer lugar em que você os esteja criando, é esperado que você os exclua quando terminar. Ou deixe-os deitados, se é isso que você gosta. O mktemp existe apenas para permitir que você crie um arquivo chamado algo único, para que não substitua algum arquivo existente.
TMPTIME?
/tmpou outros diretórios tmp. Não apenas exclui aleatoriamente os arquivos criados pelo usuário.
mktempcria arquivos no /tmp/.