Estoy empezando a escribir algunos scripts de bash para mi proyecto y necesitan algunos archivos intermedios o variables para ser escritos.
¿Quiero saber a qué carpetas puedo estar seguro de tener acceso cuando alguien ejecuta mi script? ¿Es una práctica común de usar /tmp/
? ¿O debería usar algo más?
scripting
filesystems
directory-structure
tmp
Programación de novatos
fuente
fuente
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 elmktemp
comando para crear un archivo en/tmp
o/var/tmp
. De manera predeterminada,mktemp
crea un archivo$TMPDIR
, o/tmp
si noTMPDIR
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.fuente
mktemp
. Para mí, esta es la respuesta correcta: delegar la tarea de crear de manera segura un archivo temporal paramktemp
(vea este artículo ). Aunque la única respuesta que citaFHS
tiene un gran valor también.tmp_root
antes de asignarlo? ¿No sería más naturalunset
?set -u
, pero eso es poco común). Debe (des) establecerse en un valor seguro antes de configurar la trampa, en caso de que el script se elimine justo después de configurar la trampa.set -o errexit
por lo que sitmp_root
ya está establecido de sólo lectura en el medio ambiente y no os destruirá el directorio equivocado ...Solo para complementar las respuestas que ya se han publicado hasta ahora.
También hay
/dev/shm
algunas distribuciones de Linux que se pueden usar para almacenamiento temporal. Este almacenamiento solo debe usarse cuando el rendimiento del archivo I / O es un factor crítico dado/dev/shm
que utiliza eltmpfs
sistema de archivos. También debe usarse para archivos y datos de tamaño razonable. Eltmpfs
sistema de archivos utiliza una RAM del sistema como almacenamiento, por lo que no es persistente de arranque a arranque.Hay una buena descripción general de todas las opciones mencionadas aquí en StackOverflow también en este Q&A titulado: / tmp vs. / dev / shm para el almacenamiento de archivos temporales en Linux. . Está bien cubierto en este SuperUser Q&A titulado: ¿ Cuándo debo usar / dev / shm / y cuándo debo usar / tmp? .
Referencias
fuente
Sí,
/tmp
es principalmente para archivos que se requieren temporalmente. El / tmp tiene un bit fijo que significa que solo el propietario del elemento, el propietario del directorio o el superusuario pueden cambiar el nombre o eliminar archivos. muchos programas usan esto para crear archivos de bloqueo y para el almacenamiento temporal de datos. En alguna distribución, este directorio se borra en el arranque o apagado.fuente