Para entender umask, primeiro você precisa entender a estrutura dos processos no Unix / Linux. Ou seja, eles formam uma estrutura semelhante a uma árvore. Cada processo precisa ter um pai, que é o processo que o gerou. (Com exceção do primeiro processo, init
). Cada processo pode ou não gerar mais processos, chamados de crianças.
Cada processo tem uma propriedade de máscara. Isso é o que é consultado ou definido usando o comando umask.
Os processos herdam a máscara de seus pais. Eles podem então mudar sua própria máscara. Por exemplo, há uma função umask()
C que pode alterar a máscara do programa que você está escrevendo, sem precisar chamar umask
do shell.
Um processo filho não pode afetar a máscara de seu pai. Portanto, alterar a máscara de um processo não afetará todo o sistema. Isso afetará apenas os futuros processos filhos.
Como o objetivo de um shell é poder criar e controlar outros processos, um comando umask
é incorporado à maioria dos shells. Isso não é necessário para um shell, é possível escrever um shell básico que não tenha a função umask
. Mas tal shell não seria considerado útil como um shell de uso geral para efetuar login e administrar um sistema.
Você pode testar o que eu estou dizendo, usando o fato de que um shell como o Bash pode gerar outros shells Bash (ou qualquer outro shell que você goste):
- Abra um terminal
- Execute o comando
umask
para consultar o valor atual - Executar
bash
(ou qualquer outro) para gerar um shell filho - Execute
umask
para verificar o valor da máscara da criança - Defina a máscara da criança para outra coisa, por exemplo, execute
umask 0000
- Execute
umask
para verificar novamente a máscara da criança - Saia do shell filho (execute
exit
ou pressioneCtrl-d
) - Agora você está novamente no shell pai. Execute
umask
para verificar sua máscara
Referências úteis:
-
man 1 umask
-
man 2 umask
(Isto fornece a referência para a funçãoumask()
C) -
man bash
(e procure porumask
) - link