¿Es posible representar el permiso simbólico +X con un valor octal?

¿Es posible representar el permiso simbólico +X con un valor octal?

¿Es posible representar el permiso simbólico +X con un valor octal? La página del manual chmod(1) dice:

ejecutar/buscar solo si el archivo es un directorio o ya tiene permiso de ejecución para algún usuario

lo que significa que chmod -R g+Xagregará el permiso de ejecución del grupo solo si ya hay un bit de ejecución establecido para el usuario, grupo u otro. Ciertamente puedes hacer esto de la manera más difícil con find:

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

Sin embargo, no es obvio cómo se podría hacer lo mismo con un modo octal sin usarencontraropruebapara verificar los permisos del archivo primero. ¿Es esto posible o hay algunas áreas donde los permisos simbólicos y octales simplemente no se superponen?

Respuesta1

El cuento: no es posible, no.

La historia más larga: los permisos octales son estados. La [+-][rwxXst]notación representa operationsque culminan en estados cambiantes. Tenga en cuenta, no el =[rwxXst]queconjuntosestado y es equivalente a los modos octales como dijo Gilles. Una Xes la única operación condicional, las demás son todas incondicionales.

Cuando crea chmodun archivo con permisos octales, proporciona el archivo finalestadode los bits de permiso palabra por palabra. Cuando utilizas las operaciones, eliges lo que quieres.hechoa los bits de permiso.

Su pregunta equivale a preguntar si hay un único número que represente todas las raíces cuadradas. La respuesta es obviamente "no": cada raíz cuadradarendimientosun número (pedantes: aunque podría ser imaginario/irracional), pero sin el punto inicialestado(el número), no se puede decir cuál.

Respuesta2

Los modos simbólicos son más expresivos que los modos octales, porque los modos octales sólo pueden expresar cambios absolutos. Los cambios relativos, lo que significa no solo +Xcualquier modo que no especifique todos los bits nuevos (como g+x- o incluso a+rwx, que no elimina ningún bit setuid/setgid), no se pueden expresar con modos octales.

Por el contrario, cualquier modo octal se puede expresar como un modo simbólico, en general usando =, por ejemplo 4750= u+rwxs,g=rx,o-rwxt(o u=rwxs,g=rx,o=muchas otras combinaciones).

información relacionada