Trataré de abordar la razón subyacente por la cual es 777, en lugar de aaa, o 999.
Recuerde que los permisos vienen en el siguiente formato:
u g o
rwx rwx rwx
donde u = usuario, g = grupo, o = otro.
Ahora, imagina que estás representando a cada uno de estos grupos como binario. 1 es verdadero, 0 es falso.
Si desea dar acceso completo a todos, debe asignar los siguientes permisos en binario:
u g o
rwx rwx rwx
111 111 111
Ahora, si sabes binario, te darás cuenta de que cuando conviertes 111
de binario a decimal, obtienes 7
.
Por lo tanto, puede representar el acceso completo como 777
.
Nota: Realmente estamos convirtiendo de binario a octal. Vea la edición a continuación.
Esto también funciona para todos los demás modos de acceso.
Por ejemplo, podemos determinar fácilmente qué 555
significa convirtiendo cada uno 5
a binario y escribiéndolo en el formato anterior. 5
en binario es 101
, entonces tenemos los siguientes permisos:
u g o
r-x r-x r-x
101 101 101
5 5 5
Del mismo modo, si queremos otorgar todos los permisos al usuario, pero solo permitir que otras personas lean, podemos encontrar una representación numérica.
u g o
rwx r-- r--
111 100 100
7 4 4
Ahora, sabemos que 111
en binario está 7
en decimal, y 100
en binario está 4
en decimal. Por lo tanto, los permisos serán 744
.
Editar:
Técnicamente, como lo destacan @ LưuVĩnhPhúc y @Braiam, estamos convirtiendo de binario a octal, como se describe a continuación. Sin embargo, las representaciones decimales y octales de los números <8 son iguales, por lo que para los números binarios con 3 dígitos o menos, las representaciones decimales y octales son las mismas.
Cuando se representan como números octales, en lugar de dividirse en grupos de tres, y hacer una conversión de binario a decimal en cada grupo, en realidad puede tomar los tres grupos juntos como un solo número binario y convertirlos a octal.
Por ejemplo, aquí hay algunas conversiones binarias a octales:
0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744
Tenga en cuenta que estoy anteponiendo "0b" y "0o" para distinguir entre números binarios y octales.
Si quieres jugar con esto, abre una terminal, ejecuta python
y luego juega con los siguientes comandos:
oct(0b111111111)
bin(0o555)
Recuerde anteponer "0b" o "0o" a los números para que la computadora sepa en qué base está interesado. (Si no lo hace, asumirá la base 10.)