Pregunta

Le permite supongamos que tengo un archivo con el 755 (rwxr-xr-x) permiso. Quiero chmod g+rw a mi archivo. Para terminar con 775. ¿Cuál es la matemática que tiene lugar aquí para calcular eso? No puedo bastante conseguir mi cabeza alrededor de ella gracias.

O de manera similar 640, a 660. ¿Cuál es la fórmula que tiene lugar?

http: //articles.slicehost .com / 2010/7/17 / usando-chmod-parte-2-octal-mode

Gracias

¿Fue útil?

Solución

Para cada uno de U, G, y O, basta con sustituir cada r, w, x o con un 1 binario y cada - con un 0 binario. El resultado es un número binario. Ese número no puede ser mayor que binario 111, que es igual a 7, tanto en decimal y octal.

Así que hay un número octal para cada uno de U, G, y O. Ahora simplemente ponerlos juntos en la secuencia apropiada. Técnicamente, se estaría multiplicando por 8 T ^ 2, G de 8 ^ 1, y O por 8 ^ 0, ya que son lugares octales poderes de 8.

Todo esto parece explicarse en el enlace que ya ha proporcionado.

EDIT: en respuesta a

  

Gracias, entiendo todo eso, pero si en la redacción de este en la forma o un programa ¿cómo podría hacerlo?

Eso dependería del lenguaje de programación que está utilizando. ¿Quieres que el programa para convertir los números o en realidad con el uso chmod?

EDIT: respuesta para:

  

entrada sería un valor permisos, por ejemplo, 660. A lo largo de una cadena lateral, por ejemplo. g + RW. El programa calcula los valores del nuevo permiso.

Ok, por lo que primero separar los permisos actuales en U, G, y O, a continuación, utilizar la cadena de decir cuál de aquellos a modificar. Usted puede encontrar de forma única los permisos de la serie y viceversa *, y usted sabe que r = 4, w = 2 y x = 1, por lo que cada vez que se encuentra con un número que no tiene la condición conjunto apropiado, deberá añadir 4 , 2, o 1 a ella. Después de eso, usted debe comprobar para ver si el resultado es válido. Si no, simplemente ponerlo a 0.

Example: current=660 command=g+rw
u = 6
g = 6
o = 0
from string: we know we are modifying g only
g = 6 means: rw-
since rw is already set, we do not change anything
result = u+g+o = 660
return result

Digamos que el comando había sido un + RW en su lugar. Exactamente el mismo que el anterior pasaría para uy g, pero cuando se alcanza o, podemos ver que es 0, así que agregamos 4 para r y 2 para w, que nos da 6. Este es un número válido, por lo combinamos todos ellos y devolver 666.

* Las combinaciones válidas:

  

rwx 7

     

rw- 6

     

r-x 5

     

r-- 4

Otros consejos

U   G   O
rwx r-x r-x ==
111 101 101 ==
  7   5   5

El único matemáticas aquí es la conversión de la base-2 a la base 10 (o 8, en realidad).

Después de agregar grupo R / W, se obtendrá:

U   G   O
rwx rwx r-x ==
111 111 101 ==
  7   7   5

(U = user G = grupo O = otro)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top