
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 touch
ou 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 umask
permissõ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
ugoa
controla 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, =rw
concede permissões de leitura e gravação reduzidas pelo umask, semelhante a passar 0666
como argumento de permissão para open()
, que é o que touch filename
, por exemplo, ou echo > filename
faria.
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 600
por 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 600
ao 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.