Uma máscara de criação de arquivo definida por umask de um shell é tipicamente exclusiva do sistema operacional ou apenas desse shell?

1

Uma máscara de criação de arquivo definida pelo umask de um dado shell é tipicamente única para o sistema operacional inteiramente ou apenas para aquele determinado shell?

Por exemplo, se eu alterar a máscara de criação de arquivo (máscara / bitmask de umask) no Bash, ela será alterada apenas para Bash ou também para possíveis outros shells existentes em meu sistema operacional, como Dash, ksh, zsh e assim por diante? ("um caso foi um efeito de conchas outros").

    
por JohnDoea 11.11.2018 / 22:08

1 resposta

5

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):

  1. Abra um terminal
  2. Execute o comando umask para consultar o valor atual
  3. Executar bash (ou qualquer outro) para gerar um shell filho
  4. Execute umask para verificar o valor da máscara da criança
  5. Defina a máscara da criança para outra coisa, por exemplo, execute umask 0000
  6. Execute umask para verificar novamente a máscara da criança
  7. Saia do shell filho (execute exit ou pressione Ctrl-d )
  8. 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ção umask() C)
  • man bash (e procure por umask )
  • link
por 11.11.2018 / 22:35

Tags