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.
¿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.
mktemp
simplemente 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. mktemp
La página del manual dice que
si TEMPLATE no se especifica,
--tmpdir
se supone, si--tmpdir
no se especifica,/tmp
se supone.
Esto significa que simplemente ejecutando mktemp
creará un archivo llamado tmp.RANDOM_STRING
en el directorio / tmp . Entonces, sí, la ejecución mktemp
sin parámetros creará un archivo que se borrará junto con todo lo demás de /tmp
manera dependiente del sistema. Para tales archivos, la $TMPTIME
variable será importante como se explica en la respuesta de Chris a continuación. Para muchas distribuciones, el valor predeterminado es borrar /tmp
cada arranque porque $TMPTIME
está 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 fooXXX
a continuación, un archivo llamado fooXXX
se crea en el directorio actual en el que XXX
se 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 /tmp
que el sistema elimina automáticamente, no hay ningún bit mágico que pueda establecer que especifique un archivo temporal, los archivos externos /tmp
y 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
tmp
se borra el directorio, sino cuándo se eliminan los archivos creados conmktemp
. Como puede ver, los dos no están necesariamente relacionados :).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 generaltmpwatch
.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
fuente
mktemp
se puede ejecutar en cualquier directorio y simplemente produce un nombre de archivo arbitrario, no veo cómo esto tiene algo que ver en absolutotmpwatch
.mktemp
crea archivos en/tmp/
.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.
fuente
TMPTIME
?/tmp
u otros directorios tmp. No solo eliminará al azar los archivos creados por el usuario.mktemp
crea archivos en/tmp/
.