Tentarei 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:
u g o
rwx rwx rwx
em que u = usuário, g = grupo, o = outro.
Agora, imagine que você esteja representando cada um desses grupos como binário. 1 é verdadeiro, 0 é falso.
Se você quiser dar acesso total a todos, atribua as seguintes permissões em binário:
u g o
rwx rwx rwx
111 111 111
Agora, se você souber binário, perceberá que, ao converter 111
de binário para decimal, obterá 7
.
Assim, você pode representar o acesso total 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 5
em binário e gravando-o no formato acima. 5
no binário é 101
, por isso temos as seguintes permissões:
u g o
r-x r-x r-x
101 101 101
5 5 5
Da mesma forma, se quisermos dar todas as permissões ao usuário, mas permitir que apenas outras pessoas leiam, podemos encontrar uma representação numérica.
u g o
rwx r-- r--
111 100 100
7 4 4
Agora, sabemos que 111
no binário é 7
no decimal e 100
no binário é 4
no decimal. Assim, as permissões serão 744
.
Editar:
Tecnicamente, como destacado por @ LưuVĩnhPhúc e @Braiam, estamos convertendo de binário para octal, conforme descrito abaixo. No entanto, as representações decimal e octal dos números & lt; 8 são iguais, portanto, para números binários com 3 dígitos ou menos, as representações decimal e octal são as mesmas.
Quando representado como números octal, em vez de dividir em grupos de três, e fazendo conversão de binário para decimal em cada grupo, você pode realmente juntar todos os três grupos como um único número binário e converter para octal.
Por exemplo, aqui estão algumas conversões binárias para octal:
0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744
Note que estou prefixando "0b" e "0o" para distinguir entre números binários e octal.
Se você quiser brincar com isso, abra um terminal, execute python
e, em seguida, use os seguintes comandos:
oct(0b111111111)
bin(0o555)
Lembre-se de colocar "0b" ou "0o" nos números para informar ao computador em que base você está interessado. (Caso contrário, ele assumirá a base 10).