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.
mktemp
apenas 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. mktemp
A página de manual de
se TEMPLATE não for especificado,
--tmpdir
será assumido, se--tmpdir
não for especificado,/tmp
será assumido.
Isso significa que a simples execução mktemp
criará um arquivo chamado tmp.RANDOM_STRING
no diretório / tmp . Portanto, sim, executar mktemp
sem parâmetros criará um arquivo que será limpo junto com tudo o mais de /tmp
uma maneira dependente do sistema. Para esses arquivos, a $TMPTIME
variável será importante, conforme explicado na resposta de Chris abaixo. Para muitas distribuições, o padrão é limpar /tmp
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ê 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 /tmp
sã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 /tmp
e 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
tmp
diretório foi limpo, mas quando os arquivos criados com mktemp
foram 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
mktemp
pode 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
.
mktemp
cria 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
?
/tmp
ou outros diretórios tmp. Não apenas exclui aleatoriamente os arquivos criados pelo usuário.
mktemp
cria arquivos no /tmp/
.