Расчет chmod - PullRequest
       10

Расчет chmod

0 голосов
/ 11 августа 2010

Предположим, у меня есть файл с разрешением 755 (rwxr-xr-x).Я хочу chmod g+rw в мой файл.В итоге получим 775. Какая математика здесь имеет место, чтобы вычислить это?Я не могу понять, как с этим справиться.

Или с 640 до 660. Какая формула имеет место?

Ответы [ 2 ]

2 голосов
/ 11 августа 2010
U   G   O
rwx r-x r-x ==
111 101 101 ==
  7   5   5

Единственная математика здесь - это преобразование из базы-2 в базу 10 (или, собственно, 8).

После добавления группы r / w вы получите:

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

(U = пользователь G = группа O = другой)

1 голос
/ 11 августа 2010

Для каждого из U, G и O просто замените каждое r, w или x двоичным 1, а каждое - двоичным 0. Результатом является двоичное число.Это число не может быть больше двоичного числа 111, которое равно как десятичному, так и восьмеричному числу 7.

Таким образом, у вас есть одно восьмеричное число для каждого из U, G и O. Теперь просто сложите их вместе в правильномпоследовательность.Технически, вы бы умножили U на 8 ^ 2, G на 8 ^ 1, а O на 8 ^ 0, поскольку восьмеричные места - степени 8.

Кажется, все это объясняется в предоставленной вами ссылке.

РЕДАКТИРОВАТЬ: отвечая на

Спасибо, я все это понимаю, но если бы я написал это в форме или в программе, как бы я поступил?

Это зависит от используемого вами языка программирования.Вы хотите, чтобы программа преобразовывала числа или фактически использовала chmod?

EDIT: ответ для:

Вводом будет значение разрешений, например, 660. По стороне строки, например,.г + RW.Программа вычисляет новое значение разрешения.

Хорошо, поэтому сначала разделите текущие разрешения на U, G и O, а затем используйте строку, чтобы указать, какие из них следует изменить.Вы можете однозначно найти разрешения по числу и наоборот *, и вы знаете, что r = 4, w = 2 и x = 1, поэтому всякий раз, когда вы сталкиваетесь с числом, которое не имеет соответствующего набора условий, вы добавляете 4, 2 или 1 к нему.После этого вы должны проверить, является ли результат действительным.Если нет, просто установите его на 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

Допустим, вместо этого команда была + rw.То же самое, что и выше, произойдет для u и g, но когда o достигнуто, мы можем видеть, что оно равно 0, поэтому мы добавляем 4 для r и 2 для w, что дает нам 6. Это действительное число, поэтому мы объединяемвсе они и возвращают 666.

* Допустимые комбинации:

rwx 7

rw- 6

rx 5

r-- 4

...