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
TMPDIRvariable de entorno, o si no se define esta variable,/tmp./tmpse 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/tmpse 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~/.programmingnoobsappo~/.cache/programmingnoobsapp) o debajo de/var/lib/programmingnoobsappo/var/cache/programmingnoobsapp.Tenga en cuenta que
/tmpse 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 elmktempcomando para crear un archivo en/tmpo/var/tmp. De manera predeterminada,mktempcrea un archivo$TMPDIR, o/tmpsi noTMPDIRestá 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 -dy 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 citaFHStiene un gran valor también.tmp_rootantes 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 errexitpor lo que sitmp_rootya 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/shmalgunas 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/shmque utiliza eltmpfssistema de archivos. También debe usarse para archivos y datos de tamaño razonable. Eltmpfssistema 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í,
/tmpes 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