qual é a diferença entre umask e chmod

13

Estou completamente confuso entre umask e chmod. Ambos são usados ​​para conceder permissões aos arquivos. Mas onde exatamente está a diferença e quando usá-las.

Eu li a documentação on-line, mas ambos parecem iguais para mim.

umask: umask é usada para definir permissões de arquivo padrão. Essas permissões serão usadas para todos os arquivos subseqüentes durante sua criação. chmod: usado para alterar as permissões de arquivos e diretórios.

De acordo com o meu entendimento, se, por exemplo, o arquivo test.doc for criado.

Por padrão, o unix fornece o código 022 umask.

Agora, quando eu o altero para chmod 666 test.doc, posso alterar o nível de permissão deste arquivo.

Agora, e se eu usar o umask 666 para o mesmo arquivo.

Que diferença acontece quando eu uso o chmod 666 e o ​​umask 666

user548781
fonte
2
umaskdefine uma variável de ambiente que define automaticamente as permissões de arquivo para os arquivos recém-criados . chmodaltera as permissões dos arquivos existentes .
DavidPostill
11
@DavidPostill. Não, umasknão define "uma variável de ambiente" O que ele faz é definir a máscara de criação do modo de arquivo do ambiente de execução de shell atual.
fpmurphy
@ fpmurphy1 Obrigado pelo esclarecimento :)
DavidPostill

Respostas:

11

A diferença é que isso umaskimplica apenas novos arquivos . Como você afirmou, o umask define as permissões padrão que um arquivo / diretório terá no momento da criação, mas depois umasknão as afeta mais.

chmod, no entanto, precisa que o arquivo seja criado antes da execução.

Portanto, se você executar umask, ele não terá nenhum efeito sobre os arquivos existentes.

nKn
fonte
2
Você não pode usar umaskem um arquivo, ele não tem fileargumento.
DavidPostill
Certo, reescreveu essa parte.
nKn 22/01
4

umaské muito diferente chmod, na verdade.

  1. Uma diferença importante ainda não foi mencionada: chmoddefine, mas umask limpa (restringe) os bits de permissão. É por isso que é chamado de "máscara" (como em "máscara de bits").

  2. Como David escreveu , umaské uma configuração (no nível do processo), portanto não é aplicada a nenhum arquivo específico (ao contrário de chmod).

  3. O que nos leva a outro ponto importante: umasknão se limita a arquivos. Também é aplicado ao criar diretórios. (Veja também, por exemplo, esta resposta .)

  4. Também importante, que o chmodpróprio comando não seja afetado pelo configurado atualmente umask.

Agora, para o seu exemplo do que faria umask 666:

Ele informará ao processo atual (por exemplo, seu shell) que quaisquer novos objetos do sistema de arquivos devem ser criados com os bits R+ W(4 + 2 = 6) removidos (de quaisquer permissões solicitadas implicitamente ou explicitamente na criação). (Portanto, 666 não é um valor muito prático, pois permite apenas que os Xbits (de execução) sejam definidos, mas para arquivos ilegíveis ...)

Por exemplo:

$ touch foo; ls -la foo
-rw-r--r-- ... foo   <-- default permissions

$ umask 666
$ touch bar; ls -la bar
---------- ... bar   <-- perms. after the new umask (restriction) is set
$ mkdir foodir; ls -la | grep foodir
d--x--x--x ... dir   <-- not very practical for dirs, either

$ chmod 777 bar; ls -la bar
-rwxrwxrwx .... bar* <-- chmod happily ignores the current umask

$ umask 022
$ touch bong; ls -la bong
-rw-r--r-- ... bong  <-- (so, it seems this was the default umask)

$ chmod 666 bong; ls -la bong
-rw-rw-rw- ... bong  <-- no surprise of any kind here
Sz.
fonte
0

UMASK = chmod 777 - permissões umask

umask 022 => 777 - 022 => chmod 755
umask 077 => 777 - 077 => chmod 700
umask 002 => 777 - 002 => chmod 775
umask 007 => 777 - 007 => chmod 770
umask 027 => 777 - 027 => chmod 750
umask 177 => 777 - 177 => chmod 600

Algo parecido.

PanPikuś
fonte
0

A permissão padrão para diretórios / arquivos é umask 022; os diretórios são configurados por padrão com a permissão 755 ( drwx-rw-rw) e os arquivos são configurados com 644 ( -rw-r--r--). Basicamente, você subtrai o valor octal da permissão desejada de 777 para um diretório e de 666 para um arquivo. Então, do exemplo acima:

(directory) umask 022 => 777 - 022 = 755

(file) umask 022 => 666 - 022 = 644

Você pode encontrar o resultado do umask octalcomando na fonte ao usar umask , dependendo do octal e se é um arquivo ou um diretório.

Fonte

No entanto , se você chmod 022 <file>for um diretório, deverá obter o seguinte: o d----w--w-que não faria muito sentido.

Abaixo, você encontrará uma ótima descrição do valor octal que pode ser recuperado aqui por Somnath Muluk, com ótimas fontes.

N   Description                      ls   binary    
0   No permissions at all            ---  000
1   Only execute                     --x  001
2   Only write                       -w-  010
3   Write and execute                -wx  011
4   Only read                        r--  100
5   Read and execute                 r-x  101
6   Read and write                   rw-  110
7   Read, write, and execute         rwx  111
R4zZ
fonte