
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 touch
una 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 umask
permisos 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
ugoa
controla 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, =rw
otorga permisos de lectura y escritura reducidos por la umask, similar a pasar 0666
como argumento de permisos a open()
, que es lo que touch filename
, por ejemplo, o echo > filename
harí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 600
por 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 600
al 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.