propósito - sistema de archivos linux
¿Por qué necesitamos mktemp? (6)
A menudo quiere un "archivo de scratchpad" (o directorio). Además, es posible que necesite varios de estos archivos al mismo tiempo, y no quiere molestarse en averiguar cómo nombrarlos para que no haya conflicto.
"mktemp" se ajusta a la ley :)
No entiendo la función de mktemp
y lo que significa un archivo temporal.
¿Cuál es la diferencia entre, digamos, touch xyz
y mktemp xyz
(aparte del hecho de que mktemp
creará algún archivo con xxx anexado y tendrá 600 permisos?)
Por favor aclara
Al menos en el shell bash, puedes hacer algo como:
dirpath="/tmp/dir1-$$/dir2-$$"
mkdir -p $dirpath
chmod -R 0700 /tmp/dir1-$$
por ejemplo.
De hecho, está escrito claramente en páginas man.
mktemp: crea un archivo o directorio temporal.
Cree un archivo o directorio temporal, de forma segura, e imprima su nombre.
Crear un archivo o directorio de forma segura significa que ningún otro usuario puede acceder a él, es por eso que su permiso es 600
toque - cambie las marcas de tiempo del archivo
Simplemente cambia las marcas de tiempo de un archivo si ya está creado y crea un archivo si no existe. Pero el permiso de archivo sigue siendo 644 por defecto.
Para obtener más información, consulte las siguientes páginas man:
Una razón más: no todos los sistemas usan /tmp
como directorio temporal. Por ejemplo https://termux.com/ debido a razones técnicas (se ejecuta como procesos dentro de Android), tiene una ruta larga diferente ya que es el directorio tmp.
Los scripts que crean archivos temporales o directorios usando mktemp
serán portátiles y también funcionarán en dichos entornos especiales.
Usted mismo lo respondió: mktemp()
garantiza un nombre único.
http://linux.die.net/man/3/mktemp
La función mktemp () genera un nombre de archivo temporal único a partir de la plantilla. Los últimos seis caracteres de la plantilla deben ser XXXXXX y se reemplazan por una cadena que hace único el nombre del archivo.
Pero, como señala el comentario de @ MarcB (y la página man), no debe usarlo: en su lugar, debe usar mkstemp() .
mktemp
aleatoriza el nombre. Es muy importante desde el punto de vista de la seguridad.
Solo imagina que haces algo como:
echo something > /tmp/temporary-file
en su script de ejecución de la raíz.
Y alguien (que ha leído tu guión) lo hace
ln -s /etc/passwd /tmp/temporary-file
antes de.
El comando mktemp
podría ayudarte en esta situación:
TEMP=$(mktemp /tmp/temporary-file.XXXXXXXX)
echo something > ${TEMP}
Ahora este ataque ln /etc/passwd
no funcionará.