Uma máscara de criação de arquivo definida por um determinado shell umask
é normalmente exclusiva do sistema operacional ou apenas para esse determinado shell?
Por exemplo, se eu alterar a máscara de criação de arquivos (máscara/bitmask do umask) no Bash, isso mudará apenas para o Bash ou também para possíveis outros shells existentes no meu sistema operacional, como Dash, ksh, zsh e assim por diante? ("um caso em que um shell afeta outros").
Para entender o 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 filhos.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 seu pai. Eles podem então mudar sua própria máscara. Por exemplo, existe uma
umask()
função C que pode alterar a máscara do programa que você está escrevendo, sem precisar chamarumask
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 quaisquer processos filhos futuros.
Como o propósito de um shell é ser capaz de criar e controlar outros processos, um
umask
comando está embutido na maioria dos shells. Isso não é necessário para um shell, é possível escrever um shell básico que não temumask
função. Mas tal shell não seria considerado útil como shell de uso geral para efetuar login e administrar um sistema.Você pode testar o que estou dizendo, usando o fato de que um shell como o Bash pode gerar outros shells Bash (ou qualquer outro shell que você goste):
umask
comando para consultar o valor atualbash
(ou qualquer outra coisa) para gerar um shell filhoumask
para conferir o valor da máscara da criançaumask 0000
umask
para verificar novamente a máscara da criançaexit
ou pressioneCtrl-d
)umask
para verificar sua máscaraReferências úteis:
man 1 umask
man 2 umask
(Isso dá a referência para aumask()
função C)man bash
(e procureumask
)