Em uma entrevista, perguntaram-me por que o 777 está atribuído a todas as permissões de um arquivo. Por que não 555? Ele disse que há razões para tudo. Então, qual é o motivo do 777? Por que não outro número? Existe algum significado nesse número?
permissions
user-management
Olá querido
fonte
fonte
Respostas:
Vou tentar abordar a razão subjacente porque é 777, em vez de AAA, ou 999.
Lembre-se de que as permissões vêm no seguinte formato:
onde u = usuário, g = grupo, o = outro.
Agora, imagine que você esteja representando cada um desses grupos como binários. 1 é verdadeiro, 0 é falso.
Se você deseja conceder acesso total a todos, atribua as seguintes permissões em binário:
Agora, se você souber binário, perceberá que, ao converter
111
de binário para decimal, você obtém7
.Assim, você pode representar o acesso completo como
777
.Nota: Estamos realmente convertendo de binário para octal. Veja a edição abaixo.
Isso funciona para todos os outros modos de acesso também.
Por exemplo, podemos facilmente descobrir o que
555
significa convertendo cada um5
para o binário e escrevendo-o no formato acima.5
em binário é101
, então temos as seguintes permissões:Da mesma forma, se queremos conceder todas as permissões ao usuário, mas permitir apenas que outras pessoas leiam, podemos encontrar uma representação numérica.
Agora, sabemos que
111
em binário está7
em decimal, e100
em binário está4
em decimal. Assim, as permissões serão744
.Editar:
Tecnicamente, conforme destacado por @ LưuVĩnhPhúc e @Braiam, estamos convertendo de binário para octal, conforme descrito abaixo. No entanto, as representações decimais e octais dos números <8 são iguais; portanto, para números binários com 3 dígitos ou menos, as representações decimais e octais são as mesmas.
Quando representados como números octais, em vez de se dividir em grupos de três, e fazendo a conversão de binário para decimal em cada grupo, é possível reunir todos os três grupos como um único número binário e converter em octal.
Por exemplo, aqui estão algumas conversões de binárias para octais:
Observe que estou acrescentando "0b" e "0o" para distinguir entre números binários e octais.
Se você quiser brincar com isso, abra um terminal, execute
python
e brinque com os seguintes comandos:Lembre-se de acrescentar "0b" ou "0o" aos números para informar ao computador em que base você está interessado. (Caso contrário, ele assumirá a base 10.)
fonte
7
é o mesmo em decimal e octal - no entanto,777
não é. Quando você está falando sobre virar bits, isso faz a diferença.777
às vezes referido como Deus.Ler permissão de arquivo significa
4
, escrever permissão de arquivo2
e executar significa permissão de arquivo1
.Então, o total disso é
7
.Agora, o que é o 777: primeiro
7
é para o proprietário do arquivo, o que significa que o proprietário do arquivo leu, corrigiu e executou a permissão.O segundo
7
é para o grupo ao qual o arquivo pertence, significa que o grupo também possui todas as permissões de leitura, gravação e execução.E a terceira
7
é para permissão de outrosSe você der permissão
555
ao arquivo, o arquivoowner, group and others
terá apenas permissãoread
e permissão, porque a permissão de leitura significa 4 e a execução significa 1, para que o total sejaexecute
not write
5
fonte
Em poucas palavras, como a resposta principal:
Cada arquivo possui 3 opções de permissão: ler, gravar e executar. Você pode escolher nenhum destes, um destes, dois destes ou todos estes:
C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8
1 + 3 + 3 + 1 = 8
Então, no total, existem 8 combinações; 8 opções para permissões. Contando de 0, o último número é 7 (de 0 a 7). Então, representado por números, aqui estão todas as opções:
Existem três números porque a ordem vai [permissões de usuário] [permissões de grupo] [outras permissões]
Portanto, 777 significa que todos os três grupos têm permissões de leitura, gravação e execução.
Também (indiretamente relacionado, para que você não precise necessariamente ler esta parte), porque acho que sua relevância é importante: Por que o
read
número 4 é o número 3?A única maneira de obter combinações únicas para todas as possibilidades é usar potências de 2 para as opções básicas. 2 0 = 1 (execução), 2 1 = 2 (gravação), 2 2 = 4 (leitura) e, se houvesse uma quarta opção básica, ela seria numerada 2 3 = 8. Observe que
write
não está listado até todas as combinações de as opções anteriores foram listadas (que é apenas uma opção, pois é apenasexecute
).read
não será listado até que todas as combinações de opções anteriores tenham sido listadas (novamente uma, pois existe apenas uma combinação com duas opções -execute
+write
).execute
+write
+read
não será listado até que todas as combinações anteriores tenham sido listadas, que é 3, pois agora existem duas opções entre três permissões. A lista continuaria dessa maneira, não importa quantas opções básicas existissem. Por uma questão de exemplo, com 4 opções básicas (note que também sabemos que haverá 16 combinações no total, pois existem 4 opções e 2 4 = 16):fonte
Estou surpreso com tantas respostas semelhantes que perdem completamente o alvo.
Após determinar as três classes necessárias, leia, escreva e execute. Eles foram com octal (3 bits) para minimizar o espaço necessário para gerenciar o sistema de arquivos .
fonte
Por alguma razão, os designers do UNIX decidiram usar números OCTAL para permissões de arquivo. Como você sabe, um valor máximo para o número octal de um dígito é 7. Acabou que um dígito octal para acesso do usuário, um para o acesso ao grupo e outro para o acesso mundial é suficiente para quase tudo. O número octal 3digit máximo é 777 e faz sentido que denote "acesso a todos / tudo".
fonte
Hoje em dia, todos sabemos que um byte é de 8 bits : isso foi universalmente aceito por décadas. Mas nem sempre foi esse o caso, e o Unix (que inspirou o Linux de várias maneiras) foi escrito durante um período em que isso ainda estava sendo debatido. Em particular, precisava ser portátil para sistemas que usavam bytes de 6 ou 8 bits. Algumas das pessoas que escreveram estavam de um lado do debate e outras do outro lado.
Em uma nota relacionada, a Base-2 (binária) não é uma notação muito conveniente para escrever valores. Atualmente, a maioria dos programadores escreve uma notação mais compacta que usa a Base-16 (hexadecimal) . 16 é uma base suficientemente grande para que você possa exatamente compilar quatro bits em um dígito hexadecimal: por exemplo, "0000" em binário é 0x0 em hexadecimal (que "0x" é uma maneira comum de observar que você está prestes a escreva um número hexadecimal), enquanto "1111" é 0xF (ou 15 em decimal). Você pode escrever qualquer combinação possível de quatro bits usando um único dígito hexadecimal, apenas contando em binário, e devido à maneira como a aritmética posicional funciona, você pode empilhá-lo: dois dígitos hexadecimais podem codificar qualquer combinação possível de oito bits, apenas contando, e assim por diante. Então o pessoal de 8 bits adorou isso.
O pessoal de 6 bits tinha sua própria maneira de fazer isso, mas em vez de usar a Base-16, eles usavam a Base-8 (octal). Possui vantagens semelhantes ao hexadecimal: você pode armazenar qualquer posição de três bits em um dígito octal e pode empilhar dígitos de maneira semelhante. Assim como as pessoas de 8 bits usavam dois dígitos hexadecimais para um byte, as pessoas de 6 bits usavam dois dígitos octais para um byte. Você não vê mais octal muito, mas normalmente era marcado com um zero à esquerda: por exemplo, "111" é 07 em octal.
Agora, o que tudo isso tem a ver com permissões do Unix? No que diz respeito ao Unix, há três coisas que você pode fazer com um arquivo: você pode lê-lo, escrevê-lo ou executá-lo como um programa. Se você quiser restringir isso com permissões, precisará de um pouco para cada um deles: ative-o para as coisas que alguém tem permissão para fazer e deixe-o para as coisas que alguém não tem permissão para fazer. Como há três coisas sendo rastreadas, você precisa de três bits, e como o Unix o acompanha em três linhas (proprietário, grupo e todos), você precisa de nove bits no total.
Em algum momento, alguém - provavelmente no campo de 6 bits - disse "Ei, podemos usar dígitos octais para isso" . E isso acabou sendo uma notação muito conveniente: três dígitos octais são suficientes para codificar todas as combinações possíveis dos campos de bits. Depois que eles decidiram fazer isso, o destino do 777 (e o 000) foram selados, porque esses números seriam os mesmos, não importando como eles organizassem os bits, mas a ordem importava para todos os outros números, então eles começaram a fazer isso.
Eles organizaram as permissões em campos de três bits: leia no início, escreva no meio e execute no final. Depois, eles mesmos organizaram os campos: proprietário no início, grupo no meio e outros no final. Depois que eles fizeram isso, tudo o que eles tinham que fazer para atribuir o resto dos números era contar.
Como são campos de 3 bits, você pode dizer que cada dígito octal controla um dos campos : o primeiro dígito controla as permissões de proprietário, o segundo dígito controla as permissões de grupo e o terceiro dígito controla outras permissões. Assim, 777 (111 111 111) são todas permissões para todos, enquanto 700 (111 000 000) são todas permissões apenas para o proprietário. Outras combinações também são comuns: 666 (110 110 110) é de leitura / gravação para todos, mas não é executado), enquanto 555 (101 101 101) é de leitura / execução para todos, mas não é gravado, e 400 (100 000 000) são somente para o proprietário e sem acesso para mais ninguém.
E é por isso que 777 significa todas as permissões. Hoje em dia, é provavelmente a razão mais popular para as pessoas usarem octal, embora o Unix e seus descendentes ainda tenham alguns outros vestígios. Por exemplo,
od
ou Octal Dump, é uma maneira de obter dumps binários de um arquivo na forma octal (ele tem um primo hexadecimal, chamadoxxd
, mas isso não é tão conhecido e não está disponível em todos os lugares). É também por isso que você precisa ter cuidado com os zeros à esquerda em algumas linguagens de programação, porque elas podem pensar que você pretende escrever números em octal quando essa não é realmente sua intenção.fonte