AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 945782
Accepted
Ravexina
Ravexina
Asked: 2017-08-13 21:47:00 +0800 CST2017-08-13 21:47:00 +0800 CST 2017-08-13 21:47:00 +0800 CST

Por que umask 555 está definindo os mods de arquivo para "222" em vez de "111"?

  • 772

Eu sei que:

  1. Um arquivo mod padrão é666
  2. umaskvalue será removido dos mods padrão.

Então, por que quando eu defino o "umask" para 555ele, ele não define as permissões do arquivo recém-criado 111? em vez disso, está definindo-os para222

command-line
  • 3 3 respostas
  • 2225 Views

3 respostas

  • Voted
  1. Best Answer
    Ravexina
    2017-08-13T21:47:00+08:002017-08-13T21:47:00+08:00

    Resposta curta:

    Porque com um 5você está removendo o bit read (4)e executable (1), então você acaba com apenas write (2).


    Explicação:

    Com 555você não está ativando o bit executável padrão.

    It's wrong          =>          (6 - 5 = 1)
    

    Temos esses mods:

    • 4 = Ler
    • 2 = Escrever
    • 1 = executável

    A única maneira de criar um 5é a partir de 4 + 1, então 5na verdade significa:

       4 (Read) + 1  (Executable)   =    5
    

    Significa "remover" o executável e ler os mods se estiverem sendo configurados.

    Em outras palavras, umask 555você está removendo o bit lido ( 4 ) e executável ( 1 ) do modo de arquivo padrão ( 6 ) o que nos leva ao ( 2 ), porque em um 6 temos apenas um 4 e 2 para remover (não qualquer 1):

    6  =  4   +   2
    

    Sua remoção afeta apenas o 4, então o arquivo acaba com 222.

    Em binário

    Pense nisso em binário:

    1 -> 001
    2 -> 010
    3 -> 011
    4 -> 100
    5 -> 101
    6 -> 110
    7 -> 111
    

    O modo padrão do arquivo é 666 (110 110 110) e nosso umaskvalor é 555(101 101 101):

      Decimal title  ->         421 421 421
      666 in binary  ->         110 110 110
    - 555 in binary  ->       - 101 101 101
                               _____________
                                010 010 010
                                 2   2   2
                                -w- -w- -w-
    

    Ver? acabamos no -www-, ou 222.

    • 3
  2. Yaron
    2017-08-13T21:55:32+08:002017-08-13T21:55:32+08:00

    O valor umask resultante é mask & 0777 ( bitwise e )

    Quando a máscara é 0555
    Então 0555 e 0777 resultam em 0222

    nixCraft compreensão-linux-unix-umask-valor-uso

    Tarefa: Calculando a permissão final para FILES

    Você pode simplesmente subtrair o umask das permissões básicas para determinar a permissão final para o arquivo da seguinte maneira:

    666 – 022 = 644
    
    File base permissions : 666
    umask value : 022
    subtract to get permissions of new file (666-022) : 644 (rw-r–r–)
    

    Tarefa: Calculando a permissão final para diretórios

    Você pode simplesmente subtrair o umask das permissões básicas para determinar a permissão final para o diretório da seguinte maneira:

    777 – 022 = 755
    
    Directory base permissions : 777
    umask value : 022
    Subtract to get permissions of new directory (777-022) : 755 (rwxr-xr-x)
    

    A origem da diferença entre touch filee mkdir dir:

    Nota: conforme especificado nesta sessão de perguntas e respostas do Unix

    como os bits de permissão são codificados nos utilitários padrão. Aqui estão algumas linhas relevantes de dois arquivos no coreutilspacote que contém o código-fonte de ambos touch(1)e mkdir(1), entre outros:

    mkdir.c:

    if (specified_mode)
       {   
         struct mode_change *change = mode_compile (specified_mode);
         if (!change)
           error (EXIT_FAILURE, 0, _("invalid mode %s"),
                  quote (specified_mode));
         options.mode = mode_adjust (S_IRWXUGO, true, umask_value, change,
                                      &options.mode_bits);
         free (change);
       }   
      else
        options.mode = S_IRWXUGO & ~umask_value;
    }   
    

    Em outras palavras, se o modo não for especificado, defina-o para S_IRWXUGO (leia-se: 0777) modificado pelo umask_value.

    touch.cé ainda mais claro:

    int default_permissions =
      S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH;
    

    Ou seja, dê permissões de leitura e gravação para todos (leia-se: 0666), que serão modificadas pelo processo umaskde criação do arquivo, claro.

    Você pode contornar isso apenas programaticamente: ou seja, ao criar arquivos de um programa C, onde você faz as chamadas do sistema diretamente ou de uma linguagem que permite fazer uma chamada de sistema de baixo nível (veja, por exemplo, Perl's sysopenem perldoc -f sysopen).

    homem umask

    umask() define a máscara de criação do modo de arquivo do processo de chamada (umask) para mask & 0777 (ou seja, somente os bits de permissão de arquivo da máscara são usados) e retorna o valor anterior da máscara.

    • 2
  3. vitaminace33
    2020-10-11T14:04:19+08:002020-10-11T14:04:19+08:00

    Definição

    Grosso modo, em geral, os bits ativados de uma máscara desligam (se ainda não estiverem desligados) os bits do que ela está mascarando.

    Mais precisamente, neste caso particular, o modo resultante de um arquivo ou pasta recém-criado segue a seguinte operação bit a bit:

    result = mode & !mask
    

    onde resulté o modo resultante, modeé o modo usual (666 para arquivos e 777 para pastas) e !maské a negação bit a bit de mask, a máscara definida.

    Exemplos

    Mascarando a permissão de gravação (2) à esquerda e as permissões de leitura (4) e execução (1) à direita.

     folder                file                    folder                file
    (7) 111     mask       110 (6)                (7) 111     mask       110 (6)
        101 <-- !010 -->   101                        010 <-- !101 -->   010
      &-----     (2)     &-----                     &-----     (5)     &-----
    (5) 101                100 (4)                (2) 010                010 (2)
    

    Notas

    Observe no último exemplo que o mascaramento não coincide com a subtração (6-5=1 em ambas as notações, decimal e binária).

    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve