Como criar um arquivo temporário com permissões "normais"?

Como criar um arquivo temporário com permissões "normais"?

Em um script de construção, quero criar um arquivo temporário que tenha um nome gerado exclusivo, gravar alguns dados nele e renomear esse arquivo com seu nome final (a razão para esse procedimento é que quero que a renomeação aconteça (principalmente ) atômico).

Mas se eu usar mktemp, o novo arquivo terá permissões bem restritivas:

Os arquivos são criados u+rw e os diretórios u+rwx, menos as restrições umask.

... e essas permissões serão preservadas quando o arquivo for renomeado. No entanto, quero que o arquivo resultante tenha permissões "normais"; isto é, ele deve ter as mesmas permissões que os arquivos criados por touchou por um redirecionamento de shell.

Qual é a maneira recomendada para conseguir isso? Existe uma alternativa (comum) para mktemp; ou existe uma maneira simples e confiável de alterar as permissões do arquivo para as umaskpermissões normais posteriormente?

Responder1

Você pode usar chmod =rw "$file"depois de criar o arquivo temporário. OPágina de manual do GNUdiz:

Uma combinação de letras ugoacontrola quais usuários o acesso ao arquivo será alterado: [...] Se nada disso for fornecido, o efeito é como se (a) fosse fornecido, mas os bits definidos no umask não são afetado.

Portanto, =rwconcede permissões de leitura e gravação reduzidas pelo umask, semelhante a passar 0666como argumento de permissão para open(), que é o que touch filename, por exemplo, ou echo > filenamefaria.

Aquilo é umRecurso POSIX, então outras implementações também devem apoiá-lo.

Responder2

Use este link para obter as permissões desejadashttp://permissions-calculator.org/

Manual

Crie um arquivo de script que crie um novo arquivo e altere suas permissões.

#!/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

Depois de tornar o script executável chmod +x myscript.sh, execute o arquivo de script assim./myscript.sh tempfile 600

Usando Umask (não recomendado)

você pode alterar temporariamente as permissões de arquivo padrão usando, umask 600por exemplo.

Para alterar permanentemente as permissões de arquivo padrão, edite seu arquivo .bashrc no diretório raiz do usuário.

nano ~/.bashrc

adicione umask 600ao final do arquivo. Claro, certifique-se de corresponder às permissões desejadas. Certifique-se de editar o usuário correto também.

Se for para um script de construção, eu usaria o método manual em vez de confiar no umask. Especialmente se o seu script de construção for usado em sistemas diferentes.

informação relacionada