55 votos

¿Por qué se asigna 777 a chmod para permitir todo en un archivo?

Me preguntaron en una entrevista por qué es que 777 es asignado a tomar todos los permisos para un archivo. ¿Por qué no 555? Dijo que hay razones para todo. ¿Cuál es la razón para la 777? ¿Por qué no cualquier otro número? ¿Hay alguna importancia en este número?

17voto

Prakash V Holkar Puntos 747

La lectura de los permisos de los archivos de medios 4, la escritura de permiso de archivo significa 2 y la ejecución de los permisos de los archivos de medios 1.

Así que el total de esto es 7.

Ahora, ¿cuál es 777: en primer lugar 7 es para el propietario del archivo que significa que el archivo propietario ha leído, derecho y permiso de ejecución.

2do 7 es para el grupo al que pertenece el archivo, significa que el grupo también tienen todas las de lectura, escritura y permiso de ejecución.

Y la 3ª 7 es para el permiso a otros

Si usted da el permiso de archivo 555 , entonces el archivo owner, group and others tienen sólo read y execute permiso not write permiso, porque permiso de lectura significa 4 y ejecutar significa que 1 de manera total consigue 5

7voto

Daniel Ward Puntos 108

En no muchas palabras como la respuesta:

Cada archivo tiene 3 opciones de permisos: lectura, escritura y ejecución. Usted puede elegir ninguno de estos, uno de estos, dos de ellos, o todos de estos:

C(3,0) + C(3,1) + C(3,2) + C(3,3) = 8

1 + 3 + 3 + 1 = 8

Así que, en total, hay 8 combinaciones; 8 opciones para los permisos. A contar desde 0, y el último número es el 7 (de 0 a 7). Así, representados por números, aquí están todas las opciones:

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)

Hay tres números, porque la orden va [permisos de usuario][permisos de grupo][otros permisos]

Así, 777 significa que los tres grupos han de leer, escribir y ejecutar permisos.


También, indirectamente, de modo que no necesariamente tienen que leer esta parte), porque creo que su relevancia es importante:¿por Qué es read número 4, en lugar del número 3?
0 - nothing
1 - execute
2 - write
3 - read
4 - execute + read (1 + 3)
5 - write + read (2 + 3)
6 - execute + write + read (3 + 2 + 1)
7 - ????? no way to get this with the 3 basic options (and we are missing execute + write)

La única manera de conseguir combinaciones únicas para todas las posibilidades es ir por potencias de 2 para las opciones básicas. 20 = 1 (ejecución) 21 = 2 (escribir), 22 = 4 (leer), y si hay una 4ª opción básica sería numerada 23 = 8. Tenga en cuenta que write no está en la lista hasta que todas las combinaciones de las opciones anteriores se han enumerado (que es solo una opción, ya que es sólo execute). read no está en la lista hasta que todas las combinaciones de las opciones anteriores se han enumerado (de nuevo, ya que sólo hay una combinación de dos opciones - execute + write). execute + write + read no está en la lista hasta que todas las combinaciones anteriores se han enumerado, el cual es 3, ya que ahora hay dos opciones de tres permisos. La lista podría continuar de esta manera, no importa cómo muchas opciones básicas hubo. Por el bien de ejemplo, con 4 opciones básicas (tenga en cuenta que también sabemos que habrá 16 combinaciones en total ya hay 4 opciones y 24 = 16):

0 - nothing
1 - execute
2 - write
4 - read
3 - execute + write (1 + 2)
5 - execute + read (1 + 4)
6 - write + read (2 + 4)
7 - execute + write + read (1 + 2 + 4)
8 - love
9 - execute + love (1 + 8)
10 - write + love (2 + 8)
11 - execute + write + love (1 + 2 + 8)
12 - read + love (4 + 8)
13 - execute + read + love (1 + 4 + 8)
14 - write + read + love (2 + 4 + 8)
15 - execute + write + read + love (1 + 2 + 4 + 8)

4voto

daviewales Puntos 1061

Voy a tratar de que la razón principal de por qué es 777, en lugar de aaa, o 999.

Recuerde que los permisos vienen en el formato siguiente:

 u   g   o
rwx rwx rwx

donde u=usuario, g=grupo, o=otros.

Ahora, imagine que usted está representando a cada uno de estos grupos como binario. 1 es verdadero, 0 es falso.

Si desea dar acceso completo a todo el mundo, que le asigne los permisos siguientes en binario:

 u   g   o
rwx rwx rwx
111 111 111

Ahora, si usted sabe binario, te das cuenta de que al convertir 111 de binario a decimal, se obtiene 7.

Por lo tanto, puede representar acceso total como 777.

Nota: Estamos realmente la conversión de binario a octal. Ver la edición de abajo.

Esto funciona para todos los otros modos de acceso así.

Por ejemplo, podemos ver fácilmente lo 555 por medio de la conversión de cada 5 a binario, y lo ha escrito en el formato anterior. 5 en binario es 101, por lo que contamos con los siguientes permisos:

 u   g   o
r-x r-x r-x
101 101 101
 5   5   5

Del mismo modo, si queremos darle todos los permisos para el usuario, pero sólo permite a otras personas a leer, se puede encontrar un número de la representación.

 u   g   o
rwx r-- r--
111 100 100
 7   4   4

Ahora, sabemos que 111 en binario es 7 en decimal, y 100 en binario es 4 en decimal. Por lo tanto, los permisos serán 744.

Editar:

Técnicamente, como ha puesto de relieve @LưuVĩnhPhúc y @Braiam, se realiza la conversión de binario a octal, como se describe a continuación. Sin embargo, el decimal y octal representaciones de números < 8 son el mismo, así que para números binarios con 3 dígitos o menos, tanto en decimal y octal representaciones son el mismo.

Cuando se representan como números octales, en lugar de dividir en grupos de tres, y haciendo binario a decimal conversión en cada grupo, se puede tomar todos los tres grupos juntos como un solo número binario, y convertir a octal.

Por ejemplo, aquí están algunos de binario a octal conversiones:

0b111111111 == 0o777
0b101101101 == 0o555
0b111100100 == 0o744

Tenga en cuenta que estoy anteponiendo "0b" y "0o" para distinguir entre binario y octal los números.

Si quieres jugar con esto, abra una terminal, ejecute python y, a continuación, jugar con los siguientes comandos:

oct(0b111111111)
bin(0o555)

Recuerde anteponer "0b" o "0o" a los números para que el equipo sabe lo de la base de que usted está interesado en. (Si no, va a suponer en base 10.)

4voto

Ununique Puntos 41

Me sorprende tantas respuestas similares totalmente se pierda la marca.

Después de determinar las 3 clases que se necesitan leer, escribir y ejecutar. Se fueron con octales (3 bits) para reducir al mínimo el espacio necesario para administrar el sistema de archivos.

3voto

M Sasan MH Puntos 56

Por alguna razón, UNIX diseñadores decidieron utilizar números OCTALES para los permisos de archivo. Como ustedes saben, un valor máximo de la cifra octal es 7. Resultó un dígito octal para acceso de usuario, una para el acceso de grupo y para el acceso del mundo son suficiente para casi todo. Número octal 3digit máxima es 777, y sólo tiene sentido que denota «acceso a todo el mundo todo».

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: