sistemas sistema propósito principales los listar funcionamiento for filesystem especial caracteristicas archivos linux filesystems

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:

http://linux.die.net/man/1/mktemp

http://linux.die.net/man/1/touch


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á.