Quanto tempo duram os arquivos temporários criados com o mktemp?

20

Eu queria saber quanto tempo arquivos temporários criados com mktemp última. Parece-me estranho confiar em um arquivo que pode desaparecer a qualquer momento. Estou no ubuntu, se isso importa.

MEU V
fonte

Respostas:

17

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
Terdon
fonte
2
Isso não responde à minha pergunta. Ele diz que cria um arquivo "temporário" e não fornece informações sobre quanto tempo dura. Então dura para sempre? O diretório tmp fica na inicialização do sistema?
MYV
@Maksim veja resposta atualizada. Além disso, sua pergunta não perguntou quando o 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 :).
Terdon #
6

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

Chris
fonte
Visto que 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.
terdon
1
Por padrão, mktempcria arquivos no /tmp/.
30513 Chris
somente se você não der um MODELO, veja minha resposta atualizada.
terdon 30/05
1

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.

EBGreen
fonte
Alguns sistemas não usam a TMPTIME?
recatada
@demure yes, mas apenas para limpar /tmpou outros diretórios tmp. Não apenas exclui aleatoriamente os arquivos criados pelo usuário.
Terdon #
Por padrão, mktempcria arquivos no /tmp/.
30513 Chris