Me preguntaron en una entrevista por qué es que 777 está asignado a tomar todos los permisos para un archivo. ¿Por qué no 555? Dijo que hay razón para todo. Entonces, ¿cuál es el motivo de 777? ¿Por qué no cualquier otro número? ¿Hay algún significado en este número?
permissions
user-management
Hola querida
fuente
fuente
Respuestas:
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:
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:
Ahora, si sabes binario, te darás cuenta de que cuando conviertes
111
de binario a decimal, obtienes7
.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 uno5
a binario y escribiéndolo en el formato anterior.5
en binario es101
, entonces tenemos los siguientes permisos: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.
Ahora, sabemos que
111
en binario está7
en decimal, y100
en binario está4
en decimal. Por lo tanto, los permisos serán744
.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:
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: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.)
fuente
7
es lo mismo en decimal y octal; sin embargo,777
no lo es. Cuando estás hablando de voltear bits, hace la diferencia.777
denominan a veces Dios.Leer permiso de archivo significa
4
, escribir permiso de archivo significa2
y ejecutar permiso de archivo significa1
.Entonces el total de esto es
7
.Ahora, lo que es 777: primero
7
es para el propietario del archivo, lo que significa que el propietario del archivo tiene permiso de lectura, derecho y ejecución.El segundo
7
es para el grupo al que pertenece el archivo, significa que el grupo también tiene todos los permisos de lectura, escritura y ejecución.Y tercero
7
es para permiso de otrosSi le da permiso al archivo,
555
entonces el archivoowner, group and others
solo tiene permisoread
y permiso porque leer permiso significa 4 y ejecutar significa 1, por lo que el total obtieneexecute
not write
5
fuente
En no tantas palabras como la respuesta principal:
Cada archivo tiene 3 opciones de permisos: leer, escribir y ejecutar. No puede elegir ninguno de estos, uno de estos, dos de estos, o todos estos:
C (3,0) + C (3,1) + C (3,2) + C (3,3) = 8
1 + 3 + 3 + 1 = 8
Entonces, en total, hay 8 combinaciones; 8 opciones de permisos. Contando desde 0, el último número es 7 (de 0 a 7). Entonces, representado por números, aquí están todas las opciones:
Hay tres números porque el pedido va [permisos de usuario] [permisos de grupo] [otros permisos]
Entonces, 777 significa que los tres grupos tienen permisos de lectura, escritura y ejecución.
Además (relacionado indirectamente, por lo que no necesariamente tiene que leer esta parte), porque creo que su relevancia es importante: ¿por qué es el
read
número 4 en lugar del número 3?La única forma de obtener combinaciones únicas para todas las posibilidades es ir por potencias de 2 para las opciones básicas. 2 0 = 1 (ejecutar), 2 1 = 2 (escribir), 2 2 = 4 (leer), y si hubiera una cuarta opción básica, se numeraría 2 3 = 8. Tenga en cuenta que
write
no se enumerará hasta todas las combinaciones de Se han enumerado las opciones anteriores (que es solo una opción, ya que es justaexecute
).read
no se enumera hasta que se hayan enumerado todas las combinaciones de opciones anteriores (de nuevo una, ya que solo hay una combinación con dos opciones:execute
+write
).execute
+write
+read
no se enumera hasta que se hayan enumerado todas las combinaciones anteriores, que es 3, ya que ahora hay dos opciones de tres permisos. La lista continuaría de esta manera, sin importar cuántas opciones básicas hubiera. Por ejemplo, con 4 opciones básicas (tenga en cuenta que también sabemos que habrá un total de 16 combinaciones, ya que hay 4 opciones y 2 4 = 16):fuente
Me sorprenden tantas respuestas similares que fallan por completo.
Después de determinar las 3 clases que se necesitaban leer, escribir y ejecutar. Fueron con octal (3 bits) para minimizar el espacio necesario para administrar el sistema de archivos .
fuente
Por alguna razón, los diseñadores de UNIX decidieron usar números OCTAL para permisos de archivos. Como saben, un valor máximo para un número octal de un dígito es 7. Resultó que un dígito octal para el acceso del usuario, uno para el acceso grupal y otro para el acceso mundial es suficiente para casi todo. El número octal máximo de 3digit es 777, y solo tiene sentido que denote "acceso a todos / todo".
fuente
Hoy en día, todos sabemos que un byte es de 8 bits : esto ha sido universalmente acordado durante décadas. Pero ese no fue siempre el caso, y Unix (que inspiró a Linux en muchos aspectos) se escribió durante un momento en que esto todavía se estaba debatiendo. En particular, tenía que ser portátil para sistemas que usaban bytes de 6 bits o bytes de 8 bits. Algunas de las personas que lo escribieron estaban de un lado del debate, y otros estaban del otro lado.
En una nota relacionada, Base-2 (binario) no es una notación muy conveniente para escribir valores. Hoy en día, la mayoría de los programadores escriben una notación más compacta que usa Base-16 (hexadecimal) en su lugar. 16 es una base lo suficientemente grande como para que pueda empaquetar exactamente cuatro bits en un dígito hexadecimal: por ejemplo, "0000" en binario es 0x0 en hexadecimal (ese "0x" es una forma común de notar que está a punto de escriba un número hexadecimal), mientras que "1111" es 0xF (o 15 en decimal). En realidad, puede escribir cualquier combinación posible de cuatro bits con un solo dígito hexadecimal, simplemente contando en binario, y debido a la forma en que funciona la aritmética posicional, puede apilarla: dos dígitos hexadecimales pueden codificar cualquier combinación posible de ocho bits, solo contando, y así sucesivamente. A la gente de 8 bits le encantó esto.
La gente de 6 bits tenía su propia forma de hacer esto, pero en lugar de usar Base-16, usaban Base-8 (octal). Tiene ventajas similares a las hexadecimales: puede almacenar cualquier posición de tres bits en un dígito octal, y puede apilar los dígitos de manera similar. Entonces, al igual que la gente de 8 bits usó dos dígitos hexadecimales para un byte, la gente de 6 bits usó dos dígitos octales para un byte. Ya no se ve mucho octal, pero normalmente se observó con un cero a la izquierda: por ejemplo, "111" es 07 en octal.
Ahora, ¿qué tiene que ver todo esto con los permisos de Unix? En lo que respecta a Unix, hay tres cosas que puede hacer con un archivo: puede leerlo, escribir en él o ejecutarlo como un programa. Si va a restringir eso con permisos, entonces necesita un poco para cada uno de ellos: actívelo para las cosas que alguien puede hacer y déjelo para las cosas que alguien no tiene permitido hacer. Dado que hay tres cosas que se están rastreando, necesita tres bits, y dado que Unix lo rastrea a lo largo de tres líneas (propietario, grupo y todos), necesita nueve bits en total.
En algún momento de la línea, alguien, probablemente en el campamento de 6 bits, dijo "Oye, podemos usar dígitos octales para esto" . Y esto resultó ser una notación muy conveniente: tres dígitos octales son suficientes para codificar cada combinación posible de los campos de bits. Una vez que decidieron hacer esto, el destino de 777 (y 000) se sellaron, porque esos números serían los mismos sin importar cómo organizaron los bits, pero el orden importaba para todos los otros números, por lo que decidieron hacerlo.
Organizaron los permisos en campos de tres bits: leer al principio, escribir en el medio y ejecutar al final. Luego organizaron los campos ellos mismos: propietario al principio, grupo en el medio y otros al final. Una vez que habían hecho esto, todo lo que tenían que hacer para asignar el resto de los números era contar.
Debido a que son campos de 3 bits, puede decir que cada dígito octal controla uno de los campos : el primer dígito controla los permisos del propietario, el segundo dígito controla los permisos de grupo y el tercer dígito controla otros permisos. Por lo tanto, 777 (111 111 111) son todos los permisos para todos, mientras que 700 (111 000 000) son todos los permisos solo para el propietario. Otras combinaciones también son comunes: 666 (110110110) es lectura / escritura para todos pero no ejecución), mientras que 555 (101101101) es lectura / ejecución para todos pero no escritura, y 400 (100 000 000) es lectura- solo para el propietario y sin acceso para nadie más.
Y es por eso que 777 significa todos los permisos. En estos días, es probable que sea la razón más popular para que las personas usen octal, aunque Unix y sus descendientes todavía tienen algunos otros vestigios. Por ejemplo,
od
o Octal Dump, es una forma de obtener volcados binarios de un archivo en forma octal (tiene un primo hexadecimal, llamadoxxd
, pero eso no es tan conocido y no está disponible en todas partes). También es por eso que debe tener cuidado con los ceros a la izquierda en algunos lenguajes de programación, porque podrían pensar que tiene la intención de escribir números en octal cuando esa no es realmente su intención.fuente