Можно ли представить символическое разрешение +X с помощью восьмеричного значения?

Можно ли представить символическое разрешение +X с помощью восьмеричного значения?

Можно ли представить символическое разрешение +X восьмеричным значением? На странице руководства chmod(1) говорится:

выполнять/искать только если файл является каталогом или уже имеет разрешение на выполнение для какого-либо пользователя

что означает, что это chmod -R g+Xдобавит группе разрешение на выполнение только в том случае, если уже установлен бит выполнения для пользователя, группы или другого. Вы, конечно, можете сделать это сложным способом с помощью find:

find . -perm /ugo=x -exec chmod g+x {} \;

Однако не очевидно, как можно сделать то же самое с восьмеричным режимом, не используянаходитьилитестсначала проверить права доступа к файлу. Возможно ли это, или есть области, где символические и восьмеричные права доступа просто не пересекаются?

решение1

Коротко говоря: это невозможно, нет.

Длинная история: восьмеричные разрешения — это состояния. [+-][rwxXst]Нотация представляет operations, что кульминация в изменении состояний. Обратите внимание, не =[rwxXst]тот, которыйнаборысостояние и эквивалентно восьмеричным модам, как сказал Жиль. XОдна из них является единственной условной операцией, все остальные безусловны.

Когда у вас chmodфайл с восьмеричными разрешениями, вы указываете окончательный вариантсостояниебитов разрешения дословно. Когда вы используете операции, вы выбираете, что вы хотитесделанныйк битам разрешений.

Ваш вопрос равносилен вопросу, есть ли одно число, которое представляет все квадратные корни. Ответ, очевидно, «нет»: каждый квадратный кореньурожайностьчисло (педанты: хотя оно может быть мнимым/иррациональным), но без начальногосостояние(число), вы не можете сказать, какое именно.

решение2

Символические режимы более выразительны, чем восьмеричные режимы, поскольку восьмеричные режимы могут выражать только абсолютные изменения. Относительные изменения, то есть не только, +Xно и любой режим, который не определяет все новые биты (например, g+x— или даже a+rwx, который не удаляет ни одного бита setuid/setgid), не могут быть выражены восьмеричными режимами.

И наоборот, любой восьмеричный режим может быть выражен как символьный режим, в общем случае с помощью =, например, 4750= u+rwxs,g=rx,o-rwxt(или u=rwxs,g=rx,o=или многих других комбинаций).

Связанный контент