Hai familiarità con le operazioni logiche? In pratica l'umask serve per fare uno XOR sui permessi. Lo XOR è anche una porta logica che serve per fare addizioni e di conseguenza sottrazioni.

Esiste una cosa chiamata tabella di verità che ti spiega come funziona.

0 xor 0 = 0
1 xor 0 = 1
0 xor 1 = 1
1 xor 1 = 0

L'umask funziona proprio così.

Ragionando con gli 1 e 0 al posto dei consueti r,w,x te ne puoi rendere conto:

ad esempio con l'umask 0147 hai una rappresentazione in bit 0(001)(100)(111).

Se con l'umask fai lo xor con 0666 cioé 0(110)(110)(110) usando la tabella sopra, ottieni: 0(111)(011)(001) che in ottale è 0731.

Ma poiché c'è la restrizione sui permessi di esecuzione, diventa 0(110)(010)(000). Passando dai bit ai agli ottali: 0620.