
¿Necesito verificar y crear /tmp
antes de escribir en un archivo dentro de él? Supongamos que nadie ha huido sudo rm -rf /tmp
porque es un caso muy raro.
Respuesta1
ElFHSmandatos que /tmp
existen, al igual quePOSIXpor lo que puede confiar en que estará ahí (al menos en sistemas compatibles; pero en realidad está prácticamente garantizado que estará presente en sistemas tipo Unix). Pero no debería hacerlo: el administrador del sistema o el usuario pueden preferir otras ubicaciones para los archivos temporales. VerEncontrar el directorio tmp correcto en múltiples plataformaspara más detalles.
Respuesta2
En la práctica, /tmp
está prácticamente garantizado que exista. Sin embargo, incluso si existe, eso no significa que debas colocar archivos temporales allí.
ElestándarLa convención es utilizar la TMPDIR
variable de entorno. Si existe, apunta a un directorio para archivos temporales. Si no existe, coloque archivos temporales en /tmp
.
En un script de shell, puede usarlo "${TMPDIR:-/tmp}"
como ubicación del archivo temporal: esto se expande al valor de TMPDIR
si está configurado¹ y en /tmp
caso contrario. O puede configurarlo TMPDIR
condicionalmente en caso de que no esté configurado, con el comando
: "${TMPDIR:=/tmp}"
y luego crear archivos temporales dentro "$TMPDIR"
.
Tenga en cuenta que cualquier aplicación puede crear archivos en formato /tmp
o $TMPDIR
. Además, este directorio puede ser compartido entre usuarios, por lo que debes tener cuidado con los permisos al crear un archivo. Muchos sistemas (Linux, *BSD) tienen un comandomktemp
que crea archivos de forma segura en el directorio correcto. Generalmente es una buena idea usarlo mktemp
para crear archivos y directorios temporales, especialmente desde un script de shell, donde es imposible crear un archivo de forma segura en un directorio compartido debido a la posibilidad de ataques de enlaces simbólicos ( mkdir
está bien si maneja los errores correctamente).
¹ y no vacía: si la variable está vacía, entonces no se puede utilizar tal como está de todos modos y, en general, es una buena idea tratar las variables vacías o no configuradas de la misma manera si se supone que contienen un nombre de archivo.
Respuesta3
Aunque es muy probable que exista, deberías comprobarlo por otro motivo: no se garantiza que exista.grande. En muchos sistemas, /tmp
está respaldado por RAM en lugar de disco y es probable que esté limitado a unos pocos GB. (En los sistemas Fedora, es la mitad de la RAM de forma predeterminada). Por lo tanto, debe verificar no solo la existencia, sino también si hay espacio para colocar lo que quiera colocar allí.
Si tienes algo grande, usa /var/tmp/
.