Calculando valor de umask corretamente!

Alan Victor Quarta, 17 de Dezembro de 2014


Existem alguns materiais na internet sobre o calculo de umask de forma octal com exceções para arquivos e diretórios, que de acordo com informações na internet é uma "GAMBIARRA" pois existem casos que o calculo não é exato. A melhor forma de calcular umask é fazendo operações binárias, primeiro passamos a mask para binário, depois fazemos uma operação NOT na mesma, depois fazemos um AND com o NOT da mask e a base de permissão, arquivos ou diretórios, segue:

Base: é a permissão máxima de um arquivo ou diretório entendido pelo umask.
arquivos = 666
diretórios = 777

Essas permissões base 'diferentes' foi propositalmente criadas pois num diretório, a permissão de execução é para entrar num diretório e a permissão de execução num arquivo ficou a critério do administrador do sistema setar em scripts, daemons, etc.

ex:
vamos pegar a umask 022
primeiro vamos passar essa umask para binário:
000 010 010

agora vamos fazer uma operação NOT na umask 022:
111 101 101

Agora passaremos para binário a BASE de arquivos que é 666:
passando 666 para binário temos:
110 110 110

Agora fazemos uma operação AND entre "o NOT da umask" AND "a BASE de arquivos"
então:

111 101 101 = NOT da umask
AND
110 110 110 = BASE de arquivos 666
-------------------
110 100 100 = Resultado do AND em modo octal é 644 e em modo textual é rw- r-- r--

 

Para diretórios, a BASE é 777 ficando então:
111 101 101 = NOT da umask
AND
111 111 111 = BASE de diretórios 777
-------------------
111 101 101 = Resultado do AND em modo octal é 755 e modo textual é rwx r-x r-x

Prontinho!

Mais bem explicado que isso, só outro disso! :)