¿Cómo crear un archivo temporal que tenga permisos "normales"?

¿Cómo crear un archivo temporal que tenga permisos "normales"?

En un script de compilación, quiero crear un archivo temporal que tenga un nombre generado único, luego escribirle algunos datos y luego cambiar el nombre de ese archivo a su nombre final (la razón de este procedimiento es que quiero que se realice el cambio de nombre (principalmente). ) atómico).

Pero si uso mktemp, el nuevo archivo tendrá permisos muy restrictivos:

Los archivos se crean u+rw y los directorios u+rwx, menos las restricciones de umask.

... y estos permisos se conservarán cuando se cambie el nombre del archivo. Sin embargo, quiero que el archivo resultante tenga permisos "normales"; es decir, debería tener los mismos permisos que los archivos creados por touchuna redirección de shell.

¿Cuál es la forma recomendada de lograr esto? ¿Existe una alternativa (común) a mktemp; ¿O existe una forma sencilla y confiable de cambiar los permisos del archivo a los umaskpermisos normales posteriormente?

Respuesta1

Puede usarlo chmod =rw "$file"después de crear el archivo temporal. ElPágina de manual de GNUdice:

Una combinación de letras ugoacontrola qué acceso de los usuarios al archivo se cambiará: [...] Si no se da ninguna de estas, el efecto es como si se diera (a), pero los bits que se configuran en la umask no se afectado.

Por lo tanto, =rwotorga permisos de lectura y escritura reducidos por la umask, similar a pasar 0666como argumento de permisos a open(), que es lo que touch filename, por ejemplo, o echo > filenameharía.

Eso es uncaracterística POSIX, por lo que otras implementaciones también deberían admitirlo.

Respuesta2

Utilice este enlace para obtener los permisos que deseehttp://permissions-calculator.org/

Manual

Cree un archivo de secuencia de comandos que cree un archivo nuevo y luego cambie sus permisos.

#!/bin/bash

Filename=$1
Perms=$2

#Create a temp file
touch $Filename

#Change the file's permissions (Use your own desired permissions)
chmod $Perms $Filename

Después de hacer que el script sea ejecutable chmod +x myscript.sh, ejecute el archivo de script de esta manera./myscript.sh tempfile 600

Usando Umask (no recomendado)

puede cambiar temporalmente los permisos de archivo predeterminados usando, umask 600por ejemplo.

Para cambiar permanentemente los permisos de archivo predeterminados, edite su archivo .bashrc en el directorio raíz de su usuario.

nano ~/.bashrc

agregar umask 600al final del archivo. Por supuesto, asegúrese de coincidir con los permisos deseados. Asegúrese de editar también el usuario correcto.

Si esto es para un script de compilación, usaría el método manual en lugar de confiar en umask. Especialmente si su script de compilación se utilizará en diferentes sistemas.

información relacionada