¿Cuánto duran los archivos temporales creados con mktemp?

20

Me preguntaba cuánto tiempo duraron los archivos temporales creados con mktemp. Me parece extraño confiar en un archivo que podría desaparecer en cualquier momento. Estoy en Ubuntu, si importa.

MI V
fuente

Respuestas:

17

¿Eh? 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.

mktempsimplemente agrega una cadena aleatoria para crear un nombre de archivo único. Nadie lo va a eliminar automáticamente.


Como parece haber una pequeña discusión, entremos en más detalles. mktempLa página del manual dice que

si TEMPLATE no se especifica, --tmpdirse supone, si --tmpdirno se especifica, /tmpse supone.

Esto significa que simplemente ejecutando mktempcreará un archivo llamado tmp.RANDOM_STRING en el directorio / tmp . Entonces, sí, la ejecución mktempsin parámetros creará un archivo que se borrará junto con todo lo demás de /tmpmanera dependiente del sistema. Para tales archivos, la $TMPTIMEvariable será importante como se explica en la respuesta de Chris a continuación. Para muchas distribuciones, el valor predeterminado es borrar /tmpcada arranque porque $TMPTIMEestá configurado en 0. En la mayoría (si no todas) las distribuciones, esto se establece en el archivo /etc/default/rcS:

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

Ahora, si haces especificar una plantilla de, por ejemplo, mktemp fooXXXa continuación, un archivo llamado fooXXXse crea en el directorio actual en el que XXXse reemplaza por tres caracteres aleatorios. Este archivo nunca se eliminará a menos que usted elija hacerlo específicamente. Solo los archivos en los directorios temporales "oficiales", como los /tmpque el sistema elimina automáticamente, no hay ningún bit mágico que pueda establecer que especifique un archivo temporal, los archivos externos /tmpy sus características no se eliminan automáticamente.

Para responder a su pregunta principal, por supuesto, es extraño depender de un archivo que puede desaparecer, es por eso que las personas no dependen de los archivos tmp, se crean para almacenar datos temporalmente y luego podemos olvidarnos de ellos. Hay muchas formas de crear un archivo persistente y con nombre aleatorio. Por ejemplo:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
terdon
fuente
2
Esto no responde mi pregunta. Dice que crea un archivo "temporal" y no proporciona información sobre cuánto tiempo dura. ¿Entonces dura para siempre? ¿El directorio tmp se permea en el arranque del sistema?
MYV
@Maksim ver respuesta actualizada. Además, su pregunta no preguntó cuándo tmpse borra el directorio, sino cuándo se eliminan los archivos creados con mktemp. Como puede ver, los dos no están necesariamente relacionados :).
terdon
6

Recuerde que los archivos temporales pueden eliminarse durante el arranque del sistema o según TMPTIME. Por favor vea lo que tiene adentro /etc/cron.daily/tmpwatch.

/var/tmp/por otro lado, es inmune a lo general tmpwatch.

Los archivos temporales se crean (generalmente) por un período corto de tiempo. Tienen un nombre temporal, por lo que no es fácil ejecutar un ataque de temporización y, por lo general, se eliminan cuando el programa ya no lo necesita. Por lo general, su secuencia de comandos mantendrá este archivo durante un período de tiempo muy corto, generalmente procesará algunos archivos de texto u otros y lo eliminará tan pronto como no sea necesario. Si su script se bloqueara, entonces también tendría que recurrir a los procedimientos de mantenimiento de la carpeta / tmp (si es allí donde decidió colocarlos).

No tiene que crear un archivo temporal en /tmp

Chris
fuente
Como mktempse puede ejecutar en cualquier directorio y simplemente produce un nombre de archivo arbitrario, no veo cómo esto tiene algo que ver en absoluto tmpwatch.
terdon
1
Por defecto mktempcrea archivos en /tmp/.
Chris
solo si no da una PLANTILLA, vea mi respuesta actualizada.
terdon
1

Los archivos temporales no desaparecen solos. Se llaman archivos temporales simplemente porque en su secuencia de comandos o sesión o donde sea que los esté creando, se espera que los elimine cuando haya terminado. O déjalos por ahí si eso es lo tuyo. mktemp existe únicamente para permitirle crear un archivo que se llama algo único para que no sobrescriba algún archivo existente.

EBGreen
fuente
¿Algunos sistemas no usan un TMPTIME?
recatada
@demure yes pero solo para borrar /tmpu otros directorios tmp. No solo eliminará al azar los archivos creados por el usuario.
terdon
Por defecto mktempcrea archivos en /tmp/.
Chris