Si tiene que escribir algunos archivos temporales que sólo duran tanto como la secuencia de comandos o la aplicación se está ejecutando, utilice el directorio indicado por la TMPDIR
variable de entorno, o si no se define esta variable, /tmp
.
/tmp
se borra en el momento del arranque en algunos sistemas (a veces incluso está en la RAM, por ejemplo, en Solaris y en algunas instalaciones de Linux), por lo que no se puede usar para archivos que deben sobrevivir a una falla de energía o un reinicio. /var/tmp
se puede usar para archivos que deben sobrevivir al reinicio, pero que el administrador del sistema puede limpiar de vez en cuando. Si su aplicación necesita guardar archivos de manera permanente, escríbalos en algún lugar del directorio de inicio del usuario (en ~/.programmingnoobsapp
o ~/.cache/programmingnoobsapp
) o debajo de /var/lib/programmingnoobsapp
o /var/cache/programmingnoobsapp
.
Tenga en cuenta que /tmp
se comparte entre todos los usuarios, por lo que debe tomar precauciones al crear un archivo allí. Debe elegir un nombre de archivo que aún no existe, y debe tener cuidado de no permitir una condición de carrera en la que otro proceso cree el archivo por delante con diferentes permisos, lo que podría ser un agujero de seguridad (si el otro proceso se ejecuta como un usuario diferente, podría acceder y modificar los datos de su proceso). Use el mktemp
comando para crear un archivo en /tmp
o /var/tmp
. De manera predeterminada, mktemp
crea un archivo $TMPDIR
, o /tmp
si no TMPDIR
está configurado, que generalmente es el lugar correcto. Si necesita usar varios archivos temporales, o incluso si necesita uno solo, le recomiendo crear un directorio para todos sus archivos temporales conmktemp -d
y eliminarlo al final de su secuencia de comandos.
#!/bin/sh
tmp_root=
trap 'rm -rf "$tmp_root"' EXIT INT TERM HUP
tmp_root=$(mktemp -d)
tmpfile1=$tmp_root/file1
tmpfile2=$tmp_root/file2
…